refactor: convert files from spaces to tabs

This commit is contained in:
Stefan Imhoff
2022-08-24 10:29:42 +02:00
parent 056e9c45e6
commit 06efdf8583
113 changed files with 97766 additions and 97778 deletions

View File

@@ -6,94 +6,94 @@ const shortcodes = require('./src/utils/shortcodes.js');
const collections = require('./src/utils/collections.js');
module.exports = function (config) {
// Plugins
if (process.env.ELEVENTY_ENV == 'production') {
config.addPlugin(pluginLazyImages);
}
// Plugins
if (process.env.ELEVENTY_ENV == 'production') {
config.addPlugin(pluginLazyImages);
}
// Markdown It
let markdownIt = require('markdown-it');
let markdownItGitHubHeadings = require('markdown-it-github-headings');
let markdownItExternalAnchor = require('markdown-it-external-anchor');
let options = {
html: true,
};
// Markdown It
let markdownIt = require('markdown-it');
let markdownItGitHubHeadings = require('markdown-it-github-headings');
let markdownItExternalAnchor = require('markdown-it-external-anchor');
let options = {
html: true,
};
let markdownLib = markdownIt(options)
.use(markdownItGitHubHeadings)
.use(markdownItExternalAnchor, {
domain: 'www.kogakure.de',
class: 'external',
});
let markdownLib = markdownIt(options)
.use(markdownItGitHubHeadings)
.use(markdownItExternalAnchor, {
domain: 'www.kogakure.de',
class: 'external',
});
config.setLibrary('md', markdownLib);
config.setLibrary('md', markdownLib);
// Compress and combine JS files
config.addFilter('jsmin', require('./src/utils/minify-js.js'));
// Compress and combine JS files
config.addFilter('jsmin', require('./src/utils/minify-js.js'));
// Minify the HTML in production
if (process.env.ELEVENTY_ENV == 'production') {
config.addTransform('htmlmin', require('./src/utils/minify-html.js'));
}
// Minify the HTML in production
if (process.env.ELEVENTY_ENV == 'production') {
config.addTransform('htmlmin', require('./src/utils/minify-html.js'));
}
// Shortcodes
config.addShortcode('download', shortcodes.download);
config.addShortcode('duoColorImage', shortcodes.duoColorImage);
config.addShortcode('email', shortcodes.email);
config.addShortcode('more', shortcodes.more);
config.addShortcode('product', shortcodes.product);
config.addShortcode('youtube', shortcodes.youtube);
config.addPairedShortcode('banner', shortcodes.banner);
config.addPairedShortcode('figure', shortcodes.figure);
config.addPairedShortcode('productshelf', shortcodes.productshelf);
// Shortcodes
config.addShortcode('download', shortcodes.download);
config.addShortcode('duoColorImage', shortcodes.duoColorImage);
config.addShortcode('email', shortcodes.email);
config.addShortcode('more', shortcodes.more);
config.addShortcode('product', shortcodes.product);
config.addShortcode('youtube', shortcodes.youtube);
config.addPairedShortcode('banner', shortcodes.banner);
config.addPairedShortcode('figure', shortcodes.figure);
config.addPairedShortcode('productshelf', shortcodes.productshelf);
// Filters
Object.keys(filters).forEach((filterName) => {
config.addFilter(filterName, filters[filterName]);
});
config.addFilter('nbsp', filterNbsp(2, 10));
// Filters
Object.keys(filters).forEach((filterName) => {
config.addFilter(filterName, filters[filterName]);
});
config.addFilter('nbsp', filterNbsp(2, 10));
// Watch for changes and reload
config.addWatchTarget('src/assets');
// Watch for changes and reload
config.addWatchTarget('src/assets');
// Copy static files to dist
config.addPassthroughCopy({
'src/static/**/*.{xml,html,ico}': '.',
});
config.addPassthroughCopy({
'src/static/.well-known/*': '.well-known',
});
config.addPassthroughCopy({
'src/downloads': 'downloads',
});
config.addPassthroughCopy({
'src/assets/fonts': 'assets/fonts',
});
config.addPassthroughCopy({
'src/assets/images': 'assets/images',
});
// Copy static files to dist
config.addPassthroughCopy({
'src/static/**/*.{xml,html,ico}': '.',
});
config.addPassthroughCopy({
'src/static/.well-known/*': '.well-known',
});
config.addPassthroughCopy({
'src/downloads': 'downloads',
});
config.addPassthroughCopy({
'src/assets/fonts': 'assets/fonts',
});
config.addPassthroughCopy({
'src/assets/images': 'assets/images',
});
// Deep-Merge
config.setDataDeepMerge(true);
// Deep-Merge
config.setDataDeepMerge(true);
// Custom Collections
Object.keys(collections).forEach((collectionName) => {
config.addCollection(collectionName, collections[collectionName]);
});
// Custom Collections
Object.keys(collections).forEach((collectionName) => {
config.addCollection(collectionName, collections[collectionName]);
});
// Set input and output folders
return {
dir: {
input: 'src',
data: 'data',
includes: 'includes',
layouts: 'layouts',
output: 'dist',
},
templateFormats: ['njk', 'md', '11ty.js'],
htmlTemplateEngine: 'njk',
dataTemplateEngine: 'njk',
markdownTemplateEngine: 'njk',
passthroughFileCopy: true,
};
// Set input and output folders
return {
dir: {
input: 'src',
data: 'data',
includes: 'includes',
layouts: 'layouts',
output: 'dist',
},
templateFormats: ['njk', 'md', '11ty.js'],
htmlTemplateEngine: 'njk',
dataTemplateEngine: 'njk',
markdownTemplateEngine: 'njk',
passthroughFileCopy: true,
};
};

View File

@@ -1,15 +1,15 @@
{
"env": {
"es6": true,
"node": true,
"browser": true
},
"extends": ["eslint:recommended", "plugin:prettier/recommended"],
"plugins": ["prettier"],
"parserOptions": {
"sourceType": "module"
},
"rules": {
"prettier/prettier": "error"
}
"env": {
"es6": true,
"node": true,
"browser": true
},
"extends": ["eslint:recommended", "plugin:prettier/recommended"],
"plugins": ["prettier"],
"parserOptions": {
"sourceType": "module"
},
"rules": {
"prettier/prettier": "error"
}
}

View File

@@ -1,35 +1,35 @@
{
"plugins": [
"stylelint-order",
"stylelint-config-rational-order/plugin",
"stylelint-a11y",
"stylelint-high-performance-animation",
"stylelint-prettier"
],
"extends": [
"stylelint-config-recommended",
"stylelint-a11y/recommended",
"stylelint-prettier/recommended"
],
"syntax": "scss",
"rules": {
"property-no-unknown": [
true,
{
"ignoreProperties": ["suffix", "symbols", "system"]
}
],
"no-descending-specificity": null,
"order/order": ["custom-properties", "declarations"],
"order/properties-alphabetical-order": true,
"plugin/no-low-performance-animation-properties": true,
"at-rule-no-unknown": [
true,
{
"ignoreAtRules": ["define-placeholder", "extend"]
}
],
"string-quotes": "single",
"prettier/prettier": true
}
"plugins": [
"stylelint-order",
"stylelint-config-rational-order/plugin",
"stylelint-a11y",
"stylelint-high-performance-animation",
"stylelint-prettier"
],
"extends": [
"stylelint-config-recommended",
"stylelint-a11y/recommended",
"stylelint-prettier/recommended"
],
"syntax": "scss",
"rules": {
"property-no-unknown": [
true,
{
"ignoreProperties": ["suffix", "symbols", "system"]
}
],
"no-descending-specificity": null,
"order/order": ["custom-properties", "declarations"],
"order/properties-alphabetical-order": true,
"plugin/no-low-performance-animation-properties": true,
"at-rule-no-unknown": [
true,
{
"ignoreAtRules": ["define-placeholder", "extend"]
}
],
"string-quotes": "single",
"prettier/prettier": true
}
}

View File

@@ -1,3 +1,3 @@
{
"presets": ["@babel/preset-env"]
"presets": ["@babel/preset-env"]
}

View File

@@ -16,94 +16,91 @@ const svgSprite = require('gulp-svg-sprite');
* Package JavaScript with Babel and Browserify
*/
task('js', () => {
return browserify(['./src/assets/scripts/main.js'], {
debug: true,
})
.transform(babel)
.bundle()
.on('error', function (err) {
console.error(err);
this.emit('end');
})
.pipe(source('main.js'))
.pipe(buffer())
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(sourcemaps.write('.'))
.pipe(dest('./dist/assets/scripts'));
return browserify(['./src/assets/scripts/main.js'], {
debug: true,
})
.transform(babel)
.bundle()
.on('error', function (err) {
console.error(err);
this.emit('end');
})
.pipe(source('main.js'))
.pipe(buffer())
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(sourcemaps.write('.'))
.pipe(dest('./dist/assets/scripts'));
});
/**
* Create CSS and Sourcemaps with PostCSS
*/
task('css', function () {
return src([
'./src/assets/styles/*.css',
'./src/assets/styles/critical/*.css',
])
.pipe(plumber())
.pipe(sourcemaps.init())
.pipe(postcss())
.pipe(sourcemaps.write('.'))
.pipe(dest('./dist/assets/styles'));
return src(['./src/assets/styles/*.css', './src/assets/styles/critical/*.css'])
.pipe(plumber())
.pipe(sourcemaps.init())
.pipe(postcss())
.pipe(sourcemaps.write('.'))
.pipe(dest('./dist/assets/styles'));
});
/**
* Create CSS with PostCSS for production
*/
task('css:production', function () {
return src(['./src/assets/styles/*.css'])
.pipe(plumber())
.pipe(postcss())
.pipe(dest('./dist/assets/styles'));
return src(['./src/assets/styles/*.css'])
.pipe(plumber())
.pipe(postcss())
.pipe(dest('./dist/assets/styles'));
});
/**
* Copy critical CSS files to project folder
*/
task('css:critical', function () {
return src(['./src/assets/styles/critical/*.css'])
.pipe(plumber())
.pipe(postcss())
.pipe(dest('./src/includes/critical'));
return src(['./src/assets/styles/critical/*.css'])
.pipe(plumber())
.pipe(postcss())
.pipe(dest('./src/includes/critical'));
});
/**
* Create SVG sprite map from SVG files
*/
task('svg', () => {
return src('./src/icons/*.svg')
.pipe(plumber())
.pipe(
svgSprite({
mode: {
symbol: {
dest: '.',
sprite: 'icons.svg',
},
svg: {
xmlDeclaration: false,
doctypeDeclaration: false,
},
},
})
)
.pipe(dest('src/includes'));
return src('./src/icons/*.svg')
.pipe(plumber())
.pipe(
svgSprite({
mode: {
symbol: {
dest: '.',
sprite: 'icons.svg',
},
svg: {
xmlDeclaration: false,
doctypeDeclaration: false,
},
},
})
)
.pipe(dest('src/includes'));
});
/**
* Optimize and minimize images
*/
task('optimize:images', () => {
return src('src/assets/images/**/*.{jpg,jpeg,png,gif,svg}')
.pipe(
imagemin({
optimizationLevel: 3,
progressive: true,
interlaced: true,
})
)
.pipe(dest('src/assets/images/'))
.pipe(size());
return src('src/assets/images/**/*.{jpg,jpeg,png,gif,svg}')
.pipe(
imagemin({
optimizationLevel: 3,
progressive: true,
interlaced: true,
})
)
.pipe(dest('src/assets/images/'))
.pipe(size());
});
/**
@@ -115,8 +112,8 @@ task('build', parallel('js', 'css:production', 'css:critical'));
* Watch for changes in files
*/
task('watch', () => {
watch('./src/assets/scripts/**/*.js', series('js'));
watch('./src/assets/styles/**/*.css', series('css'));
watch('./src/assets/scripts/**/*.js', series('js'));
watch('./src/assets/styles/**/*.css', series('css'));
});
/**

View File

@@ -1,28 +1,28 @@
[build]
command = "npm run build"
publish = "dist"
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "12.16"
NODE_VERSION = "12.16"
[dev]
command = "npm run dev"
publish = "dist"
command = "npm run dev"
publish = "dist"
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
X-Content-Type-Options = "nosniff"
Referrer-Policy= "no-referrer-when-downgrade"
Permissions-Policy = "interest-cohort=()"
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
X-Content-Type-Options = "nosniff"
Referrer-Policy= "no-referrer-when-downgrade"
Permissions-Policy = "interest-cohort=()"
[[headers]]
for = "/sw.js"
for = "/sw.js"
[headers.values]
cache-control = "max-age=0,no-cache,no-store,must-revalidate"
[headers.values]
cache-control = "max-age=0,no-cache,no-store,must-revalidate"
[[redirects]]
from = "/artikel/*"

172910
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,86 +1,86 @@
{
"name": "website-11ty-kogakure.de",
"version": "1.0.0",
"description": "Source code of my martial arts website",
"scripts": {
"build": "ELEVENTY_ENV=production npm-run-all build:assets build:html build:sw",
"build:assets": "gulp build",
"build:html": "eleventy",
"build:sw": "workbox generateSW workbox.config.js",
"clean": "npx del dist",
"debug": "DEBUG=* npx eleventy",
"deploy": "netlify deploy --prod",
"deploy:preview": "netflify deploy",
"dev": "ELEVENTY_ENV=development npm run watch",
"live": "netlify dev --live",
"prebuild": "npm run clean",
"prestart": "npm run clean",
"publish": "npm-run-all build deploy",
"start": "netlify dev",
"svg": "gulp svg",
"watch": "npm-run-all --parallel watch:*",
"watch:assets": "gulp",
"watch:html": "eleventy --serve"
},
"repository": {
"type": "git",
"url": "git+https://github.com/kogakure/website-11ty-kogakure.de.git"
},
"keywords": [
"11ty"
],
"author": "Stefan Imhoff",
"license": "ISC",
"homepage": "https://www.kogakure.de",
"devDependencies": {
"@11ty/eleventy": "1.0.1",
"autoprefixer": "^10.2.5",
"babelify": "^10.0.0",
"browserify": "^17.0.0",
"cssnano": "^5.0.2",
"del-cli": "^3.0.1",
"eleventy-nbsp-filter": "^0.1.0",
"eleventy-plugin-lazyimages": "^2.1.0",
"eslint": "^7.25.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^3.4.0",
"gulp": "^4.0.2",
"gulp-imagemin": "^7.1.0",
"gulp-plumber": "^1.2.1",
"gulp-postcss": "^9.0.0",
"gulp-size": "^3.0.0",
"gulp-sourcemaps": "^3.0.0",
"gulp-svg-sprite": "^1.5.0",
"html-minifier": "^4.0.0",
"markdown-it-external-anchor": "^1.0.0",
"markdown-it-github-headings": "^2.0.0",
"moment": "^2.29.1",
"netlify-cli": "^3.39.4",
"npm-run-all": "^4.1.5",
"outdent": "^0.8.0",
"postcss": "^8.2.13",
"postcss-100vh-fix": "^1.0.2",
"postcss-cli": "^8.3.1",
"postcss-custom-media": "^8.0.0",
"postcss-custom-properties": "^11.0.0",
"postcss-extend": "^1.0.5",
"postcss-import": "^14.0.1",
"postcss-media-minmax": "^5.0.0",
"postcss-nested": "^5.0.5",
"postcss-sort-media-queries": "^3.8.9",
"prettier": "^2.2.1",
"sal.js": "^0.8.4",
"stylelint": "^13.13.0",
"stylelint-a11y": "^1.2.3",
"stylelint-config-prettier": "^8.0.2",
"stylelint-config-rational-order": "^0.1.2",
"stylelint-config-recommended": "^5.0.0",
"stylelint-high-performance-animation": "^1.5.2",
"stylelint-order": "^4.1.0",
"stylelint-prettier": "^1.2.0",
"uglify-js": "^3.13.4",
"vinyl-buffer": "^1.0.1",
"vinyl-source-stream": "^2.0.0",
"workbox-cli": "^6.1.5"
}
"name": "website-11ty-kogakure.de",
"version": "1.0.0",
"description": "Source code of my martial arts website",
"scripts": {
"build": "ELEVENTY_ENV=production npm-run-all build:assets build:html build:sw",
"build:assets": "gulp build",
"build:html": "eleventy",
"build:sw": "workbox generateSW workbox.config.js",
"clean": "npx del dist",
"debug": "DEBUG=* npx eleventy",
"deploy": "netlify deploy --prod",
"deploy:preview": "netflify deploy",
"dev": "ELEVENTY_ENV=development npm run watch",
"live": "netlify dev --live",
"prebuild": "npm run clean",
"prestart": "npm run clean",
"publish": "npm-run-all build deploy",
"start": "netlify dev",
"svg": "gulp svg",
"watch": "npm-run-all --parallel watch:*",
"watch:assets": "gulp",
"watch:html": "eleventy --serve"
},
"repository": {
"type": "git",
"url": "git+https://github.com/kogakure/website-11ty-kogakure.de.git"
},
"keywords": [
"11ty"
],
"author": "Stefan Imhoff",
"license": "ISC",
"homepage": "https://www.kogakure.de",
"devDependencies": {
"@11ty/eleventy": "1.0.1",
"autoprefixer": "^10.2.5",
"babelify": "^10.0.0",
"browserify": "^17.0.0",
"cssnano": "^5.0.2",
"del-cli": "^3.0.1",
"eleventy-nbsp-filter": "^0.1.0",
"eleventy-plugin-lazyimages": "^2.1.0",
"eslint": "^7.25.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^3.4.0",
"gulp": "^4.0.2",
"gulp-imagemin": "^7.1.0",
"gulp-plumber": "^1.2.1",
"gulp-postcss": "^9.0.0",
"gulp-size": "^3.0.0",
"gulp-sourcemaps": "^3.0.0",
"gulp-svg-sprite": "^1.5.0",
"html-minifier": "^4.0.0",
"markdown-it-external-anchor": "^1.0.0",
"markdown-it-github-headings": "^2.0.0",
"moment": "^2.29.1",
"netlify-cli": "^3.39.4",
"npm-run-all": "^4.1.5",
"outdent": "^0.8.0",
"postcss": "^8.2.13",
"postcss-100vh-fix": "^1.0.2",
"postcss-cli": "^8.3.1",
"postcss-custom-media": "^8.0.0",
"postcss-custom-properties": "^11.0.0",
"postcss-extend": "^1.0.5",
"postcss-import": "^14.0.1",
"postcss-media-minmax": "^5.0.0",
"postcss-nested": "^5.0.5",
"postcss-sort-media-queries": "^3.8.9",
"prettier": "^2.2.1",
"sal.js": "^0.8.4",
"stylelint": "^13.13.0",
"stylelint-a11y": "^1.2.3",
"stylelint-config-prettier": "^8.0.2",
"stylelint-config-rational-order": "^0.1.2",
"stylelint-config-recommended": "^5.0.0",
"stylelint-high-performance-animation": "^1.5.2",
"stylelint-order": "^4.1.0",
"stylelint-prettier": "^1.2.0",
"uglify-js": "^3.13.4",
"vinyl-buffer": "^1.0.1",
"vinyl-source-stream": "^2.0.0",
"workbox-cli": "^6.1.5"
}
}

View File

@@ -1,14 +1,14 @@
module.exports = {
plugins: [
require('postcss-import'),
require('postcss-custom-properties'),
require('postcss-nested'),
require('postcss-extend'),
require('postcss-media-minmax'),
require('postcss-custom-media'),
require('postcss-100vh-fix'),
require('postcss-sort-media-queries')(),
require('autoprefixer'),
...(process.env.ELEVENTY_ENV === 'production' ? [require('cssnano')] : []),
],
plugins: [
require('postcss-import'),
require('postcss-custom-properties'),
require('postcss-nested'),
require('postcss-extend'),
require('postcss-media-minmax'),
require('postcss-custom-media'),
require('postcss-100vh-fix'),
require('postcss-sort-media-queries')(),
require('autoprefixer'),
...(process.env.ELEVENTY_ENV === 'production' ? [require('cssnano')] : []),
],
};

View File

@@ -1,5 +1,5 @@
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js').catch((registrationError) => {
console.error('SW registration failed: ', registrationError);
});
navigator.serviceWorker.register('/sw.js').catch((registrationError) => {
console.error('SW registration failed: ', registrationError);
});
});

View File

@@ -1,42 +1,42 @@
(function () {
const root = document.getElementsByTagName('html')[0];
const root = document.getElementsByTagName('html')[0];
function setTheme(newTheme) {
window.__theme = newTheme;
preferredTheme = newTheme;
const currentTheme = newTheme === 'light' ? 'dark' : 'light';
root.classList.add(newTheme);
root.classList.remove(currentTheme);
}
function setTheme(newTheme) {
window.__theme = newTheme;
preferredTheme = newTheme;
const currentTheme = newTheme === 'light' ? 'dark' : 'light';
root.classList.add(newTheme);
root.classList.remove(currentTheme);
}
let preferredTheme;
let preferredTheme;
try {
preferredTheme = localStorage.getItem('theme');
} catch (err) {
console.error(err);
}
try {
preferredTheme = localStorage.getItem('theme');
} catch (err) {
console.error(err);
}
window.__setPreferredTheme = function (newTheme) {
setTheme(newTheme);
try {
localStorage.setItem('theme', newTheme);
} catch (err) {
console.error(err);
}
};
window.__setPreferredTheme = function (newTheme) {
setTheme(newTheme);
try {
localStorage.setItem('theme', newTheme);
} catch (err) {
console.error(err);
}
};
window.__toggleTheme = function () {
const currentTheme = window.__theme;
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
window.__setPreferredTheme(newTheme);
};
window.__toggleTheme = function () {
const currentTheme = window.__theme;
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
window.__setPreferredTheme(newTheme);
};
const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');
const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');
darkQuery.addEventListener('change', function (e) {
window.__setPreferredTheme(e.matches ? 'dark' : 'light');
});
darkQuery.addEventListener('change', function (e) {
window.__setPreferredTheme(e.matches ? 'dark' : 'light');
});
setTheme(preferredTheme || (darkQuery.matches ? 'dark' : 'light'));
setTheme(preferredTheme || (darkQuery.matches ? 'dark' : 'light'));
})();

View File

@@ -3,57 +3,53 @@ import { btnHandler } from './modules/btn-handler';
import { scrollHandler } from './modules/scroll-handler';
import { sourceCodeInfo } from './modules/source-code-info';
if (
'querySelector' in document &&
'localStorage' in window &&
'addEventListener' in window
) {
/* Initialize scroll reveal */
sal({
threshold: 0.1,
});
if ('querySelector' in document && 'localStorage' in window && 'addEventListener' in window) {
/* Initialize scroll reveal */
sal({
threshold: 0.1,
});
/* Show link to source code in console */
sourceCodeInfo();
/* Show link to source code in console */
sourceCodeInfo();
/* Scrolling up or down? */
scrollHandler();
/* Scrolling up or down? */
scrollHandler();
/* Toggle the theme */
btnHandler('#theme-toggle', function () {
window.__toggleTheme();
});
/* Toggle the theme */
btnHandler('#theme-toggle', function () {
window.__toggleTheme();
});
/* Smooth scrolling to the top */
btnHandler('#up-link', function () {
window.scroll({
top: 0,
left: 0,
behavior: 'smooth',
});
});
/* Smooth scrolling to the top */
btnHandler('#up-link', function () {
window.scroll({
top: 0,
left: 0,
behavior: 'smooth',
});
});
/* Deobfuscate the email */
btnHandler(
'#email',
function (event) {
if (event.target.classList.contains('objuscated')) {
const link = event.target;
const lock = link.parentNode.querySelector('#lock-box');
/* Deobfuscate the email */
btnHandler(
'#email',
function (event) {
if (event.target.classList.contains('objuscated')) {
const link = event.target;
const lock = link.parentNode.querySelector('#lock-box');
event.preventDefault();
event.preventDefault();
link.classList.remove('objuscated');
link.text = 'hey@imhoff.name';
link.href = 'mailto:hey@imhoff.name';
link.classList.remove('objuscated');
link.text = 'hey@imhoff.name';
link.href = 'mailto:hey@imhoff.name';
if (lock) {
lock.classList.remove('hidden');
}
} else {
return;
}
},
false
);
if (lock) {
lock.classList.remove('hidden');
}
} else {
return;
}
},
false
);
}

View File

@@ -1,15 +1,15 @@
export function btnHandler(selector, callback, prevent = true) {
const btn = document.querySelector(selector);
if (!btn) return;
const btn = document.querySelector(selector);
if (!btn) return;
btn.addEventListener(
'click',
function (event) {
if (prevent) {
event.preventDefault();
}
callback(event);
},
false
);
btn.addEventListener(
'click',
function (event) {
if (prevent) {
event.preventDefault();
}
callback(event);
},
false
);
}

View File

@@ -1,27 +1,24 @@
export function scrollHandler() {
const body = document.body;
const scrollUp = 'scroll-up';
const scrollDown = 'scroll-down';
let lastScroll = 0;
const body = document.body;
const scrollUp = 'scroll-up';
const scrollDown = 'scroll-down';
let lastScroll = 0;
window.addEventListener('scroll', () => {
const currentScroll = window.pageYOffset;
window.addEventListener('scroll', () => {
const currentScroll = window.pageYOffset;
if (currentScroll <= 0) {
body.classList.remove(scrollUp);
return;
}
if (currentScroll <= 0) {
body.classList.remove(scrollUp);
return;
}
if (currentScroll > lastScroll && !body.classList.contains(scrollDown)) {
body.classList.remove(scrollUp);
body.classList.add(scrollDown);
} else if (
currentScroll < lastScroll &&
body.classList.contains(scrollDown)
) {
body.classList.remove(scrollDown);
body.classList.add(scrollUp);
}
lastScroll = currentScroll;
});
if (currentScroll > lastScroll && !body.classList.contains(scrollDown)) {
body.classList.remove(scrollUp);
body.classList.add(scrollDown);
} else if (currentScroll < lastScroll && body.classList.contains(scrollDown)) {
body.classList.remove(scrollDown);
body.classList.add(scrollUp);
}
lastScroll = currentScroll;
});
}

View File

@@ -1,6 +1,6 @@
export function sourceCodeInfo() {
const sourceCodeInfo =
'👋 I see youre interested in the source code of this site? You can find it here: https://github.com/kogakure/website-11ty-kogakure.de';
const sourceCodeInfo =
'👋 I see youre interested in the source code of this site? You can find it here: https://github.com/kogakure/website-11ty-kogakure.de';
console.info(sourceCodeInfo);
console.info(sourceCodeInfo);
}

View File

@@ -1,44 +1,44 @@
/* Colors */
:root {
--color-accent-primary: hsl(86, 35%, 46%);
--color-accent-secondary: hsl(357, 96%, 46%);
--color-bg-code: #282c34;
--color-fg-code: #abb2bf;
--color-accent-primary: hsl(86, 35%, 46%);
--color-accent-secondary: hsl(357, 96%, 46%);
--color-bg-code: #282c34;
--color-fg-code: #abb2bf;
}
:root,
.light {
--color-bg-full: #ffffff;
--color-bg: hsl(40, 7%, 90%);
--color-bg-dark: hsl(40, 7%, 80%);
--color-border: rgb(185, 184, 182);
--color-fg-feather-inverse: rgba(255, 255, 255, 0.05);
--color-fg-feather: rgba(0, 0, 0, 0.05);
--color-fg-full-inverse: #ffffff;
--color-fg-full: #000000;
--color-fg-soft-inverse: rgba(255, 255, 255, 0.2);
--color-fg-soft: rgba(0, 0, 0, 0.2);
--color-fg-strong-inverse: rgba(255, 255, 255, 0.8);
--color-fg-strong: rgba(0, 0, 0, 0.8);
--color-fg: hsl(40, 7%, 5%);
--opacity-dark: 1;
--opacity-light: 0;
--color-bg-full: #ffffff;
--color-bg: hsl(40, 7%, 90%);
--color-bg-dark: hsl(40, 7%, 80%);
--color-border: rgb(185, 184, 182);
--color-fg-feather-inverse: rgba(255, 255, 255, 0.05);
--color-fg-feather: rgba(0, 0, 0, 0.05);
--color-fg-full-inverse: #ffffff;
--color-fg-full: #000000;
--color-fg-soft-inverse: rgba(255, 255, 255, 0.2);
--color-fg-soft: rgba(0, 0, 0, 0.2);
--color-fg-strong-inverse: rgba(255, 255, 255, 0.8);
--color-fg-strong: rgba(0, 0, 0, 0.8);
--color-fg: hsl(40, 7%, 5%);
--opacity-dark: 1;
--opacity-light: 0;
}
.dark {
--color-bg-full: #000000;
--color-bg: hsl(40, 7%, 10%);
--color-bg-dark: hsl(40, 7%, 5%);
--color-border: rgb(73, 72, 70);
--color-fg-feather-inverse: rgba(0, 0, 0, 0.05);
--color-fg-feather: rgba(255, 255, 255, 0.05);
--color-fg-full-inverse: #000000;
--color-fg-full: #ffffff;
--color-fg-soft-inverse: rgba(0, 0, 0, 0.2);
--color-fg-soft: rgba(255, 255, 255, 0.2);
--color-fg-strong-inverse: rgba(0, 0, 0, 0.8);
--color-fg-strong: rgba(255, 255, 255, 0.8);
--color-fg: hsla(40, 7%, 90%, 0.95);
--opacity-dark: 0;
--opacity-light: 1;
--color-bg-full: #000000;
--color-bg: hsl(40, 7%, 10%);
--color-bg-dark: hsl(40, 7%, 5%);
--color-border: rgb(73, 72, 70);
--color-fg-feather-inverse: rgba(0, 0, 0, 0.05);
--color-fg-feather: rgba(255, 255, 255, 0.05);
--color-fg-full-inverse: #000000;
--color-fg-full: #ffffff;
--color-fg-soft-inverse: rgba(0, 0, 0, 0.2);
--color-fg-soft: rgba(255, 255, 255, 0.2);
--color-fg-strong-inverse: rgba(0, 0, 0, 0.8);
--color-fg-strong: rgba(255, 255, 255, 0.8);
--color-fg: hsla(40, 7%, 90%, 0.95);
--opacity-dark: 0;
--opacity-light: 1;
}

View File

@@ -1,38 +1,38 @@
/** Figure & Caption */
figure {
margin-block-end: var(--space-10);
margin-block-start: 0;
margin-inline-end: 0;
margin-inline-start: 0;
margin-block-end: var(--space-10);
margin-block-start: 0;
margin-inline-end: 0;
margin-inline-start: 0;
&.light {
background: rgba(255, 255, 255, 0.8);
padding: var(--space-10);
}
&.light {
background: rgba(255, 255, 255, 0.8);
padding: var(--space-10);
}
&.dark {
background: rgba(0, 0, 0, 0.8);
padding: var(--space-10);
}
&.dark {
background: rgba(0, 0, 0, 0.8);
padding: var(--space-10);
}
}
.image-figure {
display: flex;
flex-direction: column;
display: flex;
flex-direction: column;
}
.image-figure img {
max-width: 100%;
max-width: 100%;
}
.image-figure-image-container {
background-color: var(--color-fg-feather);
display: flex;
justify-content: center;
padding: var(--space-10);
background-color: var(--color-fg-feather);
display: flex;
justify-content: center;
padding: var(--space-10);
}
figcaption {
font-size: clamp(0.8rem, 0.8vw, 0.75rem);
text-align: center;
font-size: clamp(0.8rem, 0.8vw, 0.75rem);
text-align: center;
}

View File

@@ -1,24 +1,24 @@
@font-face {
font-display: swap;
font-family: 'SecuelaVariable';
font-style: normal;
font-weight: 1 999;
src: url('/assets/fonts/secuela-regular-vf.woff2') format('woff2'),
url('/assets/fonts/secuela-regular-vf.woff') format('woff');
font-display: swap;
font-family: 'SecuelaVariable';
font-style: normal;
font-weight: 1 999;
src: url('/assets/fonts/secuela-regular-vf.woff2') format('woff2'),
url('/assets/fonts/secuela-regular-vf.woff') format('woff');
}
@font-face {
font-display: swap;
font-family: 'SecuelaVariable';
font-style: italic;
font-weight: 1 999;
src: url('/assets/fonts/secuela-italic-vf.woff2') format('woff2'),
url('/assets/fonts/secuela-italic-vf.woff') format('woff');
font-display: swap;
font-family: 'SecuelaVariable';
font-style: italic;
font-weight: 1 999;
src: url('/assets/fonts/secuela-italic-vf.woff2') format('woff2'),
url('/assets/fonts/secuela-italic-vf.woff') format('woff');
}
@font-face {
font-display: swap;
font-family: 'Sword Kanji';
src: url('/assets/fonts/sword-kanji.woff2') format('woff2'),
url('/assets/fonts/sword-kanji.woff') format('woff');
font-display: swap;
font-family: 'Sword Kanji';
src: url('/assets/fonts/sword-kanji.woff2') format('woff2'),
url('/assets/fonts/sword-kanji.woff') format('woff');
}

View File

@@ -1,60 +1,60 @@
/** Image */
img {
background-color: var(--color-fg-feather);
border-color: var(--color-fg-feather);
border-radius: var(--radius-1);
border-style: solid;
border-width: 1px;
box-shadow: 0 2px 3px var(--color-fg-feather);
display: block;
font-size: 0;
height: auto;
width: 100%;
background-color: var(--color-fg-feather);
border-color: var(--color-fg-feather);
border-radius: var(--radius-1);
border-style: solid;
border-width: 1px;
box-shadow: 0 2px 3px var(--color-fg-feather);
display: block;
font-size: 0;
height: auto;
width: 100%;
}
.dark img {
opacity: 0.87;
opacity: 0.87;
}
.dark .show-light,
.light .show-dark {
display: none;
display: none;
}
img[src$='.svg'],
.no-background {
background: transparent;
border: 0;
box-shadow: none;
background: transparent;
border: 0;
box-shadow: none;
}
.image-shadow {
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
&::after {
box-shadow: var(--shadow-subtle-shade);
content: '';
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
opacity: 0;
position: absolute;
transition-duration: var(--transition-duration-5);
transition-property: opacity;
transition-timing-function: ease-in-out;
width: 100%;
z-index: -1;
}
&::after {
box-shadow: var(--shadow-subtle-shade);
content: '';
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
opacity: 0;
position: absolute;
transition-duration: var(--transition-duration-5);
transition-property: opacity;
transition-timing-function: ease-in-out;
width: 100%;
z-index: -1;
}
&:hover,
&:focus {
transform: scale(1.03);
&:hover,
&:focus {
transform: scale(1.03);
&::after {
opacity: 1;
}
}
&::after {
opacity: 1;
}
}
}

View File

@@ -9,8 +9,8 @@
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
@@ -21,7 +21,7 @@ html {
*/
body {
margin: 0;
margin: 0;
}
/**
@@ -29,7 +29,7 @@ body {
*/
main {
display: block;
display: block;
}
/**
@@ -38,8 +38,8 @@ main {
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
@@ -51,9 +51,9 @@ h1 {
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
@@ -62,8 +62,8 @@ hr {
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
@@ -74,7 +74,7 @@ pre {
*/
a {
background-color: transparent;
background-color: transparent;
}
/**
@@ -83,9 +83,9 @@ a {
*/
abbr[title] {
border-block-end: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
border-block-end: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
@@ -94,7 +94,7 @@ abbr[title] {
b,
strong {
font-weight: black;
font-weight: black;
}
/**
@@ -105,8 +105,8 @@ strong {
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
@@ -114,7 +114,7 @@ samp {
*/
small {
font-size: 80%;
font-size: 80%;
}
/**
@@ -124,18 +124,18 @@ small {
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
inset-block-end: -0.25em;
inset-block-end: -0.25em;
}
sup {
inset-block-start: -0.5em;
inset-block-start: -0.5em;
}
/* Embedded content
@@ -146,7 +146,7 @@ sup {
*/
img {
border-style: none;
border-style: none;
}
/* Forms
@@ -162,10 +162,10 @@ input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
@@ -175,8 +175,8 @@ textarea {
button,
input {
/* 1 */
overflow: visible;
/* 1 */
overflow: visible;
}
/**
@@ -186,8 +186,8 @@ input {
button,
select {
/* 1 */
text-transform: none;
/* 1 */
text-transform: none;
}
/**
@@ -198,7 +198,7 @@ button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
-webkit-appearance: button;
}
/**
@@ -209,8 +209,8 @@ button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
border-style: none;
padding: 0;
border-style: none;
padding: 0;
}
/**
@@ -221,7 +221,7 @@ button:-moz-focusring,
[type='button']:-moz-focusring,
[type='reset']:-moz-focusring,
[type='submit']:-moz-focusring {
outline: 1px dotted ButtonText;
outline: 1px dotted ButtonText;
}
/**
@@ -229,7 +229,7 @@ button:-moz-focusring,
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
padding: 0.35em 0.75em 0.625em;
}
/**
@@ -240,12 +240,12 @@ fieldset {
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
@@ -253,7 +253,7 @@ legend {
*/
progress {
vertical-align: baseline;
vertical-align: baseline;
}
/**
@@ -261,7 +261,7 @@ progress {
*/
textarea {
overflow: auto;
overflow: auto;
}
/**
@@ -271,8 +271,8 @@ textarea {
[type='checkbox'],
[type='radio'] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
@@ -281,7 +281,7 @@ textarea {
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
height: auto;
height: auto;
}
/**
@@ -290,8 +290,8 @@ textarea {
*/
[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
@@ -299,7 +299,7 @@ textarea {
*/
[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
-webkit-appearance: none;
}
/**
@@ -308,8 +308,8 @@ textarea {
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
@@ -320,7 +320,7 @@ textarea {
*/
details {
display: block;
display: block;
}
/*
@@ -328,7 +328,7 @@ details {
*/
summary {
display: list-item;
display: list-item;
}
/* Misc
@@ -339,7 +339,7 @@ summary {
*/
template {
display: none;
display: none;
}
/**
@@ -347,5 +347,5 @@ template {
*/
[hidden] {
display: none;
display: none;
}

View File

@@ -2,17 +2,17 @@
/** Reset styles for Sal.js, if no JavaScript is available */
.no-js {
[data-sal|='fade'] {
opacity: 1;
}
[data-sal|='fade'] {
opacity: 1;
}
[data-sal|='slide'],
[data-sal|='zoom'] {
opacity: 1;
transform: none;
}
[data-sal|='slide'],
[data-sal|='zoom'] {
opacity: 1;
transform: none;
}
[data-sal|='flip'] {
transform: none;
}
[data-sal|='flip'] {
transform: none;
}
}

View File

@@ -1,59 +1,59 @@
/** Base */
html {
box-sizing: border-box;
font-size: 100%;
scroll-behavior: smooth;
box-sizing: border-box;
font-size: 100%;
scroll-behavior: smooth;
}
*,
*:before,
*:after {
box-sizing: inherit;
box-sizing: inherit;
}
::selection {
background-color: #a3b387;
color: #ffffff;
background-color: #a3b387;
color: #ffffff;
}
body {
background-color: var(--color-bg);
color: var(--color-fg);
display: flex;
flex-direction: column;
font-family: var(--font-family-base);
font-weight: var(--font-weight-normal);
height: 100vh;
line-height: 1.6;
background-color: var(--color-bg);
color: var(--color-fg);
display: flex;
flex-direction: column;
font-family: var(--font-family-base);
font-weight: var(--font-weight-normal);
height: 100vh;
line-height: 1.6;
&::before {
background-image: url('/assets/images/svg/bamboo.svg');
background-repeat: no-repeat;
background-size: 90vw auto;
content: '';
inset-block-end: 0;
inset-block-start: 0;
inset-inline-end: 0;
inset-inline-start: 0;
position: absolute;
z-index: -1;
}
&::before {
background-image: url('/assets/images/svg/bamboo.svg');
background-repeat: no-repeat;
background-size: 90vw auto;
content: '';
inset-block-end: 0;
inset-block-start: 0;
inset-inline-end: 0;
inset-inline-start: 0;
position: absolute;
z-index: -1;
}
}
[dir='rtl'] body::before {
transform: scaleX(-1);
transform: scaleX(-1);
}
@media (--tablet) {
body::before {
background-size: 80vw auto;
}
body::before {
background-size: 80vw auto;
}
}
@media (--desktop) {
body::before {
background-size: 50vw auto;
}
body::before {
background-size: 50vw auto;
}
}
/** Headlines */
@@ -66,24 +66,24 @@ h6,
.page-title,
.headline,
.subheadline {
font-weight: var(--font-weight-black);
letter-spacing: -0.02em;
line-height: var(--line-height-1);
margin-block-start: 0;
position: relative;
font-weight: var(--font-weight-black);
letter-spacing: -0.02em;
line-height: var(--line-height-1);
margin-block-start: 0;
position: relative;
}
h1,
.page-title {
font-size: var(--font-size-7);
margin-block-end: var(--space-13);
font-size: var(--font-size-7);
margin-block-end: var(--space-13);
}
h2,
.headline {
font-size: var(--font-size-5);
margin-block-end: var(--space-10);
margin-block-start: var(--space-13);
font-size: var(--font-size-5);
margin-block-end: var(--space-10);
margin-block-start: var(--space-13);
}
h3,
@@ -91,18 +91,18 @@ h4,
h5,
h6,
.subheadline {
font-size: var(--font-size-4);
margin-block-end: var(--space-8);
margin-block-start: var(--space-13);
font-size: var(--font-size-4);
margin-block-end: var(--space-8);
margin-block-start: var(--space-13);
}
h2:first-of-type,
h3:first-of-type {
margin-block-start: 0;
margin-block-start: 0;
}
p:last-of-type + h3 {
margin-block-start: var(--space-13);
margin-block-start: var(--space-13);
}
.dark h1,
@@ -114,190 +114,190 @@ p:last-of-type + h3 {
.dark .title,
.dark .headline,
.dark .subheadline {
font-weight: var(--font-weight-extra-bold);
font-weight: var(--font-weight-extra-bold);
}
/** GitHub Style Anchor */
.anchor {
float: left;
inset-block-start: -0.01em;
line-height: 1;
margin-inline-start: -20px;
padding-inline-end: 5px;
position: relative;
visibility: hidden;
float: left;
inset-block-start: -0.01em;
line-height: 1;
margin-inline-start: -20px;
padding-inline-end: 5px;
position: relative;
visibility: hidden;
h2:hover &,
h2:focus &,
h3:hover &,
h3:focus &,
h4:hover &,
h4:focus & {
visibility: visible;
}
h2:hover &,
h2:focus &,
h3:hover &,
h3:focus &,
h4:hover &,
h4:focus & {
visibility: visible;
}
}
/** Paragraph */
p,
.paragraph {
font-size: var(--font-size-3);
font-variant-ligatures: no-common-ligatures;
font-weight: var(--font-weight-normal);
letter-spacing: normal;
line-height: var(--line-height-2);
margin-block-end: var(--space-10);
margin-block-start: 0;
font-size: var(--font-size-3);
font-variant-ligatures: no-common-ligatures;
font-weight: var(--font-weight-normal);
letter-spacing: normal;
line-height: var(--line-height-2);
margin-block-end: var(--space-10);
margin-block-start: 0;
}
p:last-of-type {
margin-block-end: 0;
margin-block-end: 0;
}
.dark p,
.dark .paragraph {
font-weight: var(--font-weight-light);
font-weight: var(--font-weight-light);
}
/** Lists */
ul {
font-size: var(--font-size-3);
font-variant-ligatures: no-common-ligatures;
list-style-type: square;
margin-block-end: var(--space-12);
margin-block-start: var(--space-12);
padding-inline-start: 1.2em;
font-size: var(--font-size-3);
font-variant-ligatures: no-common-ligatures;
list-style-type: square;
margin-block-end: var(--space-12);
margin-block-start: var(--space-12);
padding-inline-start: 1.2em;
ul,
ol {
margin-block-start: var(--space-5);
}
ul,
ol {
margin-block-start: var(--space-5);
}
li {
margin-block-end: var(--space-5);
}
li {
margin-block-end: var(--space-5);
}
li & {
margin-block-end: 0;
padding-inline-start: 2rem;
}
li & {
margin-block-end: 0;
padding-inline-start: 2rem;
}
}
@media (--tablet) {
ul {
padding-inline-start: 0;
}
ul {
padding-inline-start: 0;
}
}
ol {
font-size: var(--font-size-3);
font-variant-ligatures: no-common-ligatures;
margin-block-end: var(--space-12);
margin-block-start: var(--space-12);
padding-inline-start: 1.2em;
font-size: var(--font-size-3);
font-variant-ligatures: no-common-ligatures;
margin-block-end: var(--space-12);
margin-block-start: var(--space-12);
padding-inline-start: 1.2em;
ol,
ul {
margin-block-start: var(--space-5);
}
ol,
ul {
margin-block-start: var(--space-5);
}
li {
margin-block-end: var(--space-2);
}
li {
margin-block-end: var(--space-2);
}
li & {
margin-block-end: 0;
padding-inline-start: 2rem;
}
li & {
margin-block-end: 0;
padding-inline-start: 2rem;
}
}
@media (--tablet) {
ol {
padding-inline-start: 0;
}
ol {
padding-inline-start: 0;
}
}
dl {
font-size: var(--font-size-3);
margin-block-end: var(--space-12);
margin-block-start: 0;
padding-inline-start: 1.2em;
font-size: var(--font-size-3);
margin-block-end: var(--space-12);
margin-block-start: 0;
padding-inline-start: 1.2em;
}
dt {
font-weight: var(--font-weight-extra-bold);
font-weight: var(--font-weight-extra-bold);
}
dd {
margin-inline-start: 0;
margin-inline-start: 0;
}
/** Critic Markup */
del {
text-decoration-thickness: 0.15em;
text-decoration-thickness: 0.15em;
}
ins {
text-decoration-style: solid;
text-decoration-thickness: 0.15em;
text-decoration-style: solid;
text-decoration-thickness: 0.15em;
}
mark {
background-color: rgba(230, 240, 40, 0.7);
border-color: rgba(0, 0, 0, 0.1);
border-radius: 0.25em;
box-shadow: var(--shadow-dark-inset);
color: rgba(0, 0, 0, 0.75);
padding-block-end: 0.4em;
padding-block-start: 0.4em;
padding-inline-end: 0.3em;
padding-inline-start: 0.3em;
background-color: rgba(230, 240, 40, 0.7);
border-color: rgba(0, 0, 0, 0.1);
border-radius: 0.25em;
box-shadow: var(--shadow-dark-inset);
color: rgba(0, 0, 0, 0.75);
padding-block-end: 0.4em;
padding-block-start: 0.4em;
padding-inline-end: 0.3em;
padding-inline-start: 0.3em;
}
/** Code, Sample, Abbreviation, Keyboard Shortcuts etc. */
pre {
white-space: pre;
white-space: pre;
}
p code,
li code,
samp {
background-color: var(--color-bg-code);
border-radius: 0.3em;
color: var(--color-fg-code);
padding-block-end: var(--space-1);
padding-block-start: var(--space-1);
padding-inline-end: var(--space-3);
padding-inline-start: var(--space-3);
white-space: normal;
background-color: var(--color-bg-code);
border-radius: 0.3em;
color: var(--color-fg-code);
padding-block-end: var(--space-1);
padding-block-start: var(--space-1);
padding-inline-end: var(--space-3);
padding-inline-start: var(--space-3);
white-space: normal;
}
kbd {
background-color: #f7f7f7;
border-color: #cccccc;
border-style: solid;
border-width: var(--border-width-1);
box-shadow: var(--shadow-beveled-keyboard);
color: #333333;
display: inline-block;
font-size: var(--font-size-2);
font-weight: 700;
line-height: 1.4;
padding: 0.3em 0.6em 0.1em;
text-shadow: var(--shadow-white-outline);
white-space: nowrap;
background-color: #f7f7f7;
border-color: #cccccc;
border-style: solid;
border-width: var(--border-width-1);
box-shadow: var(--shadow-beveled-keyboard);
color: #333333;
display: inline-block;
font-size: var(--font-size-2);
font-weight: 700;
line-height: 1.4;
padding: 0.3em 0.6em 0.1em;
text-shadow: var(--shadow-white-outline);
white-space: nowrap;
}
abbr {
font-variant: small-caps;
font-variant: small-caps;
}
:is(code, kbd, samp) {
font-family: var(--font-family-mono);
font-size: clamp(0.8rem, 0.8vw, 1rem);
font-family: var(--font-family-mono);
font-size: clamp(0.8rem, 0.8vw, 1rem);
}
:is(abbr, dfn) {
cursor: help;
cursor: help;
}
/** Quotes */
@@ -305,187 +305,187 @@ abbr {
blockquote[lang|='en'],
[lang|='en'] q,
q[lang|='en'] {
quotes: '“' '”' '' '';
quotes: '“' '”' '' '';
}
[lang|='de'] blockquote,
blockquote[lang|='de'],
[lang|='de'] q,
q[lang|='de'] {
quotes: '»' '«' '' '';
quotes: '»' '«' '' '';
}
[lang|='ja'] blockquote,
blockquote[lang|='ja'],
[lang|='ja'] q,
q[lang|='ja'] {
font-style: normal;
quotes: '「' '」,' '『' '』';
font-style: normal;
quotes: '「' '」,' '『' '』';
}
blockquote {
margin-block-end: var(--space-12);
margin-block-start: var(--space-12);
margin-inline-end: var(--space-8);
margin-inline-start: var(--space-8);
position: relative;
margin-block-end: var(--space-12);
margin-block-start: var(--space-12);
margin-inline-end: var(--space-8);
margin-inline-start: var(--space-8);
position: relative;
@media (--tablet) {
margin-inline-end: var(--space-10);
margin-inline-start: var(--space-10);
}
@media (--tablet) {
margin-inline-end: var(--space-10);
margin-inline-start: var(--space-10);
}
ul,
ol {
padding-block-start: var(--space-6);
}
ul,
ol {
padding-block-start: var(--space-6);
}
&::before {
color: var(--color-accent-primary);
content: '“';
font-family: Trebuchet MS, Georgia, serif;
font-size: var(--font-size-6);
height: 0.6em;
inset-block-start: -0.55em;
inset-inline-start: -0.55em;
position: absolute;
}
&::before {
color: var(--color-accent-primary);
content: '“';
font-family: Trebuchet MS, Georgia, serif;
font-size: var(--font-size-6);
height: 0.6em;
inset-block-start: -0.55em;
inset-inline-start: -0.55em;
position: absolute;
}
p,
ul,
ol {
font-size: var(--font-size-3);
font-style: italic;
font-weight: var(--font-weight-extra-light);
margin-block-end: var(--space-10);
margin-block-start: 0;
p,
ul,
ol {
font-size: var(--font-size-3);
font-style: italic;
font-weight: var(--font-weight-extra-light);
margin-block-end: var(--space-10);
margin-block-start: 0;
&:nth-last-child(2) {
margin-block-end: var(--space-2);
}
&:nth-last-child(2) {
margin-block-end: var(--space-2);
}
& strong {
font-style: italic;
font-weight: var(--font-weight-bold);
}
& strong {
font-style: italic;
font-weight: var(--font-weight-bold);
}
&:last-child {
& strong {
font-size: var(--font-size-3);
font-style: normal;
font-weight: var(--font-weight-bold);
&:last-child {
& strong {
font-size: var(--font-size-3);
font-style: normal;
font-weight: var(--font-weight-bold);
&::before {
content: '—';
font-weight: var(--font-weight-light);
inset-inline-start: -0.8em;
position: absolute;
}
&::before {
content: '—';
font-weight: var(--font-weight-light);
inset-inline-start: -0.8em;
position: absolute;
}
& em {
font-size: var(--font-size-3);
font-weight: var(--font-weight-normal);
font-weight: var(--font-weight-extra-light);
}
}
}
}
& em {
font-size: var(--font-size-3);
font-weight: var(--font-weight-normal);
font-weight: var(--font-weight-extra-light);
}
}
}
}
}
q {
font-style: italic;
font-style: italic;
&::before {
font-style: normal;
margin-inline-end: -0.05em;
}
&::before {
font-style: normal;
margin-inline-end: -0.05em;
}
&::after {
font-style: normal;
margin-inline-start: 0.1em;
}
&::after {
font-style: normal;
margin-inline-start: 0.1em;
}
}
.pullquote {
padding-block-end: var(--space-9);
padding-block-start: var(--space-9);
text-align: center;
padding-block-end: var(--space-9);
padding-block-start: var(--space-9);
text-align: center;
&::before {
display: none;
}
&::before {
display: none;
}
& p {
font-size: var(--font-size-4);
font-weight: var(--font-weight-extra-bold);
line-height: var(--line-height-1);
margin: 0;
}
& p {
font-size: var(--font-size-4);
font-weight: var(--font-weight-extra-bold);
line-height: var(--line-height-1);
margin: 0;
}
& p:first-child::before {
content: open-quote;
font-style: normal;
}
& p:first-child::before {
content: open-quote;
font-style: normal;
}
& p:nth-of-type(1):first-letter {
margin-inline-start: -0.4em;
}
& p:nth-of-type(1):first-letter {
margin-inline-start: -0.4em;
}
& p:nth-last-of-type(1)::after {
content: close-quote;
font-style: normal;
}
& p:nth-last-of-type(1)::after {
content: close-quote;
font-style: normal;
}
footer {
font-size: var(--font-size-2);
font-weight: normal;
margin-block-start: var(--space-6);
}
footer {
font-size: var(--font-size-2);
font-weight: normal;
margin-block-start: var(--space-6);
}
b {
font-style: normal;
}
b {
font-style: normal;
}
}
/** Links */
a {
color: var(--color-fg);
font-weight: var(--font-weight-semi-bold);
text-decoration: underline;
text-decoration-color: var(--color-fg-soft);
text-decoration-thickness: 0.2em;
text-underline-offset: auto;
color: var(--color-fg);
font-weight: var(--font-weight-semi-bold);
text-decoration: underline;
text-decoration-color: var(--color-fg-soft);
text-decoration-thickness: 0.2em;
text-underline-offset: auto;
&:hover,
&:focus {
text-decoration-color: var(--color-accent-primary);
}
&:hover,
&:focus {
text-decoration-color: var(--color-accent-primary);
}
}
/** Helper */
.no-margin {
margin: 0 !important;
margin: 0 !important;
}
.hidden {
display: none !important;
display: none !important;
}
.spoiler {
background: var(--color-fg-full);
color: var(--color-fg-full);
cursor: help;
padding-block-end: var(--space-1);
padding-block-start: var(--space-1);
padding-inline-end: var(--space-1);
padding-inline-start: var(--space-1);
background: var(--color-fg-full);
color: var(--color-fg-full);
cursor: help;
padding-block-end: var(--space-1);
padding-block-start: var(--space-1);
padding-inline-end: var(--space-1);
padding-inline-start: var(--space-1);
&.spoiler-visible {
color: var(--color-fg-full-inverse);
cursor: pointer;
}
&.spoiler-visible {
color: var(--color-fg-full-inverse);
cursor: pointer;
}
}
.no-js .spoiler {
color: var(--color-fg-full-inverse);
color: var(--color-fg-full-inverse);
}

View File

@@ -1,81 +1,81 @@
:root {
/** Grids */
--grid-fullsize: repeat(18, 1fr);
--grid-wide: repeat(14, 1fr);
/** Grids */
--grid-fullsize: repeat(18, 1fr);
--grid-wide: repeat(14, 1fr);
/** Border Widths */
--border-width-1: 1px;
--border-width-10: 0.1em;
--border-width-15: 0.15em;
/** Border Widths */
--border-width-1: 1px;
--border-width-10: 0.1em;
--border-width-15: 0.15em;
/** Font Families */
--font-family-base: SecuelaVariable, Arial, sans-serif;
--font-family-mono: Fira Code, Operator, Hasklig, Monoid, monospace;
/** Font Families */
--font-family-base: SecuelaVariable, Arial, sans-serif;
--font-family-mono: Fira Code, Operator, Hasklig, Monoid, monospace;
/** Font Sizes */
--font-size-1: 0.65em;
--font-size-2: clamp(0.65rem, 0.8vw, 0.75rem);
--font-size-3: clamp(1rem, 1.1vw, 1.25rem);
--font-size-4: clamp(1.25rem, 1.8vw, 2rem);
--font-size-5: clamp(1.5rem, 2.9vw, 3.25rem);
--font-size-6: clamp(2.25rem, 4.7vw, 5.3rem);
--font-size-7: clamp(3rem, 7.3vw, 8.5rem);
--font-size-8: clamp(4.5rem, 12.2vw, 13.87rem);
--font-size-9: clamp(5.5rem, 28.7vw, 22.43rem);
/** Font Sizes */
--font-size-1: 0.65em;
--font-size-2: clamp(0.65rem, 0.8vw, 0.75rem);
--font-size-3: clamp(1rem, 1.1vw, 1.25rem);
--font-size-4: clamp(1.25rem, 1.8vw, 2rem);
--font-size-5: clamp(1.5rem, 2.9vw, 3.25rem);
--font-size-6: clamp(2.25rem, 4.7vw, 5.3rem);
--font-size-7: clamp(3rem, 7.3vw, 8.5rem);
--font-size-8: clamp(4.5rem, 12.2vw, 13.87rem);
--font-size-9: clamp(5.5rem, 28.7vw, 22.43rem);
/** Font Weights */
--font-weight-thin: 100;
--font-weight-extra-light: 200;
--font-weight-light: 300;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semi-bold: 600;
--font-weight-bold: 700;
--font-weight-extra-bold: 800;
--font-weight-black: 900;
/** Font Weights */
--font-weight-thin: 100;
--font-weight-extra-light: 200;
--font-weight-light: 300;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semi-bold: 600;
--font-weight-bold: 700;
--font-weight-extra-bold: 800;
--font-weight-black: 900;
/** Line Heights */
--line-height-1: 1;
--line-height-2: 1.6;
/** Line Heights */
--line-height-1: 1;
--line-height-2: 1.6;
/** Radii */
--radius-1: 2px;
--radius-2: 5px;
--radius-4: 8px;
--radius-25: 25px;
--radius-50: 50%;
/** Radii */
--radius-1: 2px;
--radius-2: 5px;
--radius-4: 8px;
--radius-25: 25px;
--radius-50: 50%;
/** Shadows */
--shadow-subtle-shade: 0 0 50px rgba(0, 0, 0, 0.2);
--shadow-beveled-keyboard: 0 1px 0 rgba(0, 0, 0, 0.2), inset 0 0 0 2px #ffffff;
--shadow-white-outline: 0 1px 0 #ffffff;
--shadow-dark-inset: inset 0 0 5px rgba(0, 0, 0, 0.15);
/** Shadows */
--shadow-subtle-shade: 0 0 50px rgba(0, 0, 0, 0.2);
--shadow-beveled-keyboard: 0 1px 0 rgba(0, 0, 0, 0.2), inset 0 0 0 2px #ffffff;
--shadow-white-outline: 0 1px 0 #ffffff;
--shadow-dark-inset: inset 0 0 5px rgba(0, 0, 0, 0.15);
/** Space */
--space-1: 0.335rem;
--space-2: clamp(0.335rem, 0.72vw, 0.402rem);
--space-3: clamp(0.402rem, 0.86vw, 0.482rem);
--space-4: clamp(0.482rem, 1.03vw, 0.579rem);
--space-5: clamp(0.579rem, 1.24vw, 0.694rem);
--space-6: clamp(0.694rem, 1.49vw, 0.833rem);
--space-7: clamp(0.833rem, 1.78vw, 1rem);
--space-8: clamp(1rem, 2.14vw, 1.2rem);
--space-9: clamp(1.2rem, 2.57vw, 1.44rem);
--space-10: clamp(1.44rem, 3.7vw, 1.728rem);
--space-11: clamp(1.728rem, 3.7vw, 2.074rem);
--space-12: clamp(2.074rem, 4.44vw, 2.488rem);
--space-13: clamp(2.488rem, 5.32vw, 2.986rem);
--space-14: clamp(2.986rem, 6.39vw, 3.583rem);
--space-15: clamp(3.583rem, 7.67vw, 4.3rem);
--space-16: clamp(4.3rem, 9.2vw, 5.16rem);
--space-17: clamp(5.16rem, 11.04vw, 6.192rem);
--space-18: clamp(6.192rem, 13.25vw, 7.43rem);
--space-19: clamp(7.43rem, 15.9vw, 8.916rem);
--space-20: clamp(8.916rem, 19.08vw, 10.699rem);
--space-55: 5.55vw;
/** Space */
--space-1: 0.335rem;
--space-2: clamp(0.335rem, 0.72vw, 0.402rem);
--space-3: clamp(0.402rem, 0.86vw, 0.482rem);
--space-4: clamp(0.482rem, 1.03vw, 0.579rem);
--space-5: clamp(0.579rem, 1.24vw, 0.694rem);
--space-6: clamp(0.694rem, 1.49vw, 0.833rem);
--space-7: clamp(0.833rem, 1.78vw, 1rem);
--space-8: clamp(1rem, 2.14vw, 1.2rem);
--space-9: clamp(1.2rem, 2.57vw, 1.44rem);
--space-10: clamp(1.44rem, 3.7vw, 1.728rem);
--space-11: clamp(1.728rem, 3.7vw, 2.074rem);
--space-12: clamp(2.074rem, 4.44vw, 2.488rem);
--space-13: clamp(2.488rem, 5.32vw, 2.986rem);
--space-14: clamp(2.986rem, 6.39vw, 3.583rem);
--space-15: clamp(3.583rem, 7.67vw, 4.3rem);
--space-16: clamp(4.3rem, 9.2vw, 5.16rem);
--space-17: clamp(5.16rem, 11.04vw, 6.192rem);
--space-18: clamp(6.192rem, 13.25vw, 7.43rem);
--space-19: clamp(7.43rem, 15.9vw, 8.916rem);
--space-20: clamp(8.916rem, 19.08vw, 10.699rem);
--space-55: 5.55vw;
/** Transitions */
--transition-duration-1: 100ms;
--transition-duration-2: 200ms;
--transition-duration-5: 500ms;
/** Transitions */
--transition-duration-1: 100ms;
--transition-duration-2: 200ms;
--transition-duration-5: 500ms;
}

View File

@@ -1,14 +1,14 @@
/** Video */
.video-wrapper {
margin-block-end: var(--space-10);
padding-block-end: 56.25%;
position: relative;
margin-block-end: var(--space-10);
padding-block-end: 56.25%;
position: relative;
}
.video-wrapper iframe {
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
position: absolute;
width: 100%;
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
position: absolute;
width: 100%;
}

View File

@@ -1,24 +1,24 @@
.banner {
background-color: var(--color-fg-feather);
border-radius: var(--radius-2);
margin-block-end: var(--space-10);
padding: var(--space-10);
background-color: var(--color-fg-feather);
border-radius: var(--radius-2);
margin-block-end: var(--space-10);
padding: var(--space-10);
& p:last-of-type {
margin-block-end: 0;
}
& p:last-of-type {
margin-block-end: 0;
}
}
.banner summary {
cursor: pointer;
font-size: var(--font-size-3);
font-weight: var(--font-weight-black);
letter-spacing: -0.02em;
line-height: var(--line-height-1);
margin-block-start: 0;
outline: none;
cursor: pointer;
font-size: var(--font-size-3);
font-weight: var(--font-weight-black);
letter-spacing: -0.02em;
line-height: var(--line-height-1);
margin-block-start: 0;
outline: none;
}
.banner[open] summary {
margin-block-end: var(--space-8);
margin-block-end: var(--space-8);
}

View File

@@ -1,13 +1,13 @@
/** Divider */
hr,
.divider {
border-block-end-width: var(--border-width-1);
border-block-start-width: 0;
border-color: var(--color-fg-feather);
border-inline-end-width: 0;
border-inline-start-width: 0;
border-style: solid;
margin-block-end: var(--space-14);
margin-block-start: var(--space-14);
width: 100%;
border-block-end-width: var(--border-width-1);
border-block-start-width: 0;
border-color: var(--color-fg-feather);
border-inline-end-width: 0;
border-inline-start-width: 0;
border-style: solid;
margin-block-end: var(--space-14);
margin-block-start: var(--space-14);
width: 100%;
}

View File

@@ -1,17 +1,17 @@
/* Download Link */
.download-icon {
display: inline-flex;
fill: var(--color-fg);
inset-block-start: 0.2em;
margin-inline-start: 0.2em;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
display: inline-flex;
fill: var(--color-fg);
inset-block-start: 0.2em;
margin-inline-start: 0.2em;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
a:hover &,
a:active &,
a:focus & {
transform: translate3D(0, 0.25rem, 0);
}
a:hover &,
a:active &,
a:focus & {
transform: translate3D(0, 0.25rem, 0);
}
}

View File

@@ -3,19 +3,19 @@
/** Email */
.lock-box {
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: inline-flex;
height: 20px;
inset-block-start: 0.2em;
justify-content: center;
position: relative;
width: 25px;
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: inline-flex;
height: 20px;
inset-block-start: 0.2em;
justify-content: center;
position: relative;
width: 25px;
}
.lock-icon {
fill: var(--color-fg);
font-size: 1.2em;
fill: var(--color-fg);
font-size: 1.2em;
}

View File

@@ -1,17 +1,17 @@
/** More Link */
.more-icon {
display: inline-flex;
fill: var(--color-fg);
inset-block-start: 0.2em;
margin-inline-start: 0.2em;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
display: inline-flex;
fill: var(--color-fg);
inset-block-start: 0.2em;
margin-inline-start: 0.2em;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
a:hover &,
a:active &,
a:focus & {
transform: translate3D(0.25rem, 0, 0);
}
a:hover &,
a:active &,
a:focus & {
transform: translate3D(0.25rem, 0, 0);
}
}

View File

@@ -1,48 +1,48 @@
/** Pagination */
.pagination {
border-radius: 50%;
inset-block-start: calc(50% - 20px);
position: fixed;
border-radius: 50%;
inset-block-start: calc(50% - 20px);
position: fixed;
}
.pagination-start {
inset-inline-start: 1rem;
inset-inline-start: 1rem;
}
.pagination-end {
inset-inline-end: 1rem;
inset-inline-end: 1rem;
}
.pagination-container {
align-items: center;
background-color: var(--color-fg-feather);
border-radius: 50%;
border-width: 0;
cursor: pointer;
display: flex;
font-size: 16px;
height: 40px;
justify-content: center;
outline: none;
transition-duration: var(--transition-duration-5);
transition-property: opacity;
transition-timing-function: ease-in-out;
width: 40px;
align-items: center;
background-color: var(--color-fg-feather);
border-radius: 50%;
border-width: 0;
cursor: pointer;
display: flex;
font-size: 16px;
height: 40px;
justify-content: center;
outline: none;
transition-duration: var(--transition-duration-5);
transition-property: opacity;
transition-timing-function: ease-in-out;
width: 40px;
a:hover &,
a:focus & {
background-color: var(--color-fg-soft);
}
a:hover &,
a:focus & {
background-color: var(--color-fg-soft);
}
.scroll-up & {
opacity: 1;
}
.scroll-up & {
opacity: 1;
}
.scroll-down & {
opacity: 0;
}
.scroll-down & {
opacity: 0;
}
}
.pagination-icon {
fill: var(--color-fg);
fill: var(--color-fg);
}

View File

@@ -1,45 +1,45 @@
/** Cover */
.product {
box-shadow: 0 0.1em 0.5em rgba(0, 0, 0, 0.5);
box-sizing: border-box;
display: grid;
flex-grow: 1;
flex-shrink: 1;
height: auto;
justify-self: center;
max-width: 250px;
overflow: hidden;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
vertical-align: bottom;
box-shadow: 0 0.1em 0.5em rgba(0, 0, 0, 0.5);
box-sizing: border-box;
display: grid;
flex-grow: 1;
flex-shrink: 1;
height: auto;
justify-self: center;
max-width: 250px;
overflow: hidden;
position: relative;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
vertical-align: bottom;
&:hover,
&:focus {
transform: scale(1.03);
}
&:hover,
&:focus {
transform: scale(1.03);
}
&::after {
border-radius: 4em / 2em;
box-shadow: 0 0 2em rgba(0, 0, 0, 0.8);
content: '';
inset-block-end: 1em;
inset-block-start: 1em;
inset-inline-end: 50%;
inset-inline-start: 0;
opacity: 0;
position: absolute;
transition-duration: var(--transition-duration-5);
transition-property: opacity;
transition-timing-function: ease-in-out;
z-index: -1;
}
&::after {
border-radius: 4em / 2em;
box-shadow: 0 0 2em rgba(0, 0, 0, 0.8);
content: '';
inset-block-end: 1em;
inset-block-start: 1em;
inset-inline-end: 50%;
inset-inline-start: 0;
opacity: 0;
position: absolute;
transition-duration: var(--transition-duration-5);
transition-property: opacity;
transition-timing-function: ease-in-out;
z-index: -1;
}
&:hover::after,
&:focus::after {
opacity: 1;
}
&:hover::after,
&:focus::after {
opacity: 1;
}
}
/** Product Shelf
@@ -47,17 +47,17 @@
* Used to hold an unlimited amount of products
*/
.product-shelf {
background-color: var(--color-fg-feather);
display: grid;
grid-column-gap: 20px;
grid-row-gap: 20px;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
justify-content: center;
margin-block-end: var(--space-10);
margin-block-start: var(--space-10);
padding-block-end: var(--space-10);
padding-block-start: var(--space-10);
padding-inline-end: var(--space-10);
padding-inline-start: var(--space-10);
place-items: start center;
background-color: var(--color-fg-feather);
display: grid;
grid-column-gap: 20px;
grid-row-gap: 20px;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
justify-content: center;
margin-block-end: var(--space-10);
margin-block-start: var(--space-10);
padding-block-end: var(--space-10);
padding-block-start: var(--space-10);
padding-inline-end: var(--space-10);
padding-inline-start: var(--space-10);
place-items: start center;
}

View File

@@ -1,68 +1,68 @@
/** Table */
table {
border-collapse: separate;
border-spacing: 0 1em;
font-size: var(--font-size-3);
margin-block-end: var(--space-10);
margin-block-start: var(--space-10);
width: 100%;
border-collapse: separate;
border-spacing: 0 1em;
font-size: var(--font-size-3);
margin-block-end: var(--space-10);
margin-block-start: var(--space-10);
width: 100%;
& thead tr:first-child {
background: var(--color-fg-feather);
}
& thead tr:first-child {
background: var(--color-fg-feather);
}
& tbody tr:last-child {
border-width: 0;
}
& tbody tr:last-child {
border-width: 0;
}
& th {
display: block;
}
& th {
display: block;
}
& td {
display: block;
}
& td {
display: block;
}
& tr {
border-block-end: var(--border-width-1);
border-block-start-width: var(--border-width-1);
border-color: var(--color-border);
border-inline-end-width: 0;
border-inline-start-width: 0;
border-style: solid;
margin-block-end: var(--space-5);
}
& tr {
border-block-end: var(--border-width-1);
border-block-start-width: var(--border-width-1);
border-color: var(--color-border);
border-inline-end-width: 0;
border-inline-start-width: 0;
border-style: solid;
margin-block-end: var(--space-5);
}
& thead th,
& tbody td {
font-weight: var(--font-weight-normal);
text-align: left;
vertical-align: middle;
}
& thead th,
& tbody td {
font-weight: var(--font-weight-normal);
text-align: left;
vertical-align: middle;
}
& thead th {
font-weight: var(--font-weight-black);
vertical-align: bottom;
}
& thead th {
font-weight: var(--font-weight-black);
vertical-align: bottom;
}
& caption + thead tr:first-child th,
& caption + thead tr:first-child td,
& colgroup + thead tr:first-child th,
& colgroup + thead tr:first-child td,
& thead:first-child tr:first-child th,
& thead:first-child tr:first-child td {
border-block-start: 0;
}
& caption + thead tr:first-child th,
& caption + thead tr:first-child td,
& colgroup + thead tr:first-child th,
& colgroup + thead tr:first-child td,
& thead:first-child tr:first-child th,
& thead:first-child tr:first-child td {
border-block-start: 0;
}
@media (--tablet) {
border-collapse: collapse;
border-spacing: 0;
@media (--tablet) {
border-collapse: collapse;
border-spacing: 0;
& th,
& td {
display: table-cell;
padding: var(--space-3);
vertical-align: top;
}
}
& th,
& td {
display: table-cell;
padding: var(--space-3);
vertical-align: top;
}
}
}

View File

@@ -3,179 +3,179 @@
/** Heartbeat animation */
@keyframes heartbeat {
0% {
transform: scale(1.2);
}
25% {
transform: scale(1.1);
}
50% {
transform: scale(1.6);
}
75% {
transform: scale(1.2);
}
100% {
transform: scale(1.2);
}
0% {
transform: scale(1.2);
}
25% {
transform: scale(1.1);
}
50% {
transform: scale(1.6);
}
75% {
transform: scale(1.2);
}
100% {
transform: scale(1.2);
}
}
/** Colphon */
.colophon-intro {
grid-column: 2 / -2;
grid-row: 1;
grid-column: 2 / -2;
grid-row: 1;
}
@media (--tablet) {
.colophon-intro {
grid-column: 6 / -6;
}
.colophon-intro {
grid-column: 6 / -6;
}
}
.colophon-meaning {
grid-column: 2 / -2;
grid-row: 2;
grid-column: 2 / -2;
grid-row: 2;
}
@media (--tablet) {
.colophon-meaning {
grid-column: 3 / -9;
}
.colophon-meaning {
grid-column: 3 / -9;
}
}
.colophon-why {
grid-column: 2 / -2;
grid-row: 3;
grid-column: 2 / -2;
grid-row: 3;
}
@media (--tablet) {
.colophon-why {
grid-column: 7 / -5;
}
.colophon-why {
grid-column: 7 / -5;
}
}
.colophon-contact {
grid-column: 2 / -2;
grid-row: 4;
grid-column: 2 / -2;
grid-row: 4;
}
@media (--tablet) {
.colophon-contact {
grid-column: 5 / -9;
}
.colophon-contact {
grid-column: 5 / -9;
}
}
.colophon-faq {
grid-column: 2 / -2;
grid-row: 5;
grid-column: 2 / -2;
grid-row: 5;
}
@media (--tablet) {
.colophon-faq {
grid-column: 3 / -3;
}
.colophon-faq {
grid-column: 3 / -3;
}
}
.colophone-faq-list {
column-count: 1;
column-gap: 3rem;
list-style: none;
margin: 0;
padding: 0;
column-count: 1;
column-gap: 3rem;
list-style: none;
margin: 0;
padding: 0;
}
@media (--tablet) {
.colophone-faq-list {
column-count: 2;
}
.colophone-faq-list {
column-count: 2;
}
}
.colophon-faq-list-item {
break-inside: avoid;
margin-block-end: var(--space-10);
padding-block-start: var(--space-1);
break-inside: avoid;
margin-block-end: var(--space-10);
padding-block-start: var(--space-1);
}
.colophon-faq-list-item:last-of-type {
margin-block-end: 0;
margin-block-end: 0;
}
.colophon-donation {
grid-column: 2 / -2;
grid-row: 6;
grid-column: 2 / -2;
grid-row: 6;
}
@media (--tablet) {
.colophon-donation {
grid-column: 8 / -4;
}
.colophon-donation {
grid-column: 8 / -4;
}
}
@media screen and (prefers-reduced-motion: reduce) {
.colophon-donation-heart {
animation: none;
color: var(--color-accent-secondary);
display: inline-block;
font-size: var(--font-size-5);
text-shadow: var(--shadow-subtle-shade);
}
.colophon-donation-heart {
animation: none;
color: var(--color-accent-secondary);
display: inline-block;
font-size: var(--font-size-5);
text-shadow: var(--shadow-subtle-shade);
}
}
.colophon-donation-heart {
animation: heartbeat 1.5s ease-out 0s infinite normal;
color: var(--color-accent-secondary);
display: inline-block;
font-size: var(--font-size-5);
text-shadow: var(--shadow-subtle-shade);
animation: heartbeat 1.5s ease-out 0s infinite normal;
color: var(--color-accent-secondary);
display: inline-block;
font-size: var(--font-size-5);
text-shadow: var(--shadow-subtle-shade);
}
.colophon-dontation-crypto-hash {
font-family: var(--font-family-mono);
font-size: clamp(0.8rem, 0.8vw, 1rem);
margin: 0;
white-space: normal;
font-family: var(--font-family-mono);
font-size: clamp(0.8rem, 0.8vw, 1rem);
margin: 0;
white-space: normal;
}
.colophon-donation-list {
column-gap: 3rem;
column-width: 22rem;
margin-block-start: var(--space-10);
padding-inline-start: 0;
column-gap: 3rem;
column-width: 22rem;
margin-block-start: var(--space-10);
padding-inline-start: 0;
}
.colophon-donation-list-item {
align-items: center;
break-inside: avoid;
display: flex;
font-variant-ligatures: none;
margin-block-end: var(--space-1);
align-items: center;
break-inside: avoid;
display: flex;
font-variant-ligatures: none;
margin-block-end: var(--space-1);
}
.colophon-dontation-button {
align-items: center;
background: transparent;
border: 0;
color: var(--color-fg);
cursor: pointer;
display: inline-flex;
margin: 0;
padding: 0;
align-items: center;
background: transparent;
border: 0;
color: var(--color-fg);
cursor: pointer;
display: inline-flex;
margin: 0;
padding: 0;
}
.colophon-donation-icon {
flex-shrink: 0;
font-size: 20px;
height: 20px;
margin-inline-end: var(--space-1);
width: 20px;
flex-shrink: 0;
font-size: 20px;
height: 20px;
margin-inline-end: var(--space-1);
width: 20px;
}
.colophon-tech {
grid-column: 2 / -2;
grid-row: 7;
grid-column: 2 / -2;
grid-row: 7;
}
@media (--tablet) {
.colophon-tech {
grid-column: 5 / -7;
}
.colophon-tech {
grid-column: 5 / -7;
}
}

View File

@@ -3,95 +3,95 @@
/** Downloads */
.downloads-intro {
grid-column: 2 / -2;
grid-row: 1;
grid-column: 2 / -2;
grid-row: 1;
}
@media (--tablet) {
.downloads-intro {
grid-column: 6 / -6;
}
.downloads-intro {
grid-column: 6 / -6;
}
}
.downloads-items {
grid-column: 2 / -2;
grid-row: 2;
grid-column: 2 / -2;
grid-row: 2;
}
@define-placeholder downloads-layout-50 {
border-radius: 0;
column-gap: var(--space-55);
display: grid;
grid-column: 2 / -2;
grid-template-columns: repeat(2, 1fr);
row-gap: calc(var(--space-55) / 2);
border-radius: 0;
column-gap: var(--space-55);
display: grid;
grid-column: 2 / -2;
grid-template-columns: repeat(2, 1fr);
row-gap: calc(var(--space-55) / 2);
}
.downloads-container {
display: grid;
grid-column: 1 / -1;
grid-template-columns: repeat(18, 1fr);
display: grid;
grid-column: 1 / -1;
grid-template-columns: repeat(18, 1fr);
}
.downloads-layout {
align-items: center;
margin: 0;
align-items: center;
margin: 0;
}
.downloads-50-start {
@extend downloads-layout-50;
@extend downloads-layout-50;
& .downloads-image-container {
grid-column: 1 / -1;
grid-row: 1;
}
& .downloads-image-container {
grid-column: 1 / -1;
grid-row: 1;
}
& figcaption {
grid-column: 1 / -1;
grid-row: 2;
text-align: start;
}
& figcaption {
grid-column: 1 / -1;
grid-row: 2;
text-align: start;
}
}
@media (--tablet) {
.downloads-50-start {
& .downloads-image-container {
grid-column: 1;
grid-row: 1;
}
.downloads-50-start {
& .downloads-image-container {
grid-column: 1;
grid-row: 1;
}
& figcaption {
grid-column: 2;
grid-row: 1;
}
}
& figcaption {
grid-column: 2;
grid-row: 1;
}
}
}
.downloads-50-end {
@extend downloads-layout-50;
@extend downloads-layout-50;
& .downloads-image-container {
grid-column: 1 / -1;
grid-row: 1;
}
& .downloads-image-container {
grid-column: 1 / -1;
grid-row: 1;
}
& figcaption {
grid-column: 1 / -1;
grid-row: 2;
text-align: start;
}
& figcaption {
grid-column: 1 / -1;
grid-row: 2;
text-align: start;
}
}
@media (--tablet) {
.downloads-50-end {
& .downloads-image-container {
grid-column: 2;
grid-row: 1;
}
.downloads-50-end {
& .downloads-image-container {
grid-column: 2;
grid-row: 1;
}
& figcaption {
grid-column: 1;
grid-row: 1;
}
}
& figcaption {
grid-column: 1;
grid-row: 1;
}
}
}

View File

@@ -3,36 +3,36 @@
/** Error 404 Page */
@keyframes ninja {
0% {
transform: rotate(0deg) translateX(0);
}
50% {
transform: rotate(360deg) translateX(-100px);
}
100% {
transform: rotate(0deg) translateX(0);
}
0% {
transform: rotate(0deg) translateX(0);
}
50% {
transform: rotate(360deg) translateX(-100px);
}
100% {
transform: rotate(0deg) translateX(0);
}
}
.sewer {
align-items: center;
display: flex;
justify-content: center;
margin-block-start: var(--space-10);
align-items: center;
display: flex;
justify-content: center;
margin-block-start: var(--space-10);
}
@media screen and (prefers-reduced-motion: reduce) {
.ninja-turtles {
animation: none;
position: relative;
width: clamp(200px, 30vw, 667px);
z-index: 1;
}
.ninja-turtles {
animation: none;
position: relative;
width: clamp(200px, 30vw, 667px);
z-index: 1;
}
}
.ninja-turtles {
animation: ninja 60s linear 0s infinite normal;
position: relative;
width: clamp(200px, 30vw, 667px);
z-index: 1;
animation: ninja 60s linear 0s infinite normal;
position: relative;
width: clamp(200px, 30vw, 667px);
z-index: 1;
}

View File

@@ -3,83 +3,83 @@
/** Glossary */
.glossary-intro {
grid-column: 2 / -2;
grid-row: 1;
grid-column: 2 / -2;
grid-row: 1;
}
@media (--tablet) {
.glossary-intro {
grid-column: 6 / -6;
}
.glossary-intro {
grid-column: 6 / -6;
}
}
.glossary-list {
grid-column: 2 / -2;
grid-row: 2;
grid-column: 2 / -2;
grid-row: 2;
}
@media (--tablet) {
.glossary-list {
grid-column: 5 / -5;
}
.glossary-list {
grid-column: 5 / -5;
}
}
.glossary-list-item {
display: flex;
flex-direction: column;
flex-wrap: wrap;
margin-block-end: var(--space-10);
padding-block-end: var(--space-10);
padding-inline-start: 0;
width: 100%;
display: flex;
flex-direction: column;
flex-wrap: wrap;
margin-block-end: var(--space-10);
padding-block-end: var(--space-10);
padding-inline-start: 0;
width: 100%;
}
@media (width >= 450px) {
.glossary-list-item {
flex-direction: row;
}
.glossary-list-item {
flex-direction: row;
}
}
.glossary-list-item-romanji {
flex-grow: 1;
font-feature-settings: 'liga', 'dlig';
font-size: var(--font-size-4);
font-weight: var(--font-weight-black);
hyphens: manual;
letter-spacing: -0.02em;
line-height: var(--line-height-1);
padding-block-end: var(--space-2);
padding-inline-end: var(--space-10);
flex-grow: 1;
font-feature-settings: 'liga', 'dlig';
font-size: var(--font-size-4);
font-weight: var(--font-weight-black);
hyphens: manual;
letter-spacing: -0.02em;
line-height: var(--line-height-1);
padding-block-end: var(--space-2);
padding-inline-end: var(--space-10);
}
@media (width >= 450px) {
.glossary-list-item-romanji {
margin-block-end: 0 !important;
}
.glossary-list-item-romanji {
margin-block-end: 0 !important;
}
}
.glossary-list-item-japanese {
flex-grow: 1;
font-family: 'Hiragino Kaku Gothic ProN', sans-serif;
font-size: var(--font-size-4);
font-weight: var(--font-weight-thin);
letter-spacing: -0.02em;
line-height: var(--line-height-1);
padding-block-end: var(--space-2);
flex-grow: 1;
font-family: 'Hiragino Kaku Gothic ProN', sans-serif;
font-size: var(--font-size-4);
font-weight: var(--font-weight-thin);
letter-spacing: -0.02em;
line-height: var(--line-height-1);
padding-block-end: var(--space-2);
}
@media (width >= 450px) {
.glossary-list-item-japanese {
text-align: end;
}
.glossary-list-item-japanese {
text-align: end;
}
}
.glossary-list-item-translation {
color: var(--color-accent-primary);
margin-block-end: var(--space-2);
width: 100%;
color: var(--color-accent-primary);
margin-block-end: var(--space-2);
width: 100%;
}
.glossary-list-item-description {
width: 100%;
width: 100%;
}

View File

@@ -3,95 +3,95 @@
/** Homepage Intro */
.homepage-intro {
grid-column: 2 / -2;
grid-row: 1;
grid-column: 2 / -2;
grid-row: 1;
}
@media (--tablet) {
.homepage-intro {
grid-column: 6 / -6;
}
.homepage-intro {
grid-column: 6 / -6;
}
}
.homepage-title {
font-family: Sword Kanji, Hiragino Kaku Gothic Std, sans-serif;
font-size: var(--font-size-8);
margin-block-end: var(--space-10);
position: relative;
font-family: Sword Kanji, Hiragino Kaku Gothic Std, sans-serif;
font-size: var(--font-size-8);
margin-block-end: var(--space-10);
position: relative;
}
/** Homepage TOC */
.homepage-toc {
grid-column: 2 / -2;
grid-row: 2;
grid-column: 2 / -2;
grid-row: 2;
}
@media (--desktop) {
.homepage-toc {
grid-column: 3 / -3;
}
.homepage-toc {
grid-column: 3 / -3;
}
}
.homepage-toc-title {
padding-inline-start: 2.5rem;
padding-inline-start: 2.5rem;
}
.homepage-toc-intro {
list-style: none;
padding-inline-start: 2.5rem;
list-style: none;
padding-inline-start: 2.5rem;
}
.homepage-toc-content {
column-gap: 3rem;
column-width: 18rem;
counter-reset: section;
list-style: none;
padding-inline-start: 2.5rem;
position: relative;
column-gap: 3rem;
column-width: 18rem;
counter-reset: section;
list-style: none;
padding-inline-start: 2.5rem;
position: relative;
}
.homepage-toc-content ol {
counter-reset: section;
list-style: none;
margin: 0;
padding-block-end: var(--space-5);
padding-block-start: var(--space-5);
padding-inline-start: 0;
counter-reset: section;
list-style: none;
margin: 0;
padding-block-end: var(--space-5);
padding-block-start: var(--space-5);
padding-inline-start: 0;
}
.homepage-toc-content > li {
font-size: var(--font-size-4);
font-weight: var(--font-weight-black);
line-height: 1;
font-size: var(--font-size-4);
font-weight: var(--font-weight-black);
line-height: 1;
}
.homepage-toc-content ol > li {
font-weight: var(--font-weight-thin);
line-height: 1.6;
position: relative;
font-weight: var(--font-weight-thin);
line-height: 1.6;
position: relative;
}
/** Safari Bug: Multicolumn hides numbers */
.homepage-toc-content li::before {
color: var(--color-fg-soft);
content: counters(section, '.') ' ';
counter-increment: section;
font-weight: lighter;
inset-inline-start: -2.5rem;
position: absolute;
text-align: end;
/** Null transform hack to fix Safari bug
color: var(--color-fg-soft);
content: counters(section, '.') ' ';
counter-increment: section;
font-weight: lighter;
inset-inline-start: -2.5rem;
position: absolute;
text-align: end;
/** Null transform hack to fix Safari bug
* https://stackoverflow.com/a/60849697/331361 **/
transform: translate3d(0, 0, 0);
width: 2rem;
transform: translate3d(0, 0, 0);
width: 2rem;
}
.homepage-toc-content .homepage-toc-chapter::before {
color: var(--color-accent-primary);
color: var(--color-accent-primary);
}
.homepage-toc-chapter {
break-inside: avoid;
margin-block-end: var(--space-10);
position: relative;
break-inside: avoid;
margin-block-end: var(--space-10);
position: relative;
}

View File

@@ -3,34 +3,34 @@
/** Recommendations */
.recommendations-intro {
grid-column: 2 / -2;
grid-row: 1;
grid-column: 2 / -2;
grid-row: 1;
}
@media (--tablet) {
.recommendations-intro {
grid-column: 6 / -6;
}
.recommendations-intro {
grid-column: 6 / -6;
}
}
.recommendations-books {
grid-column: 2 / -2;
grid-row: 2;
grid-column: 2 / -2;
grid-row: 2;
}
.recommendations-movies {
grid-column: 2 / -2;
grid-row: 3;
grid-column: 2 / -2;
grid-row: 3;
}
.recommendations-container {
display: grid;
grid-column-gap: var(--space-5);
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
display: grid;
grid-column-gap: var(--space-5);
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
}
.recommendations-product-title {
font-size: var(--font-size-2);
margin-block-start: 0;
padding-block-start: var(--space-2);
font-size: var(--font-size-2);
margin-block-start: 0;
padding-block-start: var(--space-2);
}

View File

@@ -1,45 +1,45 @@
/** Base */
.page-content {
display: flex;
flex-grow: 1;
margin-block-start: 15vw;
display: flex;
flex-grow: 1;
margin-block-start: 15vw;
}
.rowgap {
row-gap: clamp(1.5rem, var(--space-55), 6rem);
row-gap: clamp(1.5rem, var(--space-55), 6rem);
}
/** Fullsize */
.layout-fullsize {
display: grid;
grid-column: 1 / -1;
grid-template-columns: var(--grid-fullsize);
width: 100%;
display: grid;
grid-column: 1 / -1;
grid-template-columns: var(--grid-fullsize);
width: 100%;
}
.layout-fullsize-section {
width: 100%;
width: 100%;
}
/** Narrow */
.layout-narrow {
display: grid;
grid-template-columns: var(--grid-fullsize);
width: 100%;
display: grid;
grid-template-columns: var(--grid-fullsize);
width: 100%;
& .wrapper {
grid-column: 2 / -2;
}
& .wrapper {
grid-column: 2 / -2;
}
}
@media (--tablet) {
.layout-narrow .wrapper {
grid-column: 5 / -5;
}
.layout-narrow .wrapper {
grid-column: 5 / -5;
}
}
@media (--desktop) {
.layout-narrow .wrapper {
grid-column: 6 / -6;
}
.layout-narrow .wrapper {
grid-column: 6 / -6;
}
}

View File

@@ -1,42 +1,42 @@
/** Home Link */
.home-link {
align-self: center;
grid-column: 1;
justify-self: center;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
align-self: center;
grid-column: 1;
justify-self: center;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
&:hover,
&:focus {
transform: scale(1.25);
}
&:hover,
&:focus {
transform: scale(1.25);
}
}
.home-link-button {
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: flex;
font-size: 0;
height: 40px;
justify-content: center;
width: 40px;
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: flex;
font-size: 0;
height: 40px;
justify-content: center;
width: 40px;
}
.home-link-spacer {
align-self: center;
grid-column: 1;
height: 40px;
justify-self: center;
margin-inline-end: 15px;
width: 40px;
align-self: center;
grid-column: 1;
height: 40px;
justify-self: center;
margin-inline-end: 15px;
width: 40px;
}
.home-link-icon {
fill: var(--color-fg);
font-size: 20px;
height: 20px;
width: 20px;
fill: var(--color-fg);
font-size: 20px;
height: 20px;
width: 20px;
}

View File

@@ -1,39 +1,39 @@
/** Language Switcher */
.language-switcher {
align-items: center;
display: flex;
position: relative;
text-transform: uppercase;
align-items: center;
display: flex;
position: relative;
text-transform: uppercase;
}
.language-switcher-list {
align-items: center;
display: flex;
font-size: 12px;
list-style: none;
margin: 0;
padding: 0;
align-items: center;
display: flex;
font-size: 12px;
list-style: none;
margin: 0;
padding: 0;
}
.language-switcher-list-item {
margin-block-end: 0;
margin-inline-end: 0.25em;
margin-block-end: 0;
margin-inline-end: 0.25em;
}
.language-switcher-link {
color: var(--color-fg);
font-weight: var(--font-weight-normal);
text-decoration: none;
color: var(--color-fg);
font-weight: var(--font-weight-normal);
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
text-decoration-color: var(--color-accent-primary);
text-decoration-thickness: 0.15em;
text-underline-offset: 0.1em;
}
&:hover,
&:focus {
text-decoration: underline;
text-decoration-color: var(--color-accent-primary);
text-decoration-thickness: 0.15em;
text-underline-offset: 0.1em;
}
&.is-active {
font-weight: var(--font-weight-semi-bold);
}
&.is-active {
font-weight: var(--font-weight-semi-bold);
}
}

View File

@@ -1,53 +1,53 @@
/** Legal Links */
.legal {
align-items: center;
display: flex;
font-size: 12px;
grid-column: 1 / -3;
padding-inline-start: clamp(15px, 2.4vw, 50px);
align-items: center;
display: flex;
font-size: 12px;
grid-column: 1 / -3;
padding-inline-start: clamp(15px, 2.4vw, 50px);
}
.legal-copyright {
font-size: 14px;
inset-block-start: 1px;
margin-inline-end: 0.25em;
position: relative;
font-size: 14px;
inset-block-start: 1px;
margin-inline-end: 0.25em;
position: relative;
}
.legal-author {
letter-spacing: 0.05em;
text-transform: uppercase;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.legal-author-link {
color: var(--color-fg);
text-decoration: none;
color: var(--color-fg);
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
text-decoration-color: var(--color-accent-primary);
text-decoration-thickness: 0.15em;
text-underline-offset: 0.1em;
}
&:hover,
&:focus {
text-decoration: underline;
text-decoration-color: var(--color-accent-primary);
text-decoration-thickness: 0.15em;
text-underline-offset: 0.1em;
}
}
.legal-bullet {
margin-inline-end: 0.25em;
margin-inline-start: 0.25em;
margin-inline-end: 0.25em;
margin-inline-start: 0.25em;
}
/** Hidden Ninja */
.hidden-ninja {
cursor: none;
opacity: 0;
transition-delay: 100ms;
transition-duration: 200ms;
transition-property: opacity;
transition-timing-function: ease-in;
cursor: none;
opacity: 0;
transition-delay: 100ms;
transition-duration: 200ms;
transition-property: opacity;
transition-timing-function: ease-in;
&:hover,
&:focus {
opacity: 1;
}
&:hover,
&:focus {
opacity: 1;
}
}

View File

@@ -1,7 +1,7 @@
/** Page Footer */
.page-footer {
display: grid;
grid-template-columns: var(--grid-fullsize);
grid-template-rows: clamp(3rem, var(--space-55), 9rem);
margin-block-start: clamp(1.5rem, var(--space-55), 4.5rem);
display: grid;
grid-template-columns: var(--grid-fullsize);
grid-template-rows: clamp(3rem, var(--space-55), 9rem);
margin-block-start: clamp(1.5rem, var(--space-55), 4.5rem);
}

View File

@@ -1,7 +1,7 @@
/** Page Header */
.page-header {
display: grid;
grid-template-columns: var(--grid-fullsize);
grid-template-rows: clamp(3rem, var(--space-55), 9rem);
margin-block-end: clamp(1.5rem, var(--space-55), 4.5rem);
display: grid;
grid-template-columns: var(--grid-fullsize);
grid-template-rows: clamp(3rem, var(--space-55), 9rem);
margin-block-end: clamp(1.5rem, var(--space-55), 4.5rem);
}

View File

@@ -1,35 +1,35 @@
/** Theme Toggle */
.no-js .theme-toggle {
display: none;
display: none;
}
.theme-toggle {
align-items: center;
align-self: center;
background: transparent;
border: 0;
cursor: pointer;
display: flex;
font-size: 0;
grid-column: -2;
height: 40px;
justify-content: center;
justify-self: center;
outline: 0;
width: 40px;
align-items: center;
align-self: center;
background: transparent;
border: 0;
cursor: pointer;
display: flex;
font-size: 0;
grid-column: -2;
height: 40px;
justify-content: center;
justify-self: center;
outline: 0;
width: 40px;
}
.theme-toggle-icon {
fill: var(--color-fg);
font-size: 12px;
height: 12px;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
width: 12px;
fill: var(--color-fg);
font-size: 12px;
height: 12px;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
width: 12px;
.theme-toggle:hover &,
.theme-toggle:focus & {
transform: scale(1.25);
}
.theme-toggle:hover &,
.theme-toggle:focus & {
transform: scale(1.25);
}
}

View File

@@ -1,33 +1,33 @@
/** Up Link */
.up-link {
align-self: center;
grid-column: -2;
justify-self: center;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
align-self: center;
grid-column: -2;
justify-self: center;
transition-duration: var(--transition-duration-5);
transition-property: transform;
transition-timing-function: ease-in-out;
&:hover,
&:focus {
transform: translate3D(0, -0.25rem, 0);
}
&:hover,
&:focus {
transform: translate3D(0, -0.25rem, 0);
}
}
.up-link-button {
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: flex;
font-size: 0;
height: 40px;
justify-content: center;
width: 40px;
align-items: center;
background: transparent;
border: 0;
cursor: pointer;
display: flex;
font-size: 0;
height: 40px;
justify-content: center;
width: 40px;
}
.up-link-icon {
fill: var(--color-fg);
font-size: 20px;
height: 20px;
width: 20px;
fill: var(--color-fg);
font-size: 20px;
height: 20px;
width: 20px;
}

View File

@@ -1,20 +1,20 @@
@page {
margin: 1cm 0cm;
margin: 1cm 0cm;
}
/* Show all content immediatly */
[data-sal|='fade'] {
opacity: 1;
opacity: 1;
}
[data-sal|='slide'],
[data-sal|='zoom'] {
opacity: 1;
transform: none;
opacity: 1;
transform: none;
}
[data-sal|='flip'] {
transform: none;
transform: none;
}
/* Hide content from printing */
@@ -23,36 +23,36 @@
.theme-toggle,
.pagination,
.home-link {
display: none;
display: none;
}
/* Images */
img {
border: 0;
max-width: 1200px;
border: 0;
max-width: 1200px;
}
/* Links */
a {
color: #000000;
word-wrap: break-word;
color: #000000;
word-wrap: break-word;
}
a::after {
content: ' (https://www.kogakure.de' attr(href) ')';
font-size: 80%;
content: ' (https://www.kogakure.de' attr(href) ')';
font-size: 80%;
}
a[href^='mailto:']::after {
content: ' (' attr(href) ')';
content: ' (' attr(href) ')';
}
a[href^='http://']::after,
a[href^='https://']::after
{
content: ' (' attr(href) ')';
content: ' (' attr(href) ')';
}
a[href^='#']::after {
display: none;
display: none;
}

View File

@@ -2,10 +2,10 @@ const de = require('./translations/de');
const en = require('./translations/en');
module.exports = {
de: {
...de,
},
en: {
...en,
},
de: {
...de,
},
en: {
...en,
},
};

View File

@@ -4,29 +4,29 @@ const duration = 800;
const easing = 'ease-out-sine';
module.exports = {
animation: `data-sal=${animation} data-sal-duration=${duration} data-sal-easing=${easing}`,
animationDelay: `data-sal=${animation} data-sal-duration=${duration} data-sal-delay=${delay} data-sal-easing=${easing}`,
author: 'Stefan Imhoff',
bitcoin: 'bc1quzvqw66khsnrmqh0ds8dprnrtcxfytfa3x2x7m',
buildTime: new Date(),
description: {
de: 'Ninja, Ninjutsu & Kampfkunst',
en: 'Ninja, Ninjutsu & Martial Arts',
},
ethereum: '0x9e177CA8eD880991cb976aFbcC409c5c15Fa0080',
faviconPath: '/assets/images/branding/favicons/',
isProduction: process.env.ELEVENTY_ENV === 'production',
languages: [
{
title: 'DE',
language: 'de',
},
{
title: 'EN',
language: 'en',
},
],
title: '木隠',
twitter: '@kogakure',
url: 'https://www.kogakure.de',
animation: `data-sal=${animation} data-sal-duration=${duration} data-sal-easing=${easing}`,
animationDelay: `data-sal=${animation} data-sal-duration=${duration} data-sal-delay=${delay} data-sal-easing=${easing}`,
author: 'Stefan Imhoff',
bitcoin: 'bc1quzvqw66khsnrmqh0ds8dprnrtcxfytfa3x2x7m',
buildTime: new Date(),
description: {
de: 'Ninja, Ninjutsu & Kampfkunst',
en: 'Ninja, Ninjutsu & Martial Arts',
},
ethereum: '0x9e177CA8eD880991cb976aFbcC409c5c15Fa0080',
faviconPath: '/assets/images/branding/favicons/',
isProduction: process.env.ELEVENTY_ENV === 'production',
languages: [
{
title: 'DE',
language: 'de',
},
{
title: 'EN',
language: 'en',
},
],
title: '木隠',
twitter: '@kogakure',
url: 'https://www.kogakure.de',
};

View File

@@ -1,245 +1,245 @@
[
{
"title": "Gyokko Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/gyokko-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70152"
},
{
"title": "Kukishinden Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/kukishinden-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70153"
},
{
"title": "Togakure Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/togakure-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70155"
},
{
"title": "Kotô Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/koto-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70162"
},
{
"title": "Shinden Fudô Ryû Daken taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/shinden-fudo-ryu-dakentaijutsu-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70166"
},
{
"title": "Shinden-Fudo Ryû Jûtaijutsu no kata: Bujinkan Budô densho",
"cover": "/assets/images/recommendations/books/shinden-fudo-ryu-jutaijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70170"
},
{
"title": "Takagi-Yôshin-Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/takagi-yoshin-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70173"
},
{
"title": "Ten Ryaku no Maki: Strategien des Himmels",
"cover": "/assets/images/recommendations/books/ten-ryaku-no-maki-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70178"
},
{
"title": "Chi Ryaku no Maki: Strategien der Erde",
"cover": "/assets/images/recommendations/books/chi-ryaku-no-maki-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70179"
},
{
"title": "Jin Ryaku no Maki: Strategien des Menschen",
"cover": "/assets/images/recommendations/books/jin-ryaku-no-maki-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70184"
},
{
"title": "The Way of the Ninja: Secret Techniques",
"asin": "4770028059"
},
{
"title": "Art of Japanese Sword Fighting: Secrets of the Samurai",
"asin": "4770021984"
},
{
"title": "Advanced Stick Fighting",
"asin": "4770029969"
},
{
"title": "Unarmed Fighting Techniques of the Samurai",
"asin": "4770030592"
},
{
"title": "Secrets from the Ninja Grandmaster",
"asin": "1581603754"
},
{
"title": "Essence of Ninjutsu: The Nine Traditions",
"asin": "0809247240"
},
{
"title": "The Grandmaster's Book of Ninja Training",
"asin": "0809246295"
},
{
"title": "Ninjutsu. History and Tradition",
"asin": "0865680272"
},
{
"title": "Understand? Good Play!",
"asin": "0971084955"
},
{
"title": "Stick Fighting: Techniques of Self-Defense",
"asin": "0870114751"
},
{
"title": "Hanbo-Jutsu: Kukishin Ryu",
"asin": "3924862052"
},
{
"title": "Ninja: The Invisible Assassins",
"asin": "089750030X"
},
{
"title": "Ninja 1: Spirit of the Shadow Warrior ",
"asin": "0897500733"
},
{
"title": "Ninja 2: Warrior Ways of Enlightenment",
"asin": "0897500776"
},
{
"title": "Ninja 3: Warrior Path of Togakure",
"asin": "0897500903"
},
{
"title": "Ninja 4: Legacy of the Night Warrior",
"asin": "0897501020"
},
{
"title": "Ninja 5: Lore of the Shinobi Warrior",
"asin": "0897501233"
},
{
"title": "Ninja 6: Secret Scrolls of the Warrior Sage",
"asin": "089750156X"
},
{
"title": "The Book of Ninja: The Bansenshukai",
"asin": "1780284934"
},
{
"title": "True Path of the Ninja",
"asin": "4805311142"
},
{
"title": "The Ninpiden - True Ninja Traditions",
"asin": "1604818301"
},
{
"title": "The Secret Traditions of the Shinobi",
"asin": "1583944354"
},
{
"title": "Kokoro no Katachi: Das Wesen des Kokoro",
"asin": "3940404071"
},
{
"title": "The Art of Life and Death: Lessons in Budo from a Ninja Master",
"asin": "080484304X"
},
{
"title": "The Ninja and Their Secret Fighting Art",
"asin": "0804816565"
},
{
"title": "The Mystic Arts Of The Ninja",
"asin": "0809253437"
},
{
"title": "Ninja",
"asin": "3613305879"
},
{
"title": "Ninja und Japanische Kampfmönche",
"asin": "3877486312"
},
{
"title": "Die Kunst des Krieges",
"asin": "3937872876"
},
{
"title": "Das Buch der fünf Ringe",
"asin": "3933321646"
},
{
"title": "Hagakure",
"asin": "3868201211"
},
{
"title": "Der Weg des Samurai: Anleitung zum strategischen Handeln",
"asin": "3492236316"
},
{
"title": "Bushidô: Die sieben Tugenden des Samurai",
"asin": "3492046622"
},
{
"title": "Samurai und Kriegskunst",
"cover": "/assets/images/recommendations/books/samurai-und-kriegskunst.jpg",
"asin": "3924862311"
},
{
"title": "Engaging Japanese Philosophy",
"asin": "0824874072"
},
{
"title": "Japanische Schwertschmiedekunst",
"asin": "3931425010"
},
{
"title": "Waffen und Schwertzierate Japans",
"cover": "/assets/images/recommendations/books/waffen-und-schwertzierate-japans.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70050"
},
{
"title": "Japanisches Wappenbuch - Nihon moncho",
"cover": "/assets/images/recommendations/books/japanisches-wappenbuch.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70040"
},
{
"title": "Yamato",
"cover": "/assets/images/recommendations/books/yamato.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70132"
},
{
"title": "Meifu Shinkage Ryû: Fundô kusarijutsu - Shurikenjutsu",
"cover": "/assets/images/recommendations/books/meifu-shinkage-ryu-de.jpg",
"asin": "3924862249"
},
{
"title": "Takamatsu Toshitsugu: Die Biographie einer Kampfkunstlegende",
"asin": "3924862117"
},
{
"title": "Ninja Attack!",
"asin": "477003119X"
},
{
"title": "Bruce Lee: The Art of Expressing the Human Body",
"asin": "0804831297"
},
{
"title": "Tao Te King",
"asin": "3866474652"
},
{
"title": "Der Lauf des Wassers",
"asin": "3458346392"
},
{
"title": "In der Mitte des Kreises",
"asin": "3458344594"
},
{
"title": "Die Shaolin-Mönche",
"asin": "3862280322"
}
{
"title": "Gyokko Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/gyokko-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70152"
},
{
"title": "Kukishinden Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/kukishinden-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70153"
},
{
"title": "Togakure Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/togakure-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70155"
},
{
"title": "Kotô Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/koto-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70162"
},
{
"title": "Shinden Fudô Ryû Daken taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/shinden-fudo-ryu-dakentaijutsu-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70166"
},
{
"title": "Shinden-Fudo Ryû Jûtaijutsu no kata: Bujinkan Budô densho",
"cover": "/assets/images/recommendations/books/shinden-fudo-ryu-jutaijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70170"
},
{
"title": "Takagi-Yôshin-Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/takagi-yoshin-ryu-taijutsu-no-kata-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70173"
},
{
"title": "Ten Ryaku no Maki: Strategien des Himmels",
"cover": "/assets/images/recommendations/books/ten-ryaku-no-maki-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70178"
},
{
"title": "Chi Ryaku no Maki: Strategien der Erde",
"cover": "/assets/images/recommendations/books/chi-ryaku-no-maki-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70179"
},
{
"title": "Jin Ryaku no Maki: Strategien des Menschen",
"cover": "/assets/images/recommendations/books/jin-ryaku-no-maki-de.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70184"
},
{
"title": "The Way of the Ninja: Secret Techniques",
"asin": "4770028059"
},
{
"title": "Art of Japanese Sword Fighting: Secrets of the Samurai",
"asin": "4770021984"
},
{
"title": "Advanced Stick Fighting",
"asin": "4770029969"
},
{
"title": "Unarmed Fighting Techniques of the Samurai",
"asin": "4770030592"
},
{
"title": "Secrets from the Ninja Grandmaster",
"asin": "1581603754"
},
{
"title": "Essence of Ninjutsu: The Nine Traditions",
"asin": "0809247240"
},
{
"title": "The Grandmaster's Book of Ninja Training",
"asin": "0809246295"
},
{
"title": "Ninjutsu. History and Tradition",
"asin": "0865680272"
},
{
"title": "Understand? Good Play!",
"asin": "0971084955"
},
{
"title": "Stick Fighting: Techniques of Self-Defense",
"asin": "0870114751"
},
{
"title": "Hanbo-Jutsu: Kukishin Ryu",
"asin": "3924862052"
},
{
"title": "Ninja: The Invisible Assassins",
"asin": "089750030X"
},
{
"title": "Ninja 1: Spirit of the Shadow Warrior ",
"asin": "0897500733"
},
{
"title": "Ninja 2: Warrior Ways of Enlightenment",
"asin": "0897500776"
},
{
"title": "Ninja 3: Warrior Path of Togakure",
"asin": "0897500903"
},
{
"title": "Ninja 4: Legacy of the Night Warrior",
"asin": "0897501020"
},
{
"title": "Ninja 5: Lore of the Shinobi Warrior",
"asin": "0897501233"
},
{
"title": "Ninja 6: Secret Scrolls of the Warrior Sage",
"asin": "089750156X"
},
{
"title": "The Book of Ninja: The Bansenshukai",
"asin": "1780284934"
},
{
"title": "True Path of the Ninja",
"asin": "4805311142"
},
{
"title": "The Ninpiden - True Ninja Traditions",
"asin": "1604818301"
},
{
"title": "The Secret Traditions of the Shinobi",
"asin": "1583944354"
},
{
"title": "Kokoro no Katachi: Das Wesen des Kokoro",
"asin": "3940404071"
},
{
"title": "The Art of Life and Death: Lessons in Budo from a Ninja Master",
"asin": "080484304X"
},
{
"title": "The Ninja and Their Secret Fighting Art",
"asin": "0804816565"
},
{
"title": "The Mystic Arts Of The Ninja",
"asin": "0809253437"
},
{
"title": "Ninja",
"asin": "3613305879"
},
{
"title": "Ninja und Japanische Kampfmönche",
"asin": "3877486312"
},
{
"title": "Die Kunst des Krieges",
"asin": "3937872876"
},
{
"title": "Das Buch der fünf Ringe",
"asin": "3933321646"
},
{
"title": "Hagakure",
"asin": "3868201211"
},
{
"title": "Der Weg des Samurai: Anleitung zum strategischen Handeln",
"asin": "3492236316"
},
{
"title": "Bushidô: Die sieben Tugenden des Samurai",
"asin": "3492046622"
},
{
"title": "Samurai und Kriegskunst",
"cover": "/assets/images/recommendations/books/samurai-und-kriegskunst.jpg",
"asin": "3924862311"
},
{
"title": "Engaging Japanese Philosophy",
"asin": "0824874072"
},
{
"title": "Japanische Schwertschmiedekunst",
"asin": "3931425010"
},
{
"title": "Waffen und Schwertzierate Japans",
"cover": "/assets/images/recommendations/books/waffen-und-schwertzierate-japans.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70050"
},
{
"title": "Japanisches Wappenbuch - Nihon moncho",
"cover": "/assets/images/recommendations/books/japanisches-wappenbuch.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70040"
},
{
"title": "Yamato",
"cover": "/assets/images/recommendations/books/yamato.jpg",
"link": "https://www.tengu-publishing.de/de/index.php?site=artikel&artikelnr=70132"
},
{
"title": "Meifu Shinkage Ryû: Fundô kusarijutsu - Shurikenjutsu",
"cover": "/assets/images/recommendations/books/meifu-shinkage-ryu-de.jpg",
"asin": "3924862249"
},
{
"title": "Takamatsu Toshitsugu: Die Biographie einer Kampfkunstlegende",
"asin": "3924862117"
},
{
"title": "Ninja Attack!",
"asin": "477003119X"
},
{
"title": "Bruce Lee: The Art of Expressing the Human Body",
"asin": "0804831297"
},
{
"title": "Tao Te King",
"asin": "3866474652"
},
{
"title": "Der Lauf des Wassers",
"asin": "3458346392"
},
{
"title": "In der Mitte des Kreises",
"asin": "3458344594"
},
{
"title": "Die Shaolin-Mönche",
"asin": "3862280322"
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -3,104 +3,87 @@ const movies = require('./movies.json');
const glossary = require('./glossary.json');
module.exports = {
homepage: {
intro:
'Dies ist 木隠 (jap. *kogakure*, <q>Verborgen hinter Blättern und Bäumen.</q>), eine Sammlung von Texten über Ninja und Ninjutsu, mit der ich 1999 begonnen habe. Im Laufe der Jahre kamen immer mehr Seiten, Bilder und Illustrationen hinzu, bis schließlich dieses Buch daraus wurde.',
tocHeadline: 'Inhaltsverzeichnis',
},
downloads: {
intro:
'Hier gibt es das Online-Buch zum Download als eBook, 3D-Modelle von Waffen und Werkzeugen, sowie eine Ninja-Schriftart.',
font: {
headline: 'Iga-Ninja-Font',
text:
'Das Iga-Ninja Museum hatte vor vielen Jahren ein Bild einer Iga-Ninja-Geheimschrift auf ihrer Website veröffentlicht. Ich habe daraus eine Schriftart entwickelt, die hier heruntergeladen werden kann.',
more: 'Schrift auf GitHub ansehen',
download: 'Schrift herunterladen',
},
cgi: {
headline: '3D Modelle von Waffen und Werkzeugen der Ninja',
text:
'Für die erste Version dieser Website hatte ich 3D-Modelle von Waffen und Werkzeugen erstellt, die ich dann später in das `stl` Format umgewandelt habe. Die Modelle können auf GitHub direkt im Browser angesehen und von allen Seiten betrachtet werden.',
more: 'Waffen und Werkzeuge auf GitHub ansehen',
},
book: {
headline: 'Das Buch',
text:
'Es gibt den Inhalt dieses Online-Buches zum **kostenlosen** Download als eBook.',
pdf: 'PDF',
epub: 'EPUB',
mobi: 'MOBI',
},
},
colophon: {
intro:
'Dies ist 木隠. Seit 1999 kann man hier Artikel, Textsammlungen und Übersetzungen zu Themen rund um die japanischen Schattenkrieger und Spione, die Ninja, und deren Kampfkunst Ninjutsu lesen.\n\nDie Idee dazu wurde von Stefan Imhoff, einem Designer, Entwickler und Kampfkünstler aus Wolfsburg (heute aus Hamburg) entwickelt und umgesetzt.',
meaning: {
headline: 'Was bedeutet 木隠?',
text:
'Der Name *kogakure* (木隠) ist japanisch und bedeutet wörtlich übersetzt in etwa <q>Verborgen hinter Blättern und Bäumen</q>.\n\nIch habe diesen Namen in Anlehnung an das Buch des Samurai Tsunetomo Yamamoto, <cite>Hagakure</cite> (<q>Verborgen unter Laub</q>) und der ältesten Schule im Bujinkan, <cite>Togakure</cite> (<q>Verborgen hinter einer Tür</q>) gewählt.',
},
why: {
headline: 'Warum gibt es dieses Buch?',
text:
'Seit Anfang der 90er, ursprünglich wahrscheinlich durch die Teenage Mutant Hero Turtles auf das Ninjutsu gestoßen, interessierten mich die Ninja und ihre Gedankenwelt.\n\nDamals war das Bujinkan in Deutschland nur spärlich zu finden, eine Trainingsmöglichkeit nahezu unmöglich zu finden. Auch die erhältliche Fachliteratur war mehr als dürftig.\n\nAuf der Suche nach Wissen, Hintergrundinformationen und Informationen sammelte sich im Laufe der Zeit eine Notizsammlung an, die in diesem Buch verarbeitet wurde.\n\nDieses Buch erhebt keinen Anspruch auf Vollständigkeit, oder nach absoluter, belegbarer, geschichtlicher Beweise. Sie soll allen *bugeisha* (Kriegern) helfen, mehr über die Weisheiten dieser über tausend Jahre alten Kunst zu erfahren.',
},
contact: {
headline: 'Kontakt',
text:
'Man kann mich über meine E-Mail-Adresse oder verschiedene Social Media Platformen auf meiner <a href="https://www.stefanimhoff.de/about/#contact" rel="nofollow noopener noreferrer external" target="_blank">Website</a> erreichen.\n\nBitte lies zuerst durch, ob deine Frage bereits in den FAQ beantwortet wurde. Es ist mir zeitlich nicht immer möglich auf jede Frage zu antworten, ich verspreche jedoch, dass ich jede Nachricht lese!',
},
faq: {
headline: 'FAQ',
subheadline1: 'Wo kann ich trainieren?',
text1:
'Um ein Dōjō für Bujinkan Budō Taijutsu zu finden, solltet ihr am besten in einer Suchmaschine nach **Bujinkan** in Verbindung mit einer Stadt in eurer Nähe suchen. Aber mit Sicherheit wird es keine so gute Abdeckung mit Dōjō wie bei Jūdō oder Karate geben. Auf der Bujinkai-Seite gibt es eine sehr umfangreiche [Dōjō-Liste](http://www.bujinkan-deutschland.de/dojoliste-bujinkan.html).\n\nIch selbst habe *kein* eigenes Dōjō und biete *kein* Training an. Kogakure ist kein Kampfkunst-Stil, sondern der Name des Buches.',
subheadline2: 'Was für Bücher gibt es?',
text2:
'Die Auswahl an Fachbüchern über Ninja und Ninjutsu ist sehr groß. Der größte Teil ist jedoch auf Japanisch oder Englisch. Am besten einfach mal in meine [Empfehlungen](/empfehlungen/) schauen.',
subheadline3: 'Welche Bücher kannst du mir empfehlen?',
text3:
'Zuerst lege ich euch die Bücher von Dr. *Masaaki Hatsumi* ans Herz. *Andrew Adams* Buch <cite>Ninja</cite> ist gut, um einen Gesamtüberblick zu bekommen. *Stephen K. Hayes* hat sehr viele philosophische Aspekte in seinen Büchern (z. B. Tendai, Shugendō, Mikkyō), da ihn dies persönlich sehr interessiert, er ist sogar genau wie Takamatsu zum Mönch des Tendai ernannt worden.',
subheadline4: 'Wo bekomme ich Bücher über Ninjutsu her?',
text4:
'Seit es Buchversender wie z. B. [Amazon](http://www.amazon.de/exec/obidos/redirect?link_code=ur2&camp=1638&tag=kogakurede-21&creative=6742&path=tg%2Fbrowse%2F-%2F301128%3Fsite-redirect%3Dde) gibt, sollte es keine Problem mehr darstellen, Bücher aus dem Ausland zu bekommen. Auf der Seite [Empfehlungen](/empfehlungen/) habe ich eine Liste von Büchern und Filmen zusammengestellt, die ich empfehlen kann.',
subheadline5: 'Ich möchte auf eine Seite verlinken. Was ist zu beachten?',
text5:
'Es ist generell untersagt die Verlinkung in einem Frame zu verwirklichen, bei dem die Website nicht mehr als Urheber erkennbar ist. Du darfst gerne auf jede Seite dieser Domain verlinken.\n\nBilder, Photos und andere Medien dürfen *nicht direkt verlinkt werden*, wohl aber heruntergeladen und auf eigene Server gestellt werden (so lange die Regeln der [Creative Commons Lizenz](http://creativecommons.org/licenses/by-nc/3.0/deed.de) eingehalten werden).',
subheadline6: 'Sind Übersetzungen der Texte erlaubt?',
text6:
'Übersetzungen der Texte in andere Sprachen sind grundsätzlich erlaubt, solange dem Text eine Quellenangabe beigefügt wird. Bitte schicke mir einen Link, wo die Übersetzung publiziert wird. Wenn du eine Übersetzung in einer anderen Sprache erstellen möchtest, die hier gehostet werden soll, kontaktiere mich gerne.\n\nEine kommerzielle Nutzung, in welcher Form auch immer, ist nur mit schriftlicher Genehmigung möglich.',
},
donation: {
headline: 'Spenden',
text:
'Dieses Buch ist kostenlos, werbefrei und hat mich im Laufe der Zeit viele hundert Stunden Arbeit gekostet.\n\nWenn es dir gefallen hat, freue ich mich über Lob und Anerkennung. Du kannst mich unterstützen, indem du etwas aus meinen [Empfehlungen](/empfehlungen/) kaufst oder mir eine kleine Spende zukommen lässt.',
paypal: 'Spenden mit PayPal',
},
tech: {
headline: 'Technische Informationen',
text:
'Wer es bis hier hin durchgehalten hat, den interessieren wahrscheinlich auch die technischen Details zu dieser Seite.\n\nAlle Arbeiten wurden auf einem [Apple](https://www.apple.com/de/) Computer erstellt, die Grafiken wurden mit[Affinity Photo](https://affinity.serif.com/de/photo/), und [Affinity Designer](https://affinity.serif.com/de/designer/) gestaltet, alle Templates und Codesegmente mit [Neovim](https://neovim.io/) per Hand geschrieben und mit [Git](https://git-scm.com/) versioniert. Die Seiten werden mit [Eleventy](https://www.11ty.dev/) (11ty) generiert und die Entwicklungsumgebung und das Deployment werden mit [Gulp.js](https://gulpjs.com/) automatisiert.\n\nDer Quellcode dieser Website liegt für jeden zugänglich auf [GitHub](https://github.com/kogakure/website-11ty-kogakure.de). Fehler, Verbesserungen oder Ergänzungen können gerne dort als [Issue](https://github.com/kogakure/website-11ty-kogakure.de/issues) oder per E-Mail gemeldet werden.',
},
},
recommendations: {
intro: `Ich empfehle hier **${books.length}** Bücher und **${movies.length}** Filme aus den Themenbereichen Ninja, Samurai, Bujutsu, Kampfkunst, Philosophie und Asien. Es sind nicht immer alle Bücher erhältlich, manche kann man nur noch im Antiquariat bekommen. Ebenso sind einige der Filme nur schwer zu finden.`,
books: {
headline: 'Bücher',
},
movies: {
headline: 'Filme',
},
},
glossary: {
intro: `Dieses Glossar enthält **${glossary.length}** Einträge aus dem Bereich des Ninjutsu, der Kriegskunst und der japanischen Geschichte. Alle Worte sind Japanisch, ausser anderweitig angegeben.`,
chinese: 'Chinesisch',
sanskrit: 'Sanskrit',
},
homeLink: 'Zurück zur Startseite',
themeToggle: 'Farbthema wechseln',
upLink: 'Zurück nach oben',
creditAuthor: 'Text:',
creditTranslator: 'Übersetzung:',
homepage: {
intro: 'Dies ist 木隠 (jap. *kogakure*, <q>Verborgen hinter Blättern und Bäumen.</q>), eine Sammlung von Texten über Ninja und Ninjutsu, mit der ich 1999 begonnen habe. Im Laufe der Jahre kamen immer mehr Seiten, Bilder und Illustrationen hinzu, bis schließlich dieses Buch daraus wurde.',
tocHeadline: 'Inhaltsverzeichnis',
},
downloads: {
intro: 'Hier gibt es das Online-Buch zum Download als eBook, 3D-Modelle von Waffen und Werkzeugen, sowie eine Ninja-Schriftart.',
font: {
headline: 'Iga-Ninja-Font',
text: 'Das Iga-Ninja Museum hatte vor vielen Jahren ein Bild einer Iga-Ninja-Geheimschrift auf ihrer Website veröffentlicht. Ich habe daraus eine Schriftart entwickelt, die hier heruntergeladen werden kann.',
more: 'Schrift auf GitHub ansehen',
download: 'Schrift herunterladen',
},
cgi: {
headline: '3D Modelle von Waffen und Werkzeugen der Ninja',
text: 'Für die erste Version dieser Website hatte ich 3D-Modelle von Waffen und Werkzeugen erstellt, die ich dann später in das `stl` Format umgewandelt habe. Die Modelle können auf GitHub direkt im Browser angesehen und von allen Seiten betrachtet werden.',
more: 'Waffen und Werkzeuge auf GitHub ansehen',
},
book: {
headline: 'Das Buch',
text: 'Es gibt den Inhalt dieses Online-Buches zum **kostenlosen** Download als eBook.',
pdf: 'PDF',
epub: 'EPUB',
mobi: 'MOBI',
},
},
colophon: {
intro: 'Dies ist 木隠. Seit 1999 kann man hier Artikel, Textsammlungen und Übersetzungen zu Themen rund um die japanischen Schattenkrieger und Spione, die Ninja, und deren Kampfkunst Ninjutsu lesen.\n\nDie Idee dazu wurde von Stefan Imhoff, einem Designer, Entwickler und Kampfkünstler aus Wolfsburg (heute aus Hamburg) entwickelt und umgesetzt.',
meaning: {
headline: 'Was bedeutet 木隠?',
text: 'Der Name *kogakure* (木隠) ist japanisch und bedeutet wörtlich übersetzt in etwa <q>Verborgen hinter Blättern und Bäumen</q>.\n\nIch habe diesen Namen in Anlehnung an das Buch des Samurai Tsunetomo Yamamoto, <cite>Hagakure</cite> (<q>Verborgen unter Laub</q>) und der ältesten Schule im Bujinkan, <cite>Togakure</cite> (<q>Verborgen hinter einer Tür</q>) gewählt.',
},
why: {
headline: 'Warum gibt es dieses Buch?',
text: 'Seit Anfang der 90er, ursprünglich wahrscheinlich durch die Teenage Mutant Hero Turtles auf das Ninjutsu gestoßen, interessierten mich die Ninja und ihre Gedankenwelt.\n\nDamals war das Bujinkan in Deutschland nur spärlich zu finden, eine Trainingsmöglichkeit nahezu unmöglich zu finden. Auch die erhältliche Fachliteratur war mehr als dürftig.\n\nAuf der Suche nach Wissen, Hintergrundinformationen und Informationen sammelte sich im Laufe der Zeit eine Notizsammlung an, die in diesem Buch verarbeitet wurde.\n\nDieses Buch erhebt keinen Anspruch auf Vollständigkeit, oder nach absoluter, belegbarer, geschichtlicher Beweise. Sie soll allen *bugeisha* (Kriegern) helfen, mehr über die Weisheiten dieser über tausend Jahre alten Kunst zu erfahren.',
},
contact: {
headline: 'Kontakt',
text: 'Man kann mich über meine E-Mail-Adresse oder verschiedene Social Media Platformen auf meiner <a href="https://www.stefanimhoff.de/about/#contact" rel="nofollow noopener noreferrer external" target="_blank">Website</a> erreichen.\n\nBitte lies zuerst durch, ob deine Frage bereits in den FAQ beantwortet wurde. Es ist mir zeitlich nicht immer möglich auf jede Frage zu antworten, ich verspreche jedoch, dass ich jede Nachricht lese!',
},
faq: {
headline: 'FAQ',
subheadline1: 'Wo kann ich trainieren?',
text1: 'Um ein Dōjō für Bujinkan Budō Taijutsu zu finden, solltet ihr am besten in einer Suchmaschine nach **Bujinkan** in Verbindung mit einer Stadt in eurer Nähe suchen. Aber mit Sicherheit wird es keine so gute Abdeckung mit Dōjō wie bei Jūdō oder Karate geben. Auf der Bujinkai-Seite gibt es eine sehr umfangreiche [Dōjō-Liste](http://www.bujinkan-deutschland.de/dojoliste-bujinkan.html).\n\nIch selbst habe *kein* eigenes Dōjō und biete *kein* Training an. Kogakure ist kein Kampfkunst-Stil, sondern der Name des Buches.',
subheadline2: 'Was für Bücher gibt es?',
text2: 'Die Auswahl an Fachbüchern über Ninja und Ninjutsu ist sehr groß. Der größte Teil ist jedoch auf Japanisch oder Englisch. Am besten einfach mal in meine [Empfehlungen](/empfehlungen/) schauen.',
subheadline3: 'Welche Bücher kannst du mir empfehlen?',
text3: 'Zuerst lege ich euch die Bücher von Dr. *Masaaki Hatsumi* ans Herz. *Andrew Adams* Buch <cite>Ninja</cite> ist gut, um einen Gesamtüberblick zu bekommen. *Stephen K. Hayes* hat sehr viele philosophische Aspekte in seinen Büchern (z. B. Tendai, Shugendō, Mikkyō), da ihn dies persönlich sehr interessiert, er ist sogar genau wie Takamatsu zum Mönch des Tendai ernannt worden.',
subheadline4: 'Wo bekomme ich Bücher über Ninjutsu her?',
text4: 'Seit es Buchversender wie z. B. [Amazon](http://www.amazon.de/exec/obidos/redirect?link_code=ur2&camp=1638&tag=kogakurede-21&creative=6742&path=tg%2Fbrowse%2F-%2F301128%3Fsite-redirect%3Dde) gibt, sollte es keine Problem mehr darstellen, Bücher aus dem Ausland zu bekommen. Auf der Seite [Empfehlungen](/empfehlungen/) habe ich eine Liste von Büchern und Filmen zusammengestellt, die ich empfehlen kann.',
subheadline5: 'Ich möchte auf eine Seite verlinken. Was ist zu beachten?',
text5: 'Es ist generell untersagt die Verlinkung in einem Frame zu verwirklichen, bei dem die Website nicht mehr als Urheber erkennbar ist. Du darfst gerne auf jede Seite dieser Domain verlinken.\n\nBilder, Photos und andere Medien dürfen *nicht direkt verlinkt werden*, wohl aber heruntergeladen und auf eigene Server gestellt werden (so lange die Regeln der [Creative Commons Lizenz](http://creativecommons.org/licenses/by-nc/3.0/deed.de) eingehalten werden).',
subheadline6: 'Sind Übersetzungen der Texte erlaubt?',
text6: 'Übersetzungen der Texte in andere Sprachen sind grundsätzlich erlaubt, solange dem Text eine Quellenangabe beigefügt wird. Bitte schicke mir einen Link, wo die Übersetzung publiziert wird. Wenn du eine Übersetzung in einer anderen Sprache erstellen möchtest, die hier gehostet werden soll, kontaktiere mich gerne.\n\nEine kommerzielle Nutzung, in welcher Form auch immer, ist nur mit schriftlicher Genehmigung möglich.',
},
donation: {
headline: 'Spenden',
text: 'Dieses Buch ist kostenlos, werbefrei und hat mich im Laufe der Zeit viele hundert Stunden Arbeit gekostet.\n\nWenn es dir gefallen hat, freue ich mich über Lob und Anerkennung. Du kannst mich unterstützen, indem du etwas aus meinen [Empfehlungen](/empfehlungen/) kaufst oder mir eine kleine Spende zukommen lässt.',
paypal: 'Spenden mit PayPal',
},
tech: {
headline: 'Technische Informationen',
text: 'Wer es bis hier hin durchgehalten hat, den interessieren wahrscheinlich auch die technischen Details zu dieser Seite.\n\nAlle Arbeiten wurden auf einem [Apple](https://www.apple.com/de/) Computer erstellt, die Grafiken wurden mit[Affinity Photo](https://affinity.serif.com/de/photo/), und [Affinity Designer](https://affinity.serif.com/de/designer/) gestaltet, alle Templates und Codesegmente mit [Neovim](https://neovim.io/) per Hand geschrieben und mit [Git](https://git-scm.com/) versioniert. Die Seiten werden mit [Eleventy](https://www.11ty.dev/) (11ty) generiert und die Entwicklungsumgebung und das Deployment werden mit [Gulp.js](https://gulpjs.com/) automatisiert.\n\nDer Quellcode dieser Website liegt für jeden zugänglich auf [GitHub](https://github.com/kogakure/website-11ty-kogakure.de). Fehler, Verbesserungen oder Ergänzungen können gerne dort als [Issue](https://github.com/kogakure/website-11ty-kogakure.de/issues) oder per E-Mail gemeldet werden.',
},
},
recommendations: {
intro: `Ich empfehle hier **${books.length}** Bücher und **${movies.length}** Filme aus den Themenbereichen Ninja, Samurai, Bujutsu, Kampfkunst, Philosophie und Asien. Es sind nicht immer alle Bücher erhältlich, manche kann man nur noch im Antiquariat bekommen. Ebenso sind einige der Filme nur schwer zu finden.`,
books: {
headline: 'Bücher',
},
movies: {
headline: 'Filme',
},
},
glossary: {
intro: `Dieses Glossar enthält **${glossary.length}** Einträge aus dem Bereich des Ninjutsu, der Kriegskunst und der japanischen Geschichte. Alle Worte sind Japanisch, ausser anderweitig angegeben.`,
chinese: 'Chinesisch',
sanskrit: 'Sanskrit',
},
homeLink: 'Zurück zur Startseite',
themeToggle: 'Farbthema wechseln',
upLink: 'Zurück nach oben',
creditAuthor: 'Text:',
creditTranslator: 'Übersetzung:',
};

View File

@@ -1,146 +1,146 @@
[
{
"title": "Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-1.jpg",
"imdb": "tt0164882"
},
{
"title": "Zoku Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-2.jpg",
"imdb": "tt0200310"
},
{
"title": "Shin Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-3.jpg",
"imdb": "tt0187501"
},
{
"title": "Shinobi no Mono: Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-4.jpg",
"imdb": "tt0224098"
},
{
"title": "Shinobi no Mono: Zoku Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-5.jpg",
"imdb": "tt0199023"
},
{
"title": "Shinobi no Mono: Iga-yashiki",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-6.jpg",
"imdb": "tt0224097"
},
{
"title": "Shinobi no Mono: Shin kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-7.jpg",
"imdb": "tt0058592"
},
{
"title": "Shinsho: Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-8.jpg",
"imdb": "tt0201924"
},
{
"title": "Akira Kurosawa - Samurai Edition",
"asin": "B0031BRLTS"
},
{
"title": "Die sieben Samurai",
"originalTitle": "Shichinin no samurai",
"asin": "B004N6XW3E",
"imdb": "tt0047478"
},
{
"title": "Das Schloß im Spinnwebwald",
"originalTitle": "Kumonosu-jô",
"asin": "B002S1PABS",
"imdb": "tt0050613"
},
{
"title": "Die Verborgene Festung",
"originalTitle": "Kakushi-toride no san-akunin",
"asin": "B002ZWMR98",
"imdb": "tt0051808"
},
{
"title": "Yojimbo Der Leibwächter",
"originalTitle": "Yôjinbô",
"asin": "B002S1PADQ",
"imdb": "tt0055630"
},
{
"title": "Rashomon",
"asin": "3866153198",
"imdb": "tt0042876"
},
{
"title": "Sanjuro",
"originalTitle": "Tsubaki Sanjûrô",
"asin": "B0007PLFBG",
"imdb": "tt0056443"
},
{
"title": "Kagemusha - Der Schatten des Kriegers",
"originalTitle": "Kagemusha",
"cover": "/assets/images/recommendations/movies/kagemusha.jpg",
"asin": "B00008OX3W",
"imdb": "tt0080979"
},
{
"title": "Ran",
"asin": "B00030EJJA",
"imdb": "tt0089881"
},
{
"title": "Last Samurai",
"originalTitle": "The Last Samurai",
"asin": "B0001G6PZC",
"imdb": "tt0325710"
},
{
"title": "Lady Snowblood",
"originalTitle": "Shurayukihime",
"asin": "B0006VBJPI",
"imdb": "tt0158714"
},
{
"title": "Zatoichi - Der blinde Samurai",
"originalTitle": "Zatôichi",
"asin": "B0006SN4W2",
"imdb": "tt0363226"
},
{
"title": "Samurai der Dämmerung",
"originalTitle": "Tasogare Seibei",
"asin": "B000L42W88",
"imdb": "tt0351817"
},
{
"title": "Samurai Fiction",
"originalTitle": "SF: Episode One",
"asin": "B0001E3AM0",
"imdb": "tt0170544"
},
{
"title": "Lone Wolf & Cub",
"originalTitle": "Kozure ôkami",
"asin": "B000C9CYF8"
},
{
"title": "Shogun",
"cover": "/assets/images/recommendations/movies/shogun-de.jpg",
"asin": "B0001BG4C6",
"imdb": "tt0080274"
},
{
"title": "Hero",
"originalTitle": "Ying xiong",
"asin": "B000JGW828",
"imdb": "tt0299977"
},
{
"title": "Ghost Dog - Der Weg des Samurai",
"originalTitle": "Ghost Dog: The Way of the Samurai",
"asin": "B00004U9Q9",
"imdb": "tt0165798"
}
{
"title": "Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-1.jpg",
"imdb": "tt0164882"
},
{
"title": "Zoku Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-2.jpg",
"imdb": "tt0200310"
},
{
"title": "Shin Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-3.jpg",
"imdb": "tt0187501"
},
{
"title": "Shinobi no Mono: Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-4.jpg",
"imdb": "tt0224098"
},
{
"title": "Shinobi no Mono: Zoku Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-5.jpg",
"imdb": "tt0199023"
},
{
"title": "Shinobi no Mono: Iga-yashiki",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-6.jpg",
"imdb": "tt0224097"
},
{
"title": "Shinobi no Mono: Shin kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-7.jpg",
"imdb": "tt0058592"
},
{
"title": "Shinsho: Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-8.jpg",
"imdb": "tt0201924"
},
{
"title": "Akira Kurosawa - Samurai Edition",
"asin": "B0031BRLTS"
},
{
"title": "Die sieben Samurai",
"originalTitle": "Shichinin no samurai",
"asin": "B004N6XW3E",
"imdb": "tt0047478"
},
{
"title": "Das Schloß im Spinnwebwald",
"originalTitle": "Kumonosu-jô",
"asin": "B002S1PABS",
"imdb": "tt0050613"
},
{
"title": "Die Verborgene Festung",
"originalTitle": "Kakushi-toride no san-akunin",
"asin": "B002ZWMR98",
"imdb": "tt0051808"
},
{
"title": "Yojimbo Der Leibwächter",
"originalTitle": "Yôjinbô",
"asin": "B002S1PADQ",
"imdb": "tt0055630"
},
{
"title": "Rashomon",
"asin": "3866153198",
"imdb": "tt0042876"
},
{
"title": "Sanjuro",
"originalTitle": "Tsubaki Sanjûrô",
"asin": "B0007PLFBG",
"imdb": "tt0056443"
},
{
"title": "Kagemusha - Der Schatten des Kriegers",
"originalTitle": "Kagemusha",
"cover": "/assets/images/recommendations/movies/kagemusha.jpg",
"asin": "B00008OX3W",
"imdb": "tt0080979"
},
{
"title": "Ran",
"asin": "B00030EJJA",
"imdb": "tt0089881"
},
{
"title": "Last Samurai",
"originalTitle": "The Last Samurai",
"asin": "B0001G6PZC",
"imdb": "tt0325710"
},
{
"title": "Lady Snowblood",
"originalTitle": "Shurayukihime",
"asin": "B0006VBJPI",
"imdb": "tt0158714"
},
{
"title": "Zatoichi - Der blinde Samurai",
"originalTitle": "Zatôichi",
"asin": "B0006SN4W2",
"imdb": "tt0363226"
},
{
"title": "Samurai der Dämmerung",
"originalTitle": "Tasogare Seibei",
"asin": "B000L42W88",
"imdb": "tt0351817"
},
{
"title": "Samurai Fiction",
"originalTitle": "SF: Episode One",
"asin": "B0001E3AM0",
"imdb": "tt0170544"
},
{
"title": "Lone Wolf & Cub",
"originalTitle": "Kozure ôkami",
"asin": "B000C9CYF8"
},
{
"title": "Shogun",
"cover": "/assets/images/recommendations/movies/shogun-de.jpg",
"asin": "B0001BG4C6",
"imdb": "tt0080274"
},
{
"title": "Hero",
"originalTitle": "Ying xiong",
"asin": "B000JGW828",
"imdb": "tt0299977"
},
{
"title": "Ghost Dog - Der Weg des Samurai",
"originalTitle": "Ghost Dog: The Way of the Samurai",
"asin": "B00004U9Q9",
"imdb": "tt0165798"
}
]

View File

@@ -1,10 +1,10 @@
[
{
"title": "Vorwort",
"slug": "vorwort"
},
{
"title": "Einleitung",
"slug": "ninjutsu"
}
{
"title": "Vorwort",
"slug": "vorwort"
},
{
"title": "Einleitung",
"slug": "ninjutsu"
}
]

View File

@@ -1,347 +1,347 @@
[
{
"title": "Geschichte",
"items": [
{
"title": "Ursprünge des Ninjutsu",
"slug": "urspruenge-des-ninjutsu"
},
{
"title": "Entstehung der Ryū",
"slug": "entstehung-der-ryu"
},
{
"title": "Berühmte Ninja",
"slug": "beruehmte-ninja"
},
{
"title": "Ninja-Biografien",
"slug": "ninja-biographien"
},
{
"title": "Iga-Ryū",
"slug": "iga-ryu"
},
{
"title": "Kōga-Ryū",
"slug": "koga-ryu"
},
{
"title": "Iga no Ran",
"slug": "iga-no-ran"
},
{
"title": "Invasion von Iga",
"slug": "invasion-von-iga"
},
{
"title": "Niedergang",
"slug": "niedergang"
},
{
"title": "Moderne Geschichte",
"slug": "moderne-geschichte"
}
]
},
{
"title": "Organisation & Ausbildung",
"items": [
{
"title": "Organisation der Ryū",
"slug": "organisation-der-ryu"
},
{
"title": "Ausbildung der Ninja",
"slug": "ausbildung-der-ninja"
},
{
"title": "Kunoichi",
"slug": "kunoichi"
},
{
"title": "Bansenshūkai",
"slug": "bansenshukai"
}
]
},
{
"title": "Körperliches Training",
"items": [
{
"title": "Taijutsu",
"slug": "taijutsu"
},
{
"title": "Kampfregeln",
"slug": "kampfregeln"
},
{
"title": "Kampffaktoren",
"slug": "kampffaktoren"
},
{
"title": "Jūnantaisō",
"slug": "junan-taiso"
},
{
"title": "Trainingsfaktoren",
"slug": "trainingsfaktoren"
},
{
"title": "Körperwaffen",
"slug": "koerperwaffen"
},
{
"title": "Abhärtung",
"slug": "abhaertung"
},
{
"title": "Atemite",
"slug": "atemi-te"
},
{
"title": "Kamae",
"slug": "kamae"
},
{
"title": "Ukemi",
"slug": "ukemi"
},
{
"title": "Shinobi Iri",
"slug": "shinobi-iri"
}
]
},
{
"title": "Waffen & Werkzeuge",
"items": [
{
"title": "Waffen",
"slug": "waffen"
},
{
"title": "Wasserwerkzeuge",
"slug": "wasserwerkzeuge"
},
{
"title": "Einbruchswerkzeuge",
"slug": "einbruchswerkzeuge"
},
{
"title": "Kletterwerkzeuge",
"slug": "kletterwerkzeuge"
},
{
"title": "Feuerwerkzeuge",
"slug": "feuerwerkzeuge"
},
{
"title": "Ninjakleidung",
"slug": "ninjakleidung"
},
{
"title": "Sonstige Ausrüstung",
"slug": "sonstige-ausruestung"
},
{
"title": "Inrō Reiseapotheke",
"slug": "inro"
}
]
},
{
"title": "Geistige Kräfte",
"items": [
{
"title": "Mikkyō",
"slug": "mikkyo"
},
{
"title": "Sanmitsu",
"slug": "sanmitsu"
},
{
"title": "Kuji-in",
"slug": "kuji-in"
},
{
"title": "Godai",
"slug": "godai"
},
{
"title": "Gogyō",
"slug": "gogyo"
},
{
"title": "Tenchijin",
"slug": "tenchijin"
},
{
"title": "Bewusstsein und Geist",
"slug": "bewusstsein-und-geist"
},
{
"title": "Der Siebte Sinn",
"slug": "der-siebte-sinn"
},
{
"title": "Erleuchtung",
"slug": "erleuchtung"
},
{
"title": "Daoismus",
"slug": "daoismus"
}
]
},
{
"title": "Strategie & Taktik",
"items": [
{
"title": "Goton pō",
"slug": "gotonpo"
},
{
"title": "Onshin jutsu",
"slug": "onshinjutsu"
},
{
"title": "Shichi hō de",
"slug": "shichi-ho-de"
},
{
"title": "Chōhō",
"slug": "choho"
},
{
"title": "Heihō",
"slug": "heiho"
},
{
"title": "Bōryaku",
"slug": "bo-ryaku"
},
{
"title": "Tōiri",
"slug": "toiri"
},
{
"title": "Chi kai ri",
"slug": "chikairi"
}
]
},
{
"title": "Das Erbe der Ninja",
"items": [
{
"title": "Takamatsu Toshitsugu",
"slug": "takamatsu-toshitsugu"
},
{
"title": "Hatsumi Masaaki",
"slug": "hatsumi-masaaki"
},
{
"title": "Bujinkan",
"slug": "bujinkan"
},
{
"title": "Richtlinien des Bujinkan",
"slug": "richtlinien-des-bujinkan"
},
{
"title": "Togakure-Ryū",
"slug": "togakure-ryu"
},
{
"title": "Gyokko-Ryū",
"slug": "gyokko-ryu"
},
{
"title": "Kukishinden-Ryū",
"slug": "kukishinden-ryu"
},
{
"title": "Shinden-fudo-Ryū",
"slug": "shinden-fudo-ryu"
},
{
"title": "Gyokushin-Ryū",
"slug": "gyokushin-ryu"
},
{
"title": "Koto-Ryū",
"slug": "koto-ryu"
},
{
"title": "Takagi-yoshin-Ryū",
"slug": "takagi-yoshin-ryu"
},
{
"title": "Gikan-Ryū",
"slug": "gikan-ryu"
},
{
"title": "Kumogakure-Ryū",
"slug": "kumogakure-ryu"
}
]
},
{
"title": "Regeln & Philosophie",
"items": [
{
"title": "Essenz des Ninjutsu",
"slug": "essenz-des-ninjutsu"
},
{
"title": "Die Regeln der Ninja",
"slug": "die-regeln-der-ninja"
},
{
"title": "Die 5 Gebote der Ninja",
"slug": "die-5-gebote-der-ninja"
},
{
"title": "18 Trainingsebenen",
"slug": "18-trainingsebenen"
},
{
"title": "Ninpō Sanjūrokkei",
"slug": "ninpo-sanjurokkei"
},
{
"title": "Ninja no Hachimon",
"slug": "ninja-no-hachimon"
}
]
},
{
"title": "Anhänge",
"items": [
{
"title": "Chronologie",
"slug": "chronologie"
},
{
"title": "Downloads",
"slug": "downloads"
},
{
"title": "Empfehlungen",
"slug": "empfehlungen"
},
{
"title": "Glossar",
"slug": "glossar"
},
{
"title": "Kolophon",
"slug": "kolophon"
}
]
}
{
"title": "Geschichte",
"items": [
{
"title": "Ursprünge des Ninjutsu",
"slug": "urspruenge-des-ninjutsu"
},
{
"title": "Entstehung der Ryū",
"slug": "entstehung-der-ryu"
},
{
"title": "Berühmte Ninja",
"slug": "beruehmte-ninja"
},
{
"title": "Ninja-Biografien",
"slug": "ninja-biographien"
},
{
"title": "Iga-Ryū",
"slug": "iga-ryu"
},
{
"title": "Kōga-Ryū",
"slug": "koga-ryu"
},
{
"title": "Iga no Ran",
"slug": "iga-no-ran"
},
{
"title": "Invasion von Iga",
"slug": "invasion-von-iga"
},
{
"title": "Niedergang",
"slug": "niedergang"
},
{
"title": "Moderne Geschichte",
"slug": "moderne-geschichte"
}
]
},
{
"title": "Organisation & Ausbildung",
"items": [
{
"title": "Organisation der Ryū",
"slug": "organisation-der-ryu"
},
{
"title": "Ausbildung der Ninja",
"slug": "ausbildung-der-ninja"
},
{
"title": "Kunoichi",
"slug": "kunoichi"
},
{
"title": "Bansenshūkai",
"slug": "bansenshukai"
}
]
},
{
"title": "Körperliches Training",
"items": [
{
"title": "Taijutsu",
"slug": "taijutsu"
},
{
"title": "Kampfregeln",
"slug": "kampfregeln"
},
{
"title": "Kampffaktoren",
"slug": "kampffaktoren"
},
{
"title": "Jūnantaisō",
"slug": "junan-taiso"
},
{
"title": "Trainingsfaktoren",
"slug": "trainingsfaktoren"
},
{
"title": "Körperwaffen",
"slug": "koerperwaffen"
},
{
"title": "Abhärtung",
"slug": "abhaertung"
},
{
"title": "Atemite",
"slug": "atemi-te"
},
{
"title": "Kamae",
"slug": "kamae"
},
{
"title": "Ukemi",
"slug": "ukemi"
},
{
"title": "Shinobi Iri",
"slug": "shinobi-iri"
}
]
},
{
"title": "Waffen & Werkzeuge",
"items": [
{
"title": "Waffen",
"slug": "waffen"
},
{
"title": "Wasserwerkzeuge",
"slug": "wasserwerkzeuge"
},
{
"title": "Einbruchswerkzeuge",
"slug": "einbruchswerkzeuge"
},
{
"title": "Kletterwerkzeuge",
"slug": "kletterwerkzeuge"
},
{
"title": "Feuerwerkzeuge",
"slug": "feuerwerkzeuge"
},
{
"title": "Ninjakleidung",
"slug": "ninjakleidung"
},
{
"title": "Sonstige Ausrüstung",
"slug": "sonstige-ausruestung"
},
{
"title": "Inrō Reiseapotheke",
"slug": "inro"
}
]
},
{
"title": "Geistige Kräfte",
"items": [
{
"title": "Mikkyō",
"slug": "mikkyo"
},
{
"title": "Sanmitsu",
"slug": "sanmitsu"
},
{
"title": "Kuji-in",
"slug": "kuji-in"
},
{
"title": "Godai",
"slug": "godai"
},
{
"title": "Gogyō",
"slug": "gogyo"
},
{
"title": "Tenchijin",
"slug": "tenchijin"
},
{
"title": "Bewusstsein und Geist",
"slug": "bewusstsein-und-geist"
},
{
"title": "Der Siebte Sinn",
"slug": "der-siebte-sinn"
},
{
"title": "Erleuchtung",
"slug": "erleuchtung"
},
{
"title": "Daoismus",
"slug": "daoismus"
}
]
},
{
"title": "Strategie & Taktik",
"items": [
{
"title": "Goton pō",
"slug": "gotonpo"
},
{
"title": "Onshin jutsu",
"slug": "onshinjutsu"
},
{
"title": "Shichi hō de",
"slug": "shichi-ho-de"
},
{
"title": "Chōhō",
"slug": "choho"
},
{
"title": "Heihō",
"slug": "heiho"
},
{
"title": "Bōryaku",
"slug": "bo-ryaku"
},
{
"title": "Tōiri",
"slug": "toiri"
},
{
"title": "Chi kai ri",
"slug": "chikairi"
}
]
},
{
"title": "Das Erbe der Ninja",
"items": [
{
"title": "Takamatsu Toshitsugu",
"slug": "takamatsu-toshitsugu"
},
{
"title": "Hatsumi Masaaki",
"slug": "hatsumi-masaaki"
},
{
"title": "Bujinkan",
"slug": "bujinkan"
},
{
"title": "Richtlinien des Bujinkan",
"slug": "richtlinien-des-bujinkan"
},
{
"title": "Togakure-Ryū",
"slug": "togakure-ryu"
},
{
"title": "Gyokko-Ryū",
"slug": "gyokko-ryu"
},
{
"title": "Kukishinden-Ryū",
"slug": "kukishinden-ryu"
},
{
"title": "Shinden-fudo-Ryū",
"slug": "shinden-fudo-ryu"
},
{
"title": "Gyokushin-Ryū",
"slug": "gyokushin-ryu"
},
{
"title": "Koto-Ryū",
"slug": "koto-ryu"
},
{
"title": "Takagi-yoshin-Ryū",
"slug": "takagi-yoshin-ryu"
},
{
"title": "Gikan-Ryū",
"slug": "gikan-ryu"
},
{
"title": "Kumogakure-Ryū",
"slug": "kumogakure-ryu"
}
]
},
{
"title": "Regeln & Philosophie",
"items": [
{
"title": "Essenz des Ninjutsu",
"slug": "essenz-des-ninjutsu"
},
{
"title": "Die Regeln der Ninja",
"slug": "die-regeln-der-ninja"
},
{
"title": "Die 5 Gebote der Ninja",
"slug": "die-5-gebote-der-ninja"
},
{
"title": "18 Trainingsebenen",
"slug": "18-trainingsebenen"
},
{
"title": "Ninpō Sanjūrokkei",
"slug": "ninpo-sanjurokkei"
},
{
"title": "Ninja no Hachimon",
"slug": "ninja-no-hachimon"
}
]
},
{
"title": "Anhänge",
"items": [
{
"title": "Chronologie",
"slug": "chronologie"
},
{
"title": "Downloads",
"slug": "downloads"
},
{
"title": "Empfehlungen",
"slug": "empfehlungen"
},
{
"title": "Glossar",
"slug": "glossar"
},
{
"title": "Kolophon",
"slug": "kolophon"
}
]
}
]

View File

@@ -1,214 +1,214 @@
[
{
"title": "Gyokko Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/gyokko-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70154"
},
{
"title": "Kukishinden Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/kukishinden-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70161"
},
{
"title": "Togakure Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/togakure-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70160"
},
{
"title": "Kotô Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/koto-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70165"
},
{
"title": "Shinden-Fudo Ryû Jûtaijutsu no kata: Bujinkan Budô densho",
"cover": "/assets/images/recommendations/books/shinden-fudo-ryu-jutaijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70172"
},
{
"title": "Takagi-Yôshin-Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/takagi-yoshin-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70176"
},
{
"title": "Ten Ryaku no Maki: The Principles of Heaven",
"cover": "/assets/images/recommendations/books/ten-ryaku-no-maki-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70180"
},
{
"title": "Chi Ryaku no Maki: The Principles of Earth",
"cover": "/assets/images/recommendations/books/chi-ryaku-no-maki-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70182"
},
{
"title": "Jin Ryaku no Maki: The Principles of Human Being",
"cover": "/assets/images/recommendations/books/jin-ryaku-no-maki-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70185"
},
{
"title": "The Way of the Ninja: Secret Techniques",
"asin": "1568365918"
},
{
"title": "Art of Japanese Sword Fighting: Secrets of the Samurai",
"asin": "1568365926"
},
{
"title": "Advanced Stick Fighting",
"asin": "1568365535"
},
{
"title": "Unarmed Fighting Techniques of the Samurai",
"asin": "1568365322"
},
{
"title": "Secrets from the Ninja Grandmaster",
"asin": "1581603754"
},
{
"title": "Essence of Ninjutsu: The Nine Traditions",
"asin": "0809247240"
},
{
"title": "The Grandmaster's Book of Ninja Training",
"asin": "0809246295"
},
{
"title": "Ninjutsu. History and Tradition",
"asin": "0865680272"
},
{
"title": "Understand? Good Play!",
"cover": "/assets/images/recommendations/books/understand-good-play.jpg",
"asin": "B00RWSJEGO"
},
{
"title": "Stick Fighting: Techniques of Self-Defense",
"asin": "1568364997"
},
{
"title": "Ninja: The Invisible Assassins",
"asin": "089750030X"
},
{
"title": "Ninja 1: Spirit of the Shadow Warrior ",
"asin": "0897500733"
},
{
"title": "Ninja 2: Warrior Ways of Enlightenment",
"asin": "0897500776"
},
{
"title": "Ninja 3: Warrior Path of Togakure",
"asin": "0897500903"
},
{
"title": "Ninja 4: Legacy of the Night Warrior",
"asin": "0897501020"
},
{
"title": "Ninja 5: Lore of the Shinobi Warrior",
"asin": "0897501233"
},
{
"title": "Ninja 6: Secret Scrolls of the Warrior Sage",
"asin": "089750156X"
},
{
"title": "The Book of Ninja: The Bansenshukai",
"asin": "1780284934"
},
{
"title": "True Path of the Ninja",
"asin": "4805314397"
},
{
"title": "The Ninpiden - True Ninja Traditions",
"asin": "1604818301"
},
{
"title": "The Secret Traditions of the Shinobi",
"asin": "1583944354"
},
{
"title": "Kokoro no Katachi: The Image of the Heart",
"asin": "B07MBFL8NB"
},
{
"title": "The Art of Life and Death: Lessons in Budo from a Ninja Master",
"asin": "080484867X"
},
{
"title": "The Ninja and Their Secret Fighting Art",
"asin": "B006OO487C"
},
{
"title": "The Mystic Arts Of The Ninja",
"asin": "0809253437"
},
{
"title": "Ninja: Unmasking the Myth",
"asin": "B07D56RNXP"
},
{
"title": "Ninja AD 1460-1650",
"asin": "1841765252"
},
{
"title": "The Art of War",
"asin": "081331951X"
},
{
"title": "The Book of Five Rings",
"asin": "1935785974"
},
{
"title": "Hagakure",
"asin": "4805311983"
},
{
"title": "The Life-Giving Sword",
"asin": "1590309901"
},
{
"title": "Bushido",
"asin": "4805314893"
},
{
"title": "Engaging Japanese Philosophy",
"asin": "0824874072"
},
{
"title": "The Craft of the Japanese Sword",
"asin": "087011798X"
},
{
"title": "Meifu Shinkage Ryû: Fundô kusarijutsu - Shurikenjutsu",
"cover": "/assets/images/recommendations/books/meifu-shinkage-ryu-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70183"
},
{
"title": "Takamatsu Toshitsugu: The Last Shinobi",
"cover": "/assets/images/recommendations/books/takamatsu-toshitsugu-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70002"
},
{
"title": "Ninja Attack!",
"asin": "4805312181"
},
{
"title": "Bruce Lee: The Art of Expressing the Human Body",
"asin": "0804831297"
},
{
"title": "Dao De Jing",
"asin": "0520242211"
},
{
"title": "The Book of Chuang Tzu",
"asin": "014045537X"
},
{
"title": "Tao: The Watercourse Way",
"asin": "0394733118"
}
{
"title": "Gyokko Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/gyokko-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70154"
},
{
"title": "Kukishinden Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/kukishinden-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70161"
},
{
"title": "Togakure Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/togakure-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70160"
},
{
"title": "Kotô Ryû Taijutsu no Kata: Bujinkan Budô Densho",
"cover": "/assets/images/recommendations/books/koto-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70165"
},
{
"title": "Shinden-Fudo Ryû Jûtaijutsu no kata: Bujinkan Budô densho",
"cover": "/assets/images/recommendations/books/shinden-fudo-ryu-jutaijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70172"
},
{
"title": "Takagi-Yôshin-Ryû Taijutsu no Kata: Bujinkan Budô Denshô",
"cover": "/assets/images/recommendations/books/takagi-yoshin-ryu-taijutsu-no-kata-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70176"
},
{
"title": "Ten Ryaku no Maki: The Principles of Heaven",
"cover": "/assets/images/recommendations/books/ten-ryaku-no-maki-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70180"
},
{
"title": "Chi Ryaku no Maki: The Principles of Earth",
"cover": "/assets/images/recommendations/books/chi-ryaku-no-maki-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70182"
},
{
"title": "Jin Ryaku no Maki: The Principles of Human Being",
"cover": "/assets/images/recommendations/books/jin-ryaku-no-maki-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70185"
},
{
"title": "The Way of the Ninja: Secret Techniques",
"asin": "1568365918"
},
{
"title": "Art of Japanese Sword Fighting: Secrets of the Samurai",
"asin": "1568365926"
},
{
"title": "Advanced Stick Fighting",
"asin": "1568365535"
},
{
"title": "Unarmed Fighting Techniques of the Samurai",
"asin": "1568365322"
},
{
"title": "Secrets from the Ninja Grandmaster",
"asin": "1581603754"
},
{
"title": "Essence of Ninjutsu: The Nine Traditions",
"asin": "0809247240"
},
{
"title": "The Grandmaster's Book of Ninja Training",
"asin": "0809246295"
},
{
"title": "Ninjutsu. History and Tradition",
"asin": "0865680272"
},
{
"title": "Understand? Good Play!",
"cover": "/assets/images/recommendations/books/understand-good-play.jpg",
"asin": "B00RWSJEGO"
},
{
"title": "Stick Fighting: Techniques of Self-Defense",
"asin": "1568364997"
},
{
"title": "Ninja: The Invisible Assassins",
"asin": "089750030X"
},
{
"title": "Ninja 1: Spirit of the Shadow Warrior ",
"asin": "0897500733"
},
{
"title": "Ninja 2: Warrior Ways of Enlightenment",
"asin": "0897500776"
},
{
"title": "Ninja 3: Warrior Path of Togakure",
"asin": "0897500903"
},
{
"title": "Ninja 4: Legacy of the Night Warrior",
"asin": "0897501020"
},
{
"title": "Ninja 5: Lore of the Shinobi Warrior",
"asin": "0897501233"
},
{
"title": "Ninja 6: Secret Scrolls of the Warrior Sage",
"asin": "089750156X"
},
{
"title": "The Book of Ninja: The Bansenshukai",
"asin": "1780284934"
},
{
"title": "True Path of the Ninja",
"asin": "4805314397"
},
{
"title": "The Ninpiden - True Ninja Traditions",
"asin": "1604818301"
},
{
"title": "The Secret Traditions of the Shinobi",
"asin": "1583944354"
},
{
"title": "Kokoro no Katachi: The Image of the Heart",
"asin": "B07MBFL8NB"
},
{
"title": "The Art of Life and Death: Lessons in Budo from a Ninja Master",
"asin": "080484867X"
},
{
"title": "The Ninja and Their Secret Fighting Art",
"asin": "B006OO487C"
},
{
"title": "The Mystic Arts Of The Ninja",
"asin": "0809253437"
},
{
"title": "Ninja: Unmasking the Myth",
"asin": "B07D56RNXP"
},
{
"title": "Ninja AD 1460-1650",
"asin": "1841765252"
},
{
"title": "The Art of War",
"asin": "081331951X"
},
{
"title": "The Book of Five Rings",
"asin": "1935785974"
},
{
"title": "Hagakure",
"asin": "4805311983"
},
{
"title": "The Life-Giving Sword",
"asin": "1590309901"
},
{
"title": "Bushido",
"asin": "4805314893"
},
{
"title": "Engaging Japanese Philosophy",
"asin": "0824874072"
},
{
"title": "The Craft of the Japanese Sword",
"asin": "087011798X"
},
{
"title": "Meifu Shinkage Ryû: Fundô kusarijutsu - Shurikenjutsu",
"cover": "/assets/images/recommendations/books/meifu-shinkage-ryu-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70183"
},
{
"title": "Takamatsu Toshitsugu: The Last Shinobi",
"cover": "/assets/images/recommendations/books/takamatsu-toshitsugu-en.jpg",
"link": "https://www.tengu-publishing.de/en/index.php?site=artikel&artikelnr=70002"
},
{
"title": "Ninja Attack!",
"asin": "4805312181"
},
{
"title": "Bruce Lee: The Art of Expressing the Human Body",
"asin": "0804831297"
},
{
"title": "Dao De Jing",
"asin": "0520242211"
},
{
"title": "The Book of Chuang Tzu",
"asin": "014045537X"
},
{
"title": "Tao: The Watercourse Way",
"asin": "0394733118"
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -3,104 +3,87 @@ const movies = require('./movies.json');
const glossary = require('./glossary.json');
module.exports = {
homepage: {
intro:
'This is 木隠 (jap. *kogakure*, <q>Hidden behind leaves and trees.</q>), a collection of texts about Ninja and Ninjutsu that I started in 1999. Over the years more and more pages, pictures and illustrations were added until finally this book came out of it.',
tocHeadline: 'Table of Contents',
},
downloads: {
intro:
'Here you can download the online book as an eBook, 3D models of weapons and tools, and a ninja font.',
font: {
headline: 'Iga Ninja Font',
text:
'Many years ago, the Iga Ninja Museum published an image of an Iga Ninja cipher on their website. I developed a font from it, which can be downloaded here.',
more: 'View the Font on GitHub',
download: 'Download Font',
},
cgi: {
headline: '3D Models of Ninja Weapons and Tools',
text:
'For the first version of this website I created 3D models of weapons and tools, which I later converted to `stl` format. The models can be viewed directly in the browser on GitHub and viewed from all sides.',
more: 'View Weapons and Tools on GitHub',
},
book: {
headline: 'The Book',
text:
'The content of this online book is available for **free** download as an eBook.',
pdf: 'PDF',
epub: 'EPUB',
mobi: 'MOBI',
},
},
colophon: {
intro:
'This is 木隠. Since 1999 you can read articles, collections of texts and translations on topics related to the Japanese shadow warriors and spies, the Ninja, and their martial art Ninjutsu.\n\nThe idea for this was developed and implemented by Stefan Imhoff, a designer, developer and martial artist from Wolfsburg (today from Hamburg).',
meaning: {
headline: 'What Does 木隠 Mean?',
text:
'The name *kogakure* (木隠) is Japanese and literally means translated something like <q>Hidden behind leaves and trees</q>.\n\nI got the ideas for this name in reference to the book of the Samurai Tsunetomo Yamamoto, <cite>Hagakure</cite> (<q>Hidden under leaves</q>) and the oldest school in the Bujinkan, <cite>Togakure</cite> (<q>Hidden behind a door</q>).',
},
why: {
headline: 'Why Does This Book Exist?',
text:
'Since the beginning of the 90s, I probably first came across Ninjutsu through the Teenage Mutant Hero Turtles, and I have been interested in the Ninja and their world of ideas.\n\nAt that time, the Bujinkan was hard to find in Germany, and it was almost impossible to find a training opportunity. The specialist literature that was available was also more than poor.\n\nIn the search for knowledge, knowledge and information, a collection of notes accumulated over time, which was processed in this book.\n\nThis book does not claim to be complete, nor does it to be absolute, verifiable, historical evidence. It should help all *bugeisha* (warriors) to learn more about the wisdom of this thousand-year-old art.',
},
contact: {
headline: 'Contact',
text:
'You can contact me via my email address or various social media platforms on my <a href="https://www.stefanimhoff.de/about/#contact" rel="nofollow noopener noreferrer external" target="_blank">website</a>.\n\nPlease check first if your question has already been answered in the FAQ. I dont always have the time to respond to every question, but I promise Ill read every message!',
},
faq: {
headline: 'FAQ',
subheadline1: 'Where Can I Train?',
text1:
'The best way to find a Dōjō for Bujinkan Budō Taijutsu is to use a search engine to search for **Bujinkan** in connection with a city near you. But certainly there will not be as good coverage with Dōjō as in Judo or Karate. There is a very extensive [dojo list](http://www.bujinkan-deutschland.de/dojoliste-bujinkan.html) on the Bujinkai site.\n\nI *dont* have my own Dōjō and offer *no* training. Kogakure is not a martial art style, it is the name of the book.',
subheadline2: 'What Books Are There?',
text2:
'The selection of specialist books on Ninja and Ninjutsu is very large. However, most of it is in Japanese or English. Its best to just take a look at my [recommendations](/en/recommendations/).',
subheadline3: 'Which Books Can You Recommend Me?',
text3:
'First I recommend the books of Dr. *Masaaki Hatsumi*. *Andrew Adams* book <cite>Ninja</cite> is good to get an overview. *Stephen K. Hayes* has a lot of philosophical aspects in his books (e.g. Tendai, Shugendō, Mikkyō), since this interests him personally, he has even been appointed a monk of Tendai, just like Takamatsu.',
subheadline4: 'Where Can I Get Books on Ninjutsu?',
text4:
'Ever since book retailers such as [Amazon](https://www.amazon.com/?&_encoding=UTF8&tag=kogakure-20&linkCode=ur2&linkId=98ada809b8f08559fbbd5bd54df01f2e&camp=1789&creative=9325) exist, it should no longer be a problem to get books from abroad. On the [recommendations](/en/recommendations/) page I have compiled a list of books and films that I can recommend.',
subheadline5: 'I Want to Link to a Page. What Is to Be Considered?',
text5:
'It is generally prohibited to implement the link in a frame in which the website is no longer recognizable as the author. You are welcome to link to any page in this domain.\n\nImages, photos and other media may *not be directly linked*, but may be downloaded and placed on your own servers (as long as the rules of the [Creative Commons License](http://creativecommons.org/licenses/by-nc/3.0/deed.de) are complied with).',
subheadline6: 'Are Translations of the Texts Allowed?',
text6:
'Translations of the texts into other languages are generally permitted as long as the text is accompanied by a reference to the source. Please send me a link where the translation will be published. If you want to translate the website in a different language and hosted on its original location, please contact me.\n\nCommercial use in any form is only possible with written permission.',
},
donation: {
headline: 'Donations',
text:
'This book is free, ad-free and has cost me many hundreds of hours of work over time.\n\nIf you enjoyed it, I welcome praise and recognition. You can support me by buying something from my [recommendations](/en/recommendations/) or by making a small donation.',
paypal: 'Donate With PayPal',
},
tech: {
headline: 'Technical Information',
text:
'Anyone who has made it this far is probably also interested in the technical details on this page.\n\nAll work was created on an [Apple](https://www.apple.com/de/) computer, the graphics were designed with [Affinity Photo](https://affinity.serif.com/de/photo/), and [Affinity Designer](https://affinity.serif.com/de/designer/), all templates and code segments [Neovim](https://neovim.io/) were written by hand and versioned with [Git](https://git-scm.com/). The pages are generated with [Eleventy](https://www.11ty.dev/) (11ty) and the development environment and deployment are automated with [Gulp.js](https://gulpjs.com/).\n\nThe source code of this website is available to everyone on [GitHub](https://github.com/kogakure/website-11ty-kogakure.de). Errors, improvements or additions can be reported there as [Issue](https://github.com/kogakure/website-11ty-kogakure.de/issues) or by email.',
},
},
recommendations: {
intro: `I recommend **${books.length}** books and **${movies.length}** movies about Ninja, Samurai, Bujutsu, martial arts, philosophy and Asia. Not all books are always available, some can only be found in antiquarian bookshops. Likewise, some of the films are hard to find.`,
books: {
headline: 'Books',
},
movies: {
headline: 'Movies',
},
},
glossary: {
intro: `This glossary contains **${glossary.length}** entries related to Ninjutsu, martial arts, and Japanese history. All words are Japanese unless otherwise noted.`,
chinese: 'Chinese',
sanskrit: 'Sanskrit',
},
homeLink: 'Back to Homepage',
themeToggle: 'Switch color theme',
upLink: 'Back to top',
creditAuthor: 'Text:',
creditTranslator: 'Translation:',
homepage: {
intro: 'This is 木隠 (jap. *kogakure*, <q>Hidden behind leaves and trees.</q>), a collection of texts about Ninja and Ninjutsu that I started in 1999. Over the years more and more pages, pictures and illustrations were added until finally this book came out of it.',
tocHeadline: 'Table of Contents',
},
downloads: {
intro: 'Here you can download the online book as an eBook, 3D models of weapons and tools, and a ninja font.',
font: {
headline: 'Iga Ninja Font',
text: 'Many years ago, the Iga Ninja Museum published an image of an Iga Ninja cipher on their website. I developed a font from it, which can be downloaded here.',
more: 'View the Font on GitHub',
download: 'Download Font',
},
cgi: {
headline: '3D Models of Ninja Weapons and Tools',
text: 'For the first version of this website I created 3D models of weapons and tools, which I later converted to `stl` format. The models can be viewed directly in the browser on GitHub and viewed from all sides.',
more: 'View Weapons and Tools on GitHub',
},
book: {
headline: 'The Book',
text: 'The content of this online book is available for **free** download as an eBook.',
pdf: 'PDF',
epub: 'EPUB',
mobi: 'MOBI',
},
},
colophon: {
intro: 'This is 木隠. Since 1999 you can read articles, collections of texts and translations on topics related to the Japanese shadow warriors and spies, the Ninja, and their martial art Ninjutsu.\n\nThe idea for this was developed and implemented by Stefan Imhoff, a designer, developer and martial artist from Wolfsburg (today from Hamburg).',
meaning: {
headline: 'What Does 木隠 Mean?',
text: 'The name *kogakure* (木隠) is Japanese and literally means translated something like <q>Hidden behind leaves and trees</q>.\n\nI got the ideas for this name in reference to the book of the Samurai Tsunetomo Yamamoto, <cite>Hagakure</cite> (<q>Hidden under leaves</q>) and the oldest school in the Bujinkan, <cite>Togakure</cite> (<q>Hidden behind a door</q>).',
},
why: {
headline: 'Why Does This Book Exist?',
text: 'Since the beginning of the 90s, I probably first came across Ninjutsu through the Teenage Mutant Hero Turtles, and I have been interested in the Ninja and their world of ideas.\n\nAt that time, the Bujinkan was hard to find in Germany, and it was almost impossible to find a training opportunity. The specialist literature that was available was also more than poor.\n\nIn the search for knowledge, knowledge and information, a collection of notes accumulated over time, which was processed in this book.\n\nThis book does not claim to be complete, nor does it to be absolute, verifiable, historical evidence. It should help all *bugeisha* (warriors) to learn more about the wisdom of this thousand-year-old art.',
},
contact: {
headline: 'Contact',
text: 'You can contact me via my email address or various social media platforms on my <a href="https://www.stefanimhoff.de/about/#contact" rel="nofollow noopener noreferrer external" target="_blank">website</a>.\n\nPlease check first if your question has already been answered in the FAQ. I dont always have the time to respond to every question, but I promise Ill read every message!',
},
faq: {
headline: 'FAQ',
subheadline1: 'Where Can I Train?',
text1: 'The best way to find a Dōjō for Bujinkan Budō Taijutsu is to use a search engine to search for **Bujinkan** in connection with a city near you. But certainly there will not be as good coverage with Dōjō as in Judo or Karate. There is a very extensive [dojo list](http://www.bujinkan-deutschland.de/dojoliste-bujinkan.html) on the Bujinkai site.\n\nI *dont* have my own Dōjō and offer *no* training. Kogakure is not a martial art style, it is the name of the book.',
subheadline2: 'What Books Are There?',
text2: 'The selection of specialist books on Ninja and Ninjutsu is very large. However, most of it is in Japanese or English. Its best to just take a look at my [recommendations](/en/recommendations/).',
subheadline3: 'Which Books Can You Recommend Me?',
text3: 'First I recommend the books of Dr. *Masaaki Hatsumi*. *Andrew Adams* book <cite>Ninja</cite> is good to get an overview. *Stephen K. Hayes* has a lot of philosophical aspects in his books (e.g. Tendai, Shugendō, Mikkyō), since this interests him personally, he has even been appointed a monk of Tendai, just like Takamatsu.',
subheadline4: 'Where Can I Get Books on Ninjutsu?',
text4: 'Ever since book retailers such as [Amazon](https://www.amazon.com/?&_encoding=UTF8&tag=kogakure-20&linkCode=ur2&linkId=98ada809b8f08559fbbd5bd54df01f2e&camp=1789&creative=9325) exist, it should no longer be a problem to get books from abroad. On the [recommendations](/en/recommendations/) page I have compiled a list of books and films that I can recommend.',
subheadline5: 'I Want to Link to a Page. What Is to Be Considered?',
text5: 'It is generally prohibited to implement the link in a frame in which the website is no longer recognizable as the author. You are welcome to link to any page in this domain.\n\nImages, photos and other media may *not be directly linked*, but may be downloaded and placed on your own servers (as long as the rules of the [Creative Commons License](http://creativecommons.org/licenses/by-nc/3.0/deed.de) are complied with).',
subheadline6: 'Are Translations of the Texts Allowed?',
text6: 'Translations of the texts into other languages are generally permitted as long as the text is accompanied by a reference to the source. Please send me a link where the translation will be published. If you want to translate the website in a different language and hosted on its original location, please contact me.\n\nCommercial use in any form is only possible with written permission.',
},
donation: {
headline: 'Donations',
text: 'This book is free, ad-free and has cost me many hundreds of hours of work over time.\n\nIf you enjoyed it, I welcome praise and recognition. You can support me by buying something from my [recommendations](/en/recommendations/) or by making a small donation.',
paypal: 'Donate With PayPal',
},
tech: {
headline: 'Technical Information',
text: 'Anyone who has made it this far is probably also interested in the technical details on this page.\n\nAll work was created on an [Apple](https://www.apple.com/de/) computer, the graphics were designed with [Affinity Photo](https://affinity.serif.com/de/photo/), and [Affinity Designer](https://affinity.serif.com/de/designer/), all templates and code segments [Neovim](https://neovim.io/) were written by hand and versioned with [Git](https://git-scm.com/). The pages are generated with [Eleventy](https://www.11ty.dev/) (11ty) and the development environment and deployment are automated with [Gulp.js](https://gulpjs.com/).\n\nThe source code of this website is available to everyone on [GitHub](https://github.com/kogakure/website-11ty-kogakure.de). Errors, improvements or additions can be reported there as [Issue](https://github.com/kogakure/website-11ty-kogakure.de/issues) or by email.',
},
},
recommendations: {
intro: `I recommend **${books.length}** books and **${movies.length}** movies about Ninja, Samurai, Bujutsu, martial arts, philosophy and Asia. Not all books are always available, some can only be found in antiquarian bookshops. Likewise, some of the films are hard to find.`,
books: {
headline: 'Books',
},
movies: {
headline: 'Movies',
},
},
glossary: {
intro: `This glossary contains **${glossary.length}** entries related to Ninjutsu, martial arts, and Japanese history. All words are Japanese unless otherwise noted.`,
chinese: 'Chinese',
sanskrit: 'Sanskrit',
},
homeLink: 'Back to Homepage',
themeToggle: 'Switch color theme',
upLink: 'Back to top',
creditAuthor: 'Text:',
creditTranslator: 'Translation:',
};

View File

@@ -1,144 +1,144 @@
[
{
"title": "Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-1.jpg",
"imdb": "tt0164882"
},
{
"title": "Zoku Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-2.jpg",
"imdb": "tt0200310"
},
{
"title": "Shin Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-3.jpg",
"imdb": "tt0187501"
},
{
"title": "Shinobi no Mono: Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-4.jpg",
"imdb": "tt0224098"
},
{
"title": "Shinobi no Mono: Zoku Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-5.jpg",
"imdb": "tt0199023"
},
{
"title": "Shinobi no Mono: Iga-yashiki",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-6.jpg",
"imdb": "tt0224097"
},
{
"title": "Shinobi no Mono: Shin kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-7.jpg",
"imdb": "tt0058592"
},
{
"title": "Shinsho: Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-8.jpg",
"imdb": "tt0201924"
},
{
"title": "Kurosawa: The Samurai Collection",
"asin": "B00LA1ZV52"
},
{
"title": "Seven Samurai",
"originalTitle": "Shichinin no samurai",
"asin": "B003KGBISY",
"imdb": "tt0047478"
},
{
"title": "Throne of Blood",
"originalTitle": "Kumonosu-jô",
"asin": "B00XVHJWEE",
"imdb": "tt0050613"
},
{
"title": "The Hidden Fortress",
"originalTitle": "Kakushi-toride no san-akunin",
"asin": "B019WMTY58",
"imdb": "tt0051808"
},
{
"title": "Yojimbo",
"originalTitle": "Yôjinbô",
"asin": "B00319HT9W",
"imdb": "tt0055630"
},
{
"title": "Sanjuro",
"originalTitle": "Tsubaki Sanjûrô",
"asin": "B00319HT9M",
"imdb": "tt0056443"
},
{
"title": "Rashomon",
"asin": "B008Y5OWO8",
"imdb": "tt0042876"
},
{
"title": "Kagemusha",
"originalTitle": "Kagemusha",
"asin": "B002AFX52S",
"imdb": "tt0080979"
},
{
"title": "Ran",
"asin": "B000BB14YY",
"imdb": "tt0089881"
},
{
"title": "The Last Samurai",
"originalTitle": "The Last Samurai",
"asin": "B000JUB7LW",
"imdb": "tt0325710"
},
{
"title": "Lady Snowblood",
"originalTitle": "Shurayukihime",
"asin": "B016R7C3AE",
"imdb": "tt0158714"
},
{
"title": "Zatoichi: The Blind Swordsman",
"originalTitle": "Zatôichi",
"asin": "B01H66WAPS",
"imdb": "tt0363226"
},
{
"title": "The Twilight Samurai",
"originalTitle": "Tasogare Seibei",
"asin": "B00AVOLLLW",
"imdb": "tt0351817"
},
{
"title": "Samurai Fiction",
"originalTitle": "SF: Episode One",
"asin": "B00009V7OB",
"imdb": "tt0170544"
},
{
"title": "Lone Wolf & Cub",
"originalTitle": "Kozure ôkami",
"asin": "B008H1Q3NW"
},
{
"title": "Shogun",
"cover": "/assets/images/recommendations/movies/shogun-en.jpg",
"asin": "B00UGPODXY",
"imdb": "tt0080274"
},
{
"title": "Hero",
"originalTitle": "Ying xiong",
"asin": "B0002Y69LI",
"imdb": "tt0299977"
},
{
"title": "Ghost Dog: The Way of the Samurai",
"asin": "B08G6RSNM6",
"imdb": "tt0165798"
}
{
"title": "Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-1.jpg",
"imdb": "tt0164882"
},
{
"title": "Zoku Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-2.jpg",
"imdb": "tt0200310"
},
{
"title": "Shin Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-3.jpg",
"imdb": "tt0187501"
},
{
"title": "Shinobi no Mono: Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-4.jpg",
"imdb": "tt0224098"
},
{
"title": "Shinobi no Mono: Zoku Kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-5.jpg",
"imdb": "tt0199023"
},
{
"title": "Shinobi no Mono: Iga-yashiki",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-6.jpg",
"imdb": "tt0224097"
},
{
"title": "Shinobi no Mono: Shin kirigakure Saizo",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-7.jpg",
"imdb": "tt0058592"
},
{
"title": "Shinsho: Shinobi no Mono",
"cover": "/assets/images/recommendations/movies/shinobi-no-mono-8.jpg",
"imdb": "tt0201924"
},
{
"title": "Kurosawa: The Samurai Collection",
"asin": "B00LA1ZV52"
},
{
"title": "Seven Samurai",
"originalTitle": "Shichinin no samurai",
"asin": "B003KGBISY",
"imdb": "tt0047478"
},
{
"title": "Throne of Blood",
"originalTitle": "Kumonosu-jô",
"asin": "B00XVHJWEE",
"imdb": "tt0050613"
},
{
"title": "The Hidden Fortress",
"originalTitle": "Kakushi-toride no san-akunin",
"asin": "B019WMTY58",
"imdb": "tt0051808"
},
{
"title": "Yojimbo",
"originalTitle": "Yôjinbô",
"asin": "B00319HT9W",
"imdb": "tt0055630"
},
{
"title": "Sanjuro",
"originalTitle": "Tsubaki Sanjûrô",
"asin": "B00319HT9M",
"imdb": "tt0056443"
},
{
"title": "Rashomon",
"asin": "B008Y5OWO8",
"imdb": "tt0042876"
},
{
"title": "Kagemusha",
"originalTitle": "Kagemusha",
"asin": "B002AFX52S",
"imdb": "tt0080979"
},
{
"title": "Ran",
"asin": "B000BB14YY",
"imdb": "tt0089881"
},
{
"title": "The Last Samurai",
"originalTitle": "The Last Samurai",
"asin": "B000JUB7LW",
"imdb": "tt0325710"
},
{
"title": "Lady Snowblood",
"originalTitle": "Shurayukihime",
"asin": "B016R7C3AE",
"imdb": "tt0158714"
},
{
"title": "Zatoichi: The Blind Swordsman",
"originalTitle": "Zatôichi",
"asin": "B01H66WAPS",
"imdb": "tt0363226"
},
{
"title": "The Twilight Samurai",
"originalTitle": "Tasogare Seibei",
"asin": "B00AVOLLLW",
"imdb": "tt0351817"
},
{
"title": "Samurai Fiction",
"originalTitle": "SF: Episode One",
"asin": "B00009V7OB",
"imdb": "tt0170544"
},
{
"title": "Lone Wolf & Cub",
"originalTitle": "Kozure ôkami",
"asin": "B008H1Q3NW"
},
{
"title": "Shogun",
"cover": "/assets/images/recommendations/movies/shogun-en.jpg",
"asin": "B00UGPODXY",
"imdb": "tt0080274"
},
{
"title": "Hero",
"originalTitle": "Ying xiong",
"asin": "B0002Y69LI",
"imdb": "tt0299977"
},
{
"title": "Ghost Dog: The Way of the Samurai",
"asin": "B08G6RSNM6",
"imdb": "tt0165798"
}
]

View File

@@ -1,10 +1,10 @@
[
{
"title": "Preface",
"slug": "preface"
},
{
"title": "Introduction",
"slug": "ninjutsu"
}
{
"title": "Preface",
"slug": "preface"
},
{
"title": "Introduction",
"slug": "ninjutsu"
}
]

View File

@@ -1,347 +1,347 @@
[
{
"title": "History",
"items": [
{
"title": "Origins of Ninjutsu",
"slug": "origins-of-ninjutsu"
},
{
"title": "Emergence of the Ryū",
"slug": "emergence-of-the-ryu"
},
{
"title": "Famous Ninja",
"slug": "famous-ninja"
},
{
"title": "Ninja Biographies",
"slug": "ninja-biographies"
},
{
"title": "Iga-Ryū",
"slug": "iga-ryu"
},
{
"title": "Kōga-Ryū",
"slug": "koga-ryu"
},
{
"title": "Iga no Ran",
"slug": "iga-no-ran"
},
{
"title": "Invasion of Iga",
"slug": "invasion-of-iga"
},
{
"title": "Demise",
"slug": "demise"
},
{
"title": "Modern History",
"slug": "modern-history"
}
]
},
{
"title": "Organization & Training",
"items": [
{
"title": "Organization of the Ryū",
"slug": "organization-of-the-ryu"
},
{
"title": "Training of the Ninja",
"slug": "training-of-the-ninja"
},
{
"title": "Kunoichi",
"slug": "kunoichi"
},
{
"title": "Bansenshūkai",
"slug": "bansenshukai"
}
]
},
{
"title": "Body Training",
"items": [
{
"title": "Taijutsu",
"slug": "taijutsu"
},
{
"title": "Combat Rules",
"slug": "combat-rules"
},
{
"title": "Combat Factors",
"slug": "combat-factors"
},
{
"title": "Jūnantaisō",
"slug": "junan-taiso"
},
{
"title": "Training Factors",
"slug": "training-factors"
},
{
"title": "Body Weapons",
"slug": "body-weapons"
},
{
"title": "Toughening Up",
"slug": "toughening-up"
},
{
"title": "Atemite",
"slug": "atemi-te"
},
{
"title": "Kamae",
"slug": "kamae"
},
{
"title": "Ukemi",
"slug": "ukemi"
},
{
"title": "Shinobi Iri",
"slug": "shinobi-iri"
}
]
},
{
"title": "Weapons & Tools",
"items": [
{
"title": "Weapons",
"slug": "weapons"
},
{
"title": "Water Tools",
"slug": "water-tools"
},
{
"title": "Burglary Tools",
"slug": "burglary-tools"
},
{
"title": "Climbing Tools",
"slug": "climbing-tools"
},
{
"title": "Fire Tools",
"slug": "fire-tools"
},
{
"title": "Ninja Clothing",
"slug": "ninja-clothing"
},
{
"title": "Miscellaneous Equipment",
"slug": "miscellaneous-equipment"
},
{
"title": "Inrō Travel Pharmacy",
"slug": "inro"
}
]
},
{
"title": "Mental Powers",
"items": [
{
"title": "Mikkyō",
"slug": "mikkyo"
},
{
"title": "Sanmitsu",
"slug": "sanmitsu"
},
{
"title": "Kuji-in",
"slug": "kuji-in"
},
{
"title": "Godai",
"slug": "godai"
},
{
"title": "Gogyō",
"slug": "gogyo"
},
{
"title": "Tenchijin",
"slug": "tenchijin"
},
{
"title": "Consciousness and Spirit",
"slug": "consciousness-and-spirit"
},
{
"title": "The Seventh Sense",
"slug": "the-seventh-sense"
},
{
"title": "Enlightenment",
"slug": "enlightenment"
},
{
"title": "Daoism",
"slug": "daoism"
}
]
},
{
"title": "Strategy & Tactics",
"items": [
{
"title": "Goton pō",
"slug": "gotonpo"
},
{
"title": "Onshin jutsu",
"slug": "onshinjutsu"
},
{
"title": "Shichi hō de",
"slug": "shichi-ho-de"
},
{
"title": "Chōhō",
"slug": "choho"
},
{
"title": "Heihō",
"slug": "heiho"
},
{
"title": "Bōryaku",
"slug": "bo-ryaku"
},
{
"title": "Tōiri",
"slug": "toiri"
},
{
"title": "Chi kai ri",
"slug": "chikairi"
}
]
},
{
"title": "The Legacy of the Ninja",
"items": [
{
"title": "Takamatsu Toshitsugu",
"slug": "takamatsu-toshitsugu"
},
{
"title": "Hatsumi Masaaki",
"slug": "hatsumi-masaaki"
},
{
"title": "Bujinkan",
"slug": "bujinkan"
},
{
"title": "Guidelines of Bujinkan",
"slug": "guidelines-of-bujinkan"
},
{
"title": "Togakure-Ryū",
"slug": "togakure-ryu"
},
{
"title": "Gyokko-Ryū",
"slug": "gyokko-ryu"
},
{
"title": "Kukishinden-Ryū",
"slug": "kukishinden-ryu"
},
{
"title": "Shinden-fudo-Ryū",
"slug": "shinden-fudo-ryu"
},
{
"title": "Gyokushin-Ryū",
"slug": "gyokushin-ryu"
},
{
"title": "Koto-Ryū",
"slug": "koto-ryu"
},
{
"title": "Takagi-yoshin-Ryū",
"slug": "takagi-yoshin-ryu"
},
{
"title": "Gikan-Ryū",
"slug": "gikan-ryu"
},
{
"title": "Kumogakure-Ryū",
"slug": "kumogakure-ryu"
}
]
},
{
"title": "Rules & Philosophy",
"items": [
{
"title": "Essence of Ninjutsu",
"slug": "essence-of-ninjutsu"
},
{
"title": "The Rules of the Ninja",
"slug": "the-rules-of-the-ninja"
},
{
"title": "The 5 Commandments of the Ninja",
"slug": "the-5-commandments-of-the-ninja"
},
{
"title": "18 Training Levels",
"slug": "18-training-levels"
},
{
"title": "Ninpō Sanjūrokkei",
"slug": "ninpo-sanjurokkei"
},
{
"title": "Ninja no Hachimon",
"slug": "ninja-no-hachimon"
}
]
},
{
"title": "Appendix",
"items": [
{
"title": "Chronology",
"slug": "chronology"
},
{
"title": "Downloads",
"slug": "downloads"
},
{
"title": "Recommendations",
"slug": "recommendations"
},
{
"title": "Glossary",
"slug": "glossary"
},
{
"title": "Colophon",
"slug": "colophon"
}
]
}
{
"title": "History",
"items": [
{
"title": "Origins of Ninjutsu",
"slug": "origins-of-ninjutsu"
},
{
"title": "Emergence of the Ryū",
"slug": "emergence-of-the-ryu"
},
{
"title": "Famous Ninja",
"slug": "famous-ninja"
},
{
"title": "Ninja Biographies",
"slug": "ninja-biographies"
},
{
"title": "Iga-Ryū",
"slug": "iga-ryu"
},
{
"title": "Kōga-Ryū",
"slug": "koga-ryu"
},
{
"title": "Iga no Ran",
"slug": "iga-no-ran"
},
{
"title": "Invasion of Iga",
"slug": "invasion-of-iga"
},
{
"title": "Demise",
"slug": "demise"
},
{
"title": "Modern History",
"slug": "modern-history"
}
]
},
{
"title": "Organization & Training",
"items": [
{
"title": "Organization of the Ryū",
"slug": "organization-of-the-ryu"
},
{
"title": "Training of the Ninja",
"slug": "training-of-the-ninja"
},
{
"title": "Kunoichi",
"slug": "kunoichi"
},
{
"title": "Bansenshūkai",
"slug": "bansenshukai"
}
]
},
{
"title": "Body Training",
"items": [
{
"title": "Taijutsu",
"slug": "taijutsu"
},
{
"title": "Combat Rules",
"slug": "combat-rules"
},
{
"title": "Combat Factors",
"slug": "combat-factors"
},
{
"title": "Jūnantaisō",
"slug": "junan-taiso"
},
{
"title": "Training Factors",
"slug": "training-factors"
},
{
"title": "Body Weapons",
"slug": "body-weapons"
},
{
"title": "Toughening Up",
"slug": "toughening-up"
},
{
"title": "Atemite",
"slug": "atemi-te"
},
{
"title": "Kamae",
"slug": "kamae"
},
{
"title": "Ukemi",
"slug": "ukemi"
},
{
"title": "Shinobi Iri",
"slug": "shinobi-iri"
}
]
},
{
"title": "Weapons & Tools",
"items": [
{
"title": "Weapons",
"slug": "weapons"
},
{
"title": "Water Tools",
"slug": "water-tools"
},
{
"title": "Burglary Tools",
"slug": "burglary-tools"
},
{
"title": "Climbing Tools",
"slug": "climbing-tools"
},
{
"title": "Fire Tools",
"slug": "fire-tools"
},
{
"title": "Ninja Clothing",
"slug": "ninja-clothing"
},
{
"title": "Miscellaneous Equipment",
"slug": "miscellaneous-equipment"
},
{
"title": "Inrō Travel Pharmacy",
"slug": "inro"
}
]
},
{
"title": "Mental Powers",
"items": [
{
"title": "Mikkyō",
"slug": "mikkyo"
},
{
"title": "Sanmitsu",
"slug": "sanmitsu"
},
{
"title": "Kuji-in",
"slug": "kuji-in"
},
{
"title": "Godai",
"slug": "godai"
},
{
"title": "Gogyō",
"slug": "gogyo"
},
{
"title": "Tenchijin",
"slug": "tenchijin"
},
{
"title": "Consciousness and Spirit",
"slug": "consciousness-and-spirit"
},
{
"title": "The Seventh Sense",
"slug": "the-seventh-sense"
},
{
"title": "Enlightenment",
"slug": "enlightenment"
},
{
"title": "Daoism",
"slug": "daoism"
}
]
},
{
"title": "Strategy & Tactics",
"items": [
{
"title": "Goton pō",
"slug": "gotonpo"
},
{
"title": "Onshin jutsu",
"slug": "onshinjutsu"
},
{
"title": "Shichi hō de",
"slug": "shichi-ho-de"
},
{
"title": "Chōhō",
"slug": "choho"
},
{
"title": "Heihō",
"slug": "heiho"
},
{
"title": "Bōryaku",
"slug": "bo-ryaku"
},
{
"title": "Tōiri",
"slug": "toiri"
},
{
"title": "Chi kai ri",
"slug": "chikairi"
}
]
},
{
"title": "The Legacy of the Ninja",
"items": [
{
"title": "Takamatsu Toshitsugu",
"slug": "takamatsu-toshitsugu"
},
{
"title": "Hatsumi Masaaki",
"slug": "hatsumi-masaaki"
},
{
"title": "Bujinkan",
"slug": "bujinkan"
},
{
"title": "Guidelines of Bujinkan",
"slug": "guidelines-of-bujinkan"
},
{
"title": "Togakure-Ryū",
"slug": "togakure-ryu"
},
{
"title": "Gyokko-Ryū",
"slug": "gyokko-ryu"
},
{
"title": "Kukishinden-Ryū",
"slug": "kukishinden-ryu"
},
{
"title": "Shinden-fudo-Ryū",
"slug": "shinden-fudo-ryu"
},
{
"title": "Gyokushin-Ryū",
"slug": "gyokushin-ryu"
},
{
"title": "Koto-Ryū",
"slug": "koto-ryu"
},
{
"title": "Takagi-yoshin-Ryū",
"slug": "takagi-yoshin-ryu"
},
{
"title": "Gikan-Ryū",
"slug": "gikan-ryu"
},
{
"title": "Kumogakure-Ryū",
"slug": "kumogakure-ryu"
}
]
},
{
"title": "Rules & Philosophy",
"items": [
{
"title": "Essence of Ninjutsu",
"slug": "essence-of-ninjutsu"
},
{
"title": "The Rules of the Ninja",
"slug": "the-rules-of-the-ninja"
},
{
"title": "The 5 Commandments of the Ninja",
"slug": "the-5-commandments-of-the-ninja"
},
{
"title": "18 Training Levels",
"slug": "18-training-levels"
},
{
"title": "Ninpō Sanjūrokkei",
"slug": "ninpo-sanjurokkei"
},
{
"title": "Ninja no Hachimon",
"slug": "ninja-no-hachimon"
}
]
},
{
"title": "Appendix",
"items": [
{
"title": "Chronology",
"slug": "chronology"
},
{
"title": "Downloads",
"slug": "downloads"
},
{
"title": "Recommendations",
"slug": "recommendations"
},
{
"title": "Glossary",
"slug": "glossary"
},
{
"title": "Colophon",
"slug": "colophon"
}
]
}
]

View File

@@ -1,4 +1,4 @@
<div class="colophon-contact" {{ site.animation }}>
<h2>{{ i18n[locale].colophon.contact.headline }}</h2>
{{ i18n[locale].colophon.contact.text | markdown | safe }}
<h2>{{ i18n[locale].colophon.contact.headline }}</h2>
{{ i18n[locale].colophon.contact.text | markdown | safe }}
</div>

View File

@@ -1,60 +1,60 @@
<div class="colophon-donation" {{ site.animation }}>
<h2>
<span class="colophon-donation-heart">♥︎</span>
{{ i18n[locale].colophon.donation.headline }}
</h2>
{{ i18n[locale].colophon.donation.text | markdown | safe }}
<ul class="colophon-donation-list">
<li class="colophon-donation-list-item">
<svg
class="colophon-donation-icon"
title="Bitcoin"
aria-hidden="true"
viewBox="0 0 24 24"
width="1em"
height="1em"
>
<use xlink:href="#bitcoin"></use>
</svg>
<pre class="colophon-dontation-crypto-hash">{{ site.bitcoin }}</pre
>
</li>
<li class="colophon-donation-list-item">
<svg
class="colophon-donation-icon"
title="Ethereum"
aria-hidden="true"
viewBox="0 0 24 24"
width="1em"
height="1em"
>
<use xlink:href="#ethereum"></use>
</svg>
<pre class="colophon-dontation-crypto-hash">{{ site.ethereum }}</pre
>
</li>
<li class="colophon-donation-list-item">
<a
href="https://www.paypal.me/kogakure/"
rel="nofollow noopener noreferrer external"
target="_blank"
>
<button
class="colophon-dontation-button"
type="button"
>
<svg
class="colophon-donation-icon"
aria-hidden="true"
viewBox="0 0 24 24"
width="1em"
height="1em"
>
<use xlink:href="#paypal"></use>
</svg>
{{ i18n[locale].colophon.donation.paypal }}
</button>
</a>
</li>
</ul>
<h2>
<span class="colophon-donation-heart">♥︎</span>
{{ i18n[locale].colophon.donation.headline }}
</h2>
{{ i18n[locale].colophon.donation.text | markdown | safe }}
<ul class="colophon-donation-list">
<li class="colophon-donation-list-item">
<svg
class="colophon-donation-icon"
title="Bitcoin"
aria-hidden="true"
viewBox="0 0 24 24"
width="1em"
height="1em"
>
<use xlink:href="#bitcoin"></use>
</svg>
<pre class="colophon-dontation-crypto-hash">{{ site.bitcoin }}</pre
>
</li>
<li class="colophon-donation-list-item">
<svg
class="colophon-donation-icon"
title="Ethereum"
aria-hidden="true"
viewBox="0 0 24 24"
width="1em"
height="1em"
>
<use xlink:href="#ethereum"></use>
</svg>
<pre class="colophon-dontation-crypto-hash">{{ site.ethereum }}</pre
>
</li>
<li class="colophon-donation-list-item">
<a
href="https://www.paypal.me/kogakure/"
rel="nofollow noopener noreferrer external"
target="_blank"
>
<button
class="colophon-dontation-button"
type="button"
>
<svg
class="colophon-donation-icon"
aria-hidden="true"
viewBox="0 0 24 24"
width="1em"
height="1em"
>
<use xlink:href="#paypal"></use>
</svg>
{{ i18n[locale].colophon.donation.paypal }}
</button>
</a>
</li>
</ul>
</div>

View File

@@ -1,29 +1,29 @@
<div class="colophon-faq">
<h2>{{ i18n[locale].colophon.faq.headline }}</h2>
<ul class="colophone-faq-list">
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline1 }}</h3>
{{ i18n[locale].colophon.faq.text1 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline2 }}</h3>
{{ i18n[locale].colophon.faq.text2 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline3 }}</h3>
{{ i18n[locale].colophon.faq.text3 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline4 }}</h3>
{{ i18n[locale].colophon.faq.text4 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline5 }}</h3>
{{ i18n[locale].colophon.faq.text5 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline6 }}</h3>
{{ i18n[locale].colophon.faq.text6 | markdown | safe }}
</li>
</ul>
<h2>{{ i18n[locale].colophon.faq.headline }}</h2>
<ul class="colophone-faq-list">
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline1 }}</h3>
{{ i18n[locale].colophon.faq.text1 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline2 }}</h3>
{{ i18n[locale].colophon.faq.text2 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline3 }}</h3>
{{ i18n[locale].colophon.faq.text3 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline4 }}</h3>
{{ i18n[locale].colophon.faq.text4 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline5 }}</h3>
{{ i18n[locale].colophon.faq.text5 | markdown | safe }}
</li>
<li class="colophon-faq-list-item" {{ site.animation }}>
<h3>{{ i18n[locale].colophon.faq.subheadline6 }}</h3>
{{ i18n[locale].colophon.faq.text6 | markdown | safe }}
</li>
</ul>
</div>

View File

@@ -1,4 +1,4 @@
<div class="colophon-intro" {{ site.animationDelay }}>
<h1 class="colphon-title">{{ title }}</h1>
{{ i18n[locale].colophon.intro | markdown | safe }}
<h1 class="colphon-title">{{ title }}</h1>
{{ i18n[locale].colophon.intro | markdown | safe }}
</div>

View File

@@ -1,4 +1,4 @@
<div class="colophon-meaning" {{ site.animation }}>
<h2>{{ i18n[locale].colophon.meaning.headline }}</h2>
{{ i18n[locale].colophon.meaning.text | markdown | safe }}
<h2>{{ i18n[locale].colophon.meaning.headline }}</h2>
{{ i18n[locale].colophon.meaning.text | markdown | safe }}
</div>

View File

@@ -1,4 +1,4 @@
<div class="colophon-tech" {{ site.animation }}>
<h2>{{ i18n[locale].colophon.tech.headline }}</h2>
{{ i18n[locale].colophon.tech.text | markdown | safe }}
<h2>{{ i18n[locale].colophon.tech.headline }}</h2>
{{ i18n[locale].colophon.tech.text | markdown | safe }}
</div>

View File

@@ -1,4 +1,4 @@
<div class="colophon-why" {{ site.animation }}>
<h2>{{ i18n[locale].colophon.why.headline }}</h2>
{{ i18n[locale].colophon.why.text | markdown | safe }}
<h2>{{ i18n[locale].colophon.why.headline }}</h2>
{{ i18n[locale].colophon.why.text | markdown | safe }}
</div>

View File

@@ -1,43 +1,44 @@
<article class="downloads-container rowgap">
<figure class="downloads-layout downloads-50-start" {{ site.animation }}>
<div class="image-shadow downloads-image-container">
<img src="/assets/images/downloads/ingo.jpg" alt=""/>
</div>
<figcaption>
<h2>{{ i18n[locale].downloads.font.headline }}<h2>
{{ i18n[locale].downloads.font.text | markdown | safe }}
<p>
{% more i18n[locale].downloads.font.more, "https://github.com/kogakure/font-ingo", true %}<br />
{% download i18n[locale].downloads.font.download, "/downloads/iga-ninja-font.zip" %}
</p>
</figcaption>
</figure>
<figure class="downloads-layout downloads-50-end" {{ site.animation }}>
<div class="image-shadow downloads-image-container">
<img src="/assets/images/downloads/ogama.jpg" alt=""/>
</div>
<figcaption>
<h2>{{ i18n[locale].downloads.cgi.headline }}</h2>
{{ i18n[locale].downloads.cgi.text | markdown | safe }}
<p>
{% more i18n[locale].downloads.cgi.more, "https://github.com/kogakure/3d-models-kogakure", true %}
</p>
</figcaption>
</figure>
{% if locale === "de" %}
<figure class="downloads-layout downloads-50-start" {{ site.animation }}>
<div class="image-shadow downloads-image-container">
<img src="/assets/images/chronology/gitbook-kogakure.jpg" alt=""/>
</div>
<figcaption>
<h2>{{ i18n[locale].downloads.book.headline }}</h2>
{{ i18n[locale].downloads.book.text | markdown | safe }}
<p>
{% download i18n[locale].downloads.book.pdf, "/downloads/book-kogakure.pdf", true %} •
{% download i18n[locale].downloads.book.epub, "/downloads/book-kogakure.epub" %} •
{% download i18n[locale].downloads.book.mobi, "/downloads/book-kogakure.mobi" %}
</p>
</figcaption>
</figure>
{% endif %}
</article>
<figure class="downloads-layout downloads-50-start" {{ site.animation }}>
<div class="image-shadow downloads-image-container">
<img src="/assets/images/downloads/ingo.jpg" alt=""/>
</div>
<figcaption>
<h2>{{ i18n[locale].downloads.font.headline }}
<h2>
{{ i18n[locale].downloads.font.text | markdown | safe }}
<p>
{% more i18n[locale].downloads.font.more, "https://github.com/kogakure/font-ingo", true %}<br/>
{% download i18n[locale].downloads.font.download, "/downloads/iga-ninja-font.zip" %}
</p>
</figcaption>
</figure>
<figure class="downloads-layout downloads-50-end" {{ site.animation }}>
<div class="image-shadow downloads-image-container">
<img src="/assets/images/downloads/ogama.jpg" alt=""/>
</div>
<figcaption>
<h2>{{ i18n[locale].downloads.cgi.headline }}</h2>
{{ i18n[locale].downloads.cgi.text | markdown | safe }}
<p>
{% more i18n[locale].downloads.cgi.more, "https://github.com/kogakure/3d-models-kogakure", true %}
</p>
</figcaption>
</figure>
{% if locale === "de" %}
<figure class="downloads-layout downloads-50-start" {{ site.animation }}>
<div class="image-shadow downloads-image-container">
<img src="/assets/images/chronology/gitbook-kogakure.jpg" alt=""/>
</div>
<figcaption>
<h2>{{ i18n[locale].downloads.book.headline }}</h2>
{{ i18n[locale].downloads.book.text | markdown | safe }}
<p>
{% download i18n[locale].downloads.book.pdf, "/downloads/book-kogakure.pdf", true %} •
{% download i18n[locale].downloads.book.epub, "/downloads/book-kogakure.epub" %}
{% download i18n[locale].downloads.book.mobi, "/downloads/book-kogakure.mobi" %}
</p>
</figcaption>
</figure>
{% endif %}
</article>

View File

@@ -1,4 +1,4 @@
<div class="downloads-intro" {{ site.animationDelay }}>
<h1 class="downloads-title">{{ title }}</h1>
{{ i18n[locale].downloads.intro | markdown | safe }}
<h1 class="downloads-title">{{ title }}</h1>
{{ i18n[locale].downloads.intro | markdown | safe }}
</div>

View File

@@ -1,4 +1,4 @@
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="{{ site.faviconPath }}favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="{{ site.faviconPath }}apple-touch-icon.png" />
<link rel="manifest" href="/manifest.webmanifest" />
<link rel="icon" href="/favicon.ico" sizes="any"/>
<link rel="icon" href="{{ site.faviconPath }}favicon.svg" type="image/svg+xml"/>
<link rel="apple-touch-icon" href="{{ site.faviconPath }}apple-touch-icon.png"/>
<link rel="manifest" href="/manifest.webmanifest"/>

View File

@@ -1,4 +1,4 @@
<div class="glossary-intro" {{ site.animationDelay }}>
<h1 class="glossary-title">{{ title }}</h1>
{{ i18n[locale].glossary.intro | markdown | safe }}
<h1 class="glossary-title">{{ title }}</h1>
{{ i18n[locale].glossary.intro | markdown | safe }}
</div>

View File

@@ -1,24 +1,26 @@
<div class="glossary-list">
{% for item in glossaryData %}
<dl class="glossary-list-item" {{ site.animation }}>
{% if item.title %}
<dt class="glossary-list-item-romanji">{{ item.title }}</dt>
{% endif %}
{% if item.japanese or item.chinese or item.sanskrit %}
<dt class="glossary-list-item-japanese">{{ item.japanese }}{{ item.chinese}}{{ item.sanskrit }}</dt>
{% endif %}
{% if item.translation %}
<dd class="glossary-list-item-translation">
<q>{{ item.translation }}</q>
</dd>
{% endif %}
{% if item.description %}
<dd class="glossary-list-item-description">
{% if item.sanskrit %}<em>{{ i18n[locale].glossary.sanskrit }}</em>. {% endif %}
{% if item.chinese %}<em>{{ i18n[locale].glossary.chinese }}</em>. {% endif %}
{{ item.description | safe }}
</dd>
{% endif %}
</dl>
{% endfor %}
{% for item in glossaryData %}
<dl class="glossary-list-item" {{ site.animation }}>
{% if item.title %}
<dt class="glossary-list-item-romanji">{{ item.title }}</dt>
{% endif %}
{% if item.japanese or item.chinese or item.sanskrit %}
<dt class="glossary-list-item-japanese">{{ item.japanese }}{{ item.chinese}}{{ item.sanskrit }}</dt>
{% endif %}
{% if item.translation %}
<dd class="glossary-list-item-translation">
<q>{{ item.translation }}</q>
</dd>
{% endif %}
{% if item.description %}
<dd class="glossary-list-item-description">
{% if item.sanskrit %}
<em>{{ i18n[locale].glossary.sanskrit }}</em>. {% endif %}
{% if item.chinese %}
<em>{{ i18n[locale].glossary.chinese }}</em>. {% endif %}
{{ item.description | safe }}
</dd>
{% endif %}
</dl>
{% endfor %}
</div>

View File

@@ -1,21 +1,21 @@
{% if locale === "de" %}
{% set homeLink = "/" %}
{% set homeLink = "/" %}
{% else %}
{% set homeLink = "/" + locale + "/" %}
{% set homeLink = "/" + locale + "/" %}
{% endif %}
{% if isHome %}
<div class="home-link-spacer"></div>
<div class="home-link-spacer"></div>
{% else %}
<a class="home-link" href="{{ homeLink }}" title="{{ i18n[locale].homeLink }}">
<button
class="home-link-button"
aria-label="{{ i18n[locale].homeLink }}"
type="button"
>
<svg class="home-link-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#ancient-pavilion"></use>
</svg>
</button>
</a>
<a class="home-link" href="{{ homeLink }}" title="{{ i18n[locale].homeLink }}">
<button
class="home-link-button"
aria-label="{{ i18n[locale].homeLink }}"
type="button"
>
<svg class="home-link-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#ancient-pavilion"></use>
</svg>
</button>
</a>
{% endif %}

View File

@@ -1,5 +1,4 @@
<div class="homepage-intro" {{ site.animationDelay }}>
<h1 class="homepage-title">{{ title }}</h1>
{{ i18n[locale].homepage.intro | markdown | safe }}
<h1 class="homepage-title">{{ title }}</h1>
{{ i18n[locale].homepage.intro | markdown | safe }}
</div>

View File

@@ -1,34 +1,34 @@
{% if locale === "de" %}
{% set prefix = "/" %}
{% set prefix = "/" %}
{% else %}
{% set prefix = "/" + locale + "/" %}
{% set prefix = "/" + locale + "/" %}
{% endif %}
<section class="homepage-toc">
<h2 class="homepage-toc-title">{{ i18n[locale].homepage.tocHeadline }}</h2>
<nav>
<ol class="homepage-toc-intro">
{% for item in prefaceCollection %}
<li>
<a href="{{ prefix }}{{ item.slug }}/">{{ item.title }}</a>
</li>
{% endfor %}
</ol>
<ol class="homepage-toc-content">
{% for chapter in tocCollection %}
<li class="homepage-toc-chapter">
{{ chapter.title }}
<ol>
{% for section in chapter.items %}
<li class="homepage-toc-">
<a href="{{ prefix }}{{ section.slug }}/">
{{ section.title }}
</a>
</li>
{% endfor %}
</ol>
</li>
{% endfor %}
</ol>
</nav>
<h2 class="homepage-toc-title">{{ i18n[locale].homepage.tocHeadline }}</h2>
<nav>
<ol class="homepage-toc-intro">
{% for item in prefaceCollection %}
<li>
<a href="{{ prefix }}{{ item.slug }}/">{{ item.title }}</a>
</li>
{% endfor %}
</ol>
<ol class="homepage-toc-content">
{% for chapter in tocCollection %}
<li class="homepage-toc-chapter">
{{ chapter.title }}
<ol>
{% for section in chapter.items %}
<li class="homepage-toc-">
<a href="{{ prefix }}{{ section.slug }}/">
{{ section.title }}
</a>
</li>
{% endfor %}
</ol>
</li>
{% endfor %}
</ol>
</nav>
</section>

View File

@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="0" height="0">
{% include "icons.svg" %}
{% include "icons.svg" %}
</svg>

Before

Width:  |  Height:  |  Size: 117 B

After

Width:  |  Height:  |  Size: 116 B

View File

@@ -1,20 +1,24 @@
<span class="language-switcher">
{% for lang in site.languages %}
{% if loop.first %}<ul class="language-switcher-list">{% endif %}
{% for lang in site.languages %}
{% if loop.first %}
<ul class="language-switcher-list">
{% endif %}
{% set translatedUrl = "/" + lang.language + "/" %}
{% set activeClass = "is-active" if lang.language == locale else "" %}
{% set translatedUrl = "/" + lang.language + "/" %}
{% set activeClass = "is-active" if lang.language == locale else "" %}
{% for item in collections.all %}
{% if item.data.translationKey == translationKey and item.data.locale == lang.language %}
{% set translatedUrl = item.url %}
{% endif %}
{% endfor %}
{% for item in collections.all %}
{% if item.data.translationKey == translationKey and item.data.locale == lang.language %}
{% set translatedUrl = item.url %}
{% endif %}
{% endfor %}
<li class="language-switcher-list-item">
<a class="language-switcher-link {{ activeClass }}" href="{{ translatedUrl }}">{{ lang.title }}</a>
</li>
<li class="language-switcher-list-item">
<a class="language-switcher-link {{ activeClass }}" href="{{ translatedUrl }}">{{ lang.title }}</a>
</li>
{% if loop.last %}</ul>{% endif %}
{% endfor %}
{% if loop.last %}
</ul>
{% endif %}
{% endfor %}
</span>

View File

@@ -1,15 +1,15 @@
<div class="legal">
<span class="legal-copyright">© </span>
<strong class="legal-author">
<a class="legal-author-link" href="/imprint/">{{ site.author }}</a>
</strong>
<span class="legal-bullet"> / </span>
<span class="legal-year">
<time datetime="{{ site.buildTime | dateToISO }}">
<span class="legal-copyright">© </span>
<strong class="legal-author">
<a class="legal-author-link" href="/imprint/">{{ site.author }}</a>
</strong>
<span class="legal-bullet"> / </span>
<span class="legal-year">
<time datetime="{{ site.buildTime | dateToISO }}">
1999{{ site.buildTime | dateToFormat('YYYY') }}
</time>
</span>
<span class="legal-bullet"> / </span>
{% include "language-switcher.njk" %}
<span class="hidden-ninja"> 🥷 </span>
</time>
</span>
<span class="legal-bullet"> / </span>
{% include "language-switcher.njk" %}
<span class="hidden-ninja"> 🥷 </span>
</div>

View File

@@ -1,53 +1,55 @@
{% if locale === "de" %}{% set localizedDescription = site.description['de'] %}{% endif %}
{% if locale === "en" %}{% set localizedDescription = site.description['en'] %}{% endif %}
{% if locale === "de" %}{% set localizedDescription = site.description['de'] %}
{% endif %}
{% if locale === "en" %}{% set localizedDescription = site.description['en'] %}
{% endif %}
{%- set ogTitle -%}
{%- if page.url === "/" or page.url === "/en/" -%}
{{ site.title }} · {{ localizedDescription }}
{%- else -%}
{{ title }} · {{ site.title }}
{%- endif -%}
{%- if page.url === "/" or page.url === "/en/" -%}
{{ site.title }} · {{ localizedDescription }}
{%- else -%}
{{ title }} · {{ site.title }}
{%- endif -%}
{%- endset -%}
{%- set ogDescription -%}
{%- if page.url === "/" or page.url === "/en/" -%}
{{ localizedDescription }}
{%- else -%}
{{ excerpt or title }}
{%- endif -%}
{%- if page.url === "/" or page.url === "/en/" -%}
{{ localizedDescription }}
{%- else -%}
{{ excerpt or title }}
{%- endif -%}
{%- endset -%}
{%- set ogImage -%}
{%- if og -%}
{{ site.url }}/assets/images/branding/og/{{ og }}
{%- else -%}
{% if locale === "en" %}
{{ site.url }}/assets/images/branding/og/banner-en.png
{% else %}
{{ site.url }}/assets/images/branding/og/banner-de.png
{% endif %}
{%- endif -%}
{%- if og -%}
{{ site.url }}/assets/images/branding/og/{{ og }}
{%- else -%}
{% if locale === "en" %}
{{ site.url }}/assets/images/branding/og/banner-en.png
{% else %}
{{ site.url }}/assets/images/branding/og/banner-de.png
{% endif %}
{%- endif -%}
{%- endset -%}
<!-- Meta -->
<meta name="author" content="{{ site.author }}" />
<meta name="description" content="{{ ogDescription }}" />
<meta name="theme-color" content="#e7e6e4" />
<meta name="generator" content="{{ eleventy.generator }}" />
<meta name="author" content="{{ site.author }}"/>
<meta name="description" content="{{ ogDescription }}"/>
<meta name="theme-color" content="#e7e6e4"/>
<meta name="generator" content="{{ eleventy.generator }}"/>
<!-- Open graph -->
<meta property="og:title" content="{{ ogTitle }}" />
<meta property="og:url" content="{{ site.url }}{{ page.url }}" />
<meta property="og:description" content="{{ ogDescription }}" />
<meta property="og:type" content="article" />
<meta property="og:title" content="{{ ogTitle }}"/>
<meta property="og:url" content="{{ site.url }}{{ page.url }}"/>
<meta property="og:description" content="{{ ogDescription }}"/>
<meta property="og:type" content="article"/>
<meta property="og:image" content="{{ ogImage }}"/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="675" />
<meta property="og:image:width" content="1200"/>
<meta property="og:image:height" content="675"/>
<!-- Twitter -->
<meta name="twitter:title" content="{{ ogTitle }}" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="{{ site.twitter }}" />
<meta name="twitter:description" content="{{ ogDescription }}" />
<meta name="twitter:image" content="{{ ogImage }}" />
<meta name="twitter:creator" content="{{ site.twitter }}" />
<meta name="twitter:title" content="{{ ogTitle }}"/>
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:site" content="{{ site.twitter }}"/>
<meta name="twitter:description" content="{{ ogDescription }}"/>
<meta name="twitter:image" content="{{ ogImage }}"/>
<meta name="twitter:creator" content="{{ site.twitter }}"/>

View File

@@ -1,4 +1,4 @@
<footer class="page-footer">
{% include "legal.njk" %}
{% include "up-link.njk" %}
{% include "legal.njk" %}
{% include "up-link.njk" %}
</footer>

View File

@@ -1,4 +1,4 @@
<header class="page-header" role="banner">
{% include "home-link.njk" %}
{% include "theme-toggle.njk" %}
{% include "home-link.njk" %}
{% include "theme-toggle.njk" %}
</header>

View File

@@ -1,5 +1,5 @@
<div class="pagination-container">
<svg class="pagination-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#arrow-left-s"></use>
</svg>
<svg class="pagination-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#arrow-left-s"></use>
</svg>
</div>

View File

@@ -1,5 +1,5 @@
<div class="pagination-container">
<svg class="pagination-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#arrow-right-s"></use>
</svg>
<svg class="pagination-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#arrow-right-s"></use>
</svg>
</div>

View File

@@ -1,23 +1,23 @@
{% if previousPost %}
<a
aria-label="{{ previousPost.data.title }}"
class="pagination pagination-start"
href="{{ previousPost.url }}"
rel="prev"
title="{{ previousPost.data.title }}"
>
{% include "pagination-left-arrow.njk" %}
</a>
<a
aria-label="{{ previousPost.data.title }}"
class="pagination pagination-start"
href="{{ previousPost.url }}"
rel="prev"
title="{{ previousPost.data.title }}"
>
{% include "pagination-left-arrow.njk" %}
</a>
{% endif %}
{% if nextPost %}
<a
aria-label="{{ nextPost.data.title }}"
class="pagination pagination-end"
href="{{ nextPost.url }}"
rel="next"
title="{{ nextPost.data.title }}"
>
{% include "pagination-right-arrow.njk" %}
</a>
<a
aria-label="{{ nextPost.data.title }}"
class="pagination pagination-end"
href="{{ nextPost.url }}"
rel="next"
title="{{ nextPost.data.title }}"
>
{% include "pagination-right-arrow.njk" %}
</a>
{% endif %}

View File

@@ -1,3 +1,3 @@
<link rel="preload" href="{{ '/assets/fonts/secuela-regular-vf.woff2' | url }}" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="{{ '/assets/fonts/secuela-italic-vf.woff2' | url }}" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="{{ '/assets/fonts/sword-kanji.woff2' | url }}" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="{{ '/assets/fonts/secuela-regular-vf.woff2' | url }}" as="font" type="font/woff2" crossorigin/>
<link rel="preload" href="{{ '/assets/fonts/secuela-italic-vf.woff2' | url }}" as="font" type="font/woff2" crossorigin/>
<link rel="preload" href="{{ '/assets/fonts/sword-kanji.woff2' | url }}" as="font" type="font/woff2" crossorigin/>

View File

@@ -1,46 +1,51 @@
{% if locale === "en" %}{% set affiliateUrl = "http://www.amazon.de/gp/product/{{ book.asin }}?ie=UTF8&amp;tag=stefanimhoffde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN={{ book.asin }}" %}{% endif %}
{% if locale === "en" %}{% set affiliateUrl = "https://www.amazon.com/gp/product/{{ book.asin }}/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN={{ book.asin }}&amp;linkCode=as2&amp;tag=kogakure-20" %}{% endif %}
{% if locale === "en" %}{% set affiliateUrl = "http://www.amazon.de/gp/product/{{ book.asin }}?ie=UTF8&amp;tag=stefanimhoffde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN={{ book.asin }}" %}
{% endif %}
{% if locale === "en" %}{% set affiliateUrl = "https://www.amazon.com/gp/product/{{ book.asin }}/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN={{ book.asin }}&amp;linkCode=as2&amp;tag=kogakure-20" %}
{% endif %}
<div class="recommendations-books">
<h2>{{ i18n[locale].recommendations.books.headline }}</h2>
<article class="recommendations-container">
{% for book in bookCollection %}
<div {{ site.animation }}>
{% if book.asin %}
<a
class="product"
href="{{ affiliateUrl }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
{% if book.cover %}
<img alt="{{ book.title }}" src="{{ book.cover }}" />
{% else %}
{% if locale === "en" %}
{% product book.asin, book.title, "en" %}
{% else %}
{% product book.asin, book.title %}
{% endif %}
{% endif %}
</a>
{% else %}
{% if book.link %}
<a
class="product"
href="{{ book.link }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
<img alt="{{ book.title }}" src="{{ book.cover }}" />
</a>
{% else %}
<img alt="{{ book.title }}" src="{{ book.cover }}" />
{% endif %}
{% endif %}
<h3 class="recommendations-product-title">
{{ book.title }}
</h3>
</div>
{% endfor %}
</article>
<h2>{{ i18n[locale].recommendations.books.headline }}</h2>
<article class="recommendations-container">
{% for book in bookCollection %}
<div {{ site.animation }}>
{% if book.asin %}
<a
class="product"
href="{{ affiliateUrl }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
{% if book.cover %}
<img alt="{{ book.title }}" src="{{ book.cover }}"/>
{% else %}
{% if locale === "en" %}
{% product book.asin,
book.title,
"en" %}
{% else %}
{% product book.asin,
book.title %}
{% endif %}
{% endif %}
</a>
{% else %}
{% if book.link %}
<a
class="product"
href="{{ book.link }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
<img alt="{{ book.title }}" src="{{ book.cover }}"/>
</a>
{% else %}
<img alt="{{ book.title }}" src="{{ book.cover }}"/>
{% endif %}
{% endif %}
<h3 class="recommendations-product-title">
{{ book.title }}
</h3>
</div>
{% endfor %}
</article>
</div>

View File

@@ -1,4 +1,4 @@
<div class="recommendations-intro" {{ site.animationDelay }}>
<h1 class="recommendations-title">{{ title }}</h1>
{{ i18n[locale].recommendations.intro | markdown | safe }}
<h1 class="recommendations-title">{{ title }}</h1>
{{ i18n[locale].recommendations.intro | markdown | safe }}
</div>

View File

@@ -1,44 +1,49 @@
{% if locale === "en" %}{% set affiliateUrl = "http://www.amazon.de/gp/product/{{ movie.asin }}?ie=UTF8&amp;tag=stefanimhoffde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN={{ movie.asin }}" %}{% endif %}
{% if locale === "en" %}{% set affiliateUrl = "https://www.amazon.com/gp/product/{{ movie.asin }}/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN={{ movie.asin }}&amp;linkCode=as2&amp;tag=kogakure-20" %}{% endif %}
{% if locale === "en" %}{% set affiliateUrl = "http://www.amazon.de/gp/product/{{ movie.asin }}?ie=UTF8&amp;tag=stefanimhoffde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN={{ movie.asin }}" %}
{% endif %}
{% if locale === "en" %}{% set affiliateUrl = "https://www.amazon.com/gp/product/{{ movie.asin }}/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN={{ movie.asin }}&amp;linkCode=as2&amp;tag=kogakure-20" %}
{% endif %}
<div class="recommendations-movies">
<h2>{{ i18n[locale].recommendations.movies.headline }}</h2>
<article class="recommendations-container">
{% for movie in movieCollection %}
<div {{ site.animation }}>
{% if movie.asin %}
<a
class="product"
href="{{ affiliateUrl }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
{% if movie.cover %}
<img alt="{{ movie.title }}" src="{{ movie.cover }}" />
{% else %}
{% if locale === "en" %}
{% product movie.asin, movie.title, "en" %}
{% else %}
{% product movie.asin, movie.title %}
{% endif %}
{% endif %}
</a>
{% elif movie.imdb %}
<a
class="product"
href="https://www.imdb.com/title/{{ movie.imdb }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
<img alt="{{ movie.title }}" src="{{ movie.cover }}" />
</a>
{% else %}
<img alt="{{ movie.title }}" src="{{ movie.cover }}" />
{% endif %}
<h3 class="recommendations-product-title">
{{ movie.title }}
</h3>
</div>
{% endfor %}
</article>
<h2>{{ i18n[locale].recommendations.movies.headline }}</h2>
<article class="recommendations-container">
{% for movie in movieCollection %}
<div {{ site.animation }}>
{% if movie.asin %}
<a
class="product"
href="{{ affiliateUrl }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
{% if movie.cover %}
<img alt="{{ movie.title }}" src="{{ movie.cover }}"/>
{% else %}
{% if locale === "en" %}
{% product movie.asin,
movie.title,
"en" %}
{% else %}
{% product movie.asin,
movie.title %}
{% endif %}
{% endif %}
</a>
{% elif movie.imdb %}
<a
class="product"
href="https://www.imdb.com/title/{{ movie.imdb }}"
rel="nofollow noopener noreferrer external"
target="_blank"
>
<img alt="{{ movie.title }}" src="{{ movie.cover }}"/>
</a>
{% else %}
<img alt="{{ movie.title }}" src="{{ movie.cover }}"/>
{% endif %}
<h3 class="recommendations-product-title">
{{ movie.title }}
</h3>
</div>
{% endfor %}
</article>
</div>

View File

@@ -1,5 +1,5 @@
{% if robots %}
<meta name="robots" content="{{ robots }}" />
<meta name="robots" content="{{ robots }}"/>
{% else %}
<meta name="robots" content="all" />
<meta name="robots" content="all"/>
{% endif %}

View File

@@ -1,7 +1,9 @@
{% set js %}
{% include "../assets/scripts/embedded/theme-switcher.js" %}
{% if site.isProduction %}
{% include "../assets/scripts/embedded/register-serviceworker.js" %}
{% endif %}
{% set js %}
{% include "../assets/scripts/embedded/theme-switcher.js" %}
{% if site.isProduction %}
{% include "../assets/scripts/embedded/register-serviceworker.js" %}
{% endif %}
{% endset %}
<script>{{ js | jsmin | safe }}</script>
<script>
{{ js | jsmin | safe }}
</script>

View File

@@ -1,28 +1,27 @@
{% if site.isProduction %}
{% set criticalCSS %}
{% include "critical/base.css" %}
{% if css %}
{% include "critical/" + css %}
{% endif %}
{% endset %}
{% set criticalCSS %}
{% include "critical/base.css" %}
{% if css %}
{% include "critical/" + css %}
{% endif %}
{% endset %}
<style>
{{ criticalCSS | safe }}
</style>
<style>
{{criticalCSS | safe}}
</style>
{% else %}
<link rel="stylesheet" href="{{ '/assets/styles/base.css' | url }}" />
{% if css %}
<link rel="stylesheet" href="{{ '/assets/styles/' + css | url }}" />
{% endif %}
<link rel="stylesheet" href="{{ '/assets/styles/base.css' | url }}"/>
{% if css %}
<link rel="stylesheet" href="{{ '/assets/styles/' + css | url }}"/>
{% endif %}
{% endif %}
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}" media="print" onload="this.media='all'" />
<link rel="stylesheet" href="{{ '/assets/styles/print.css' | url }}" media="print" />
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}" media="print" onload="this.media='all'"/>
<link rel="stylesheet" href="{{ '/assets/styles/print.css' | url }}" media="print"/>
<noscript>
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}" />
<link rel="stylesheet" href="{{ '/assets/styles/main.css' | url }}"/>
</noscript>

View File

@@ -1,5 +1,5 @@
<button id="theme-toggle" class="theme-toggle" aria-label="{{ i18n[locale].themeToggle }}">
<svg class="theme-toggle-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#circle"></use>
</svg>
<svg class="theme-toggle-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#circle"></use>
</svg>
</button>

View File

@@ -1,7 +1,7 @@
<a id="up-link" class="up-link" href="#top" onClick="{scrollToTop}">
<button class="up-link-button" aria-label="{{ i18n[locale].upLink }}">
<svg class="up-link-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#arrow-up"></use>
</svg>
</button>
<button class="up-link-button" aria-label="{{ i18n[locale].upLink }}">
<svg class="up-link-icon" aria-hidden="true" viewBox="0 0 24 24" width="1em" height="1em">
<use xlink:href="#arrow-up"></use>
</svg>
</button>
</a>

View File

@@ -1,37 +1,45 @@
{% if locale === "de" %}{% set localizedDescription = site.description['de'] %}{% endif %}
{% if locale === "en" %}{% set localizedDescription = site.description['en'] %}{% endif %}
{% if locale === "de" %}{% set localizedDescription = site.description['de'] %}
{% endif %}
{% if locale === "en" %}{% set localizedDescription = site.description['en'] %}
{% endif %}
<!DOCTYPE html>
<html lang="{{ locale }}" dir="{{ dir }}" class="no-js">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>
{%- if isHome -%}
{{ site.title | replace("&shy;", "") }} · {{ localizedDescription }}
{%- else -%}
{{ title | replace("&shy;", "") }} · {{ site.title }} · {{ localizedDescription }}
{%- endif -%}
</title>
<title>
{%- if isHome -%}
{{ site.title | replace("&shy;", "") }} · {{ localizedDescription }}
{%- else -%}
{{ title | replace("&shy;", "") }} · {{ site.title }} · {{ localizedDescription }}
{%- endif -%}
</title>
<link rel="canonical" href="{{ site.url }}{{ page.url }}" />
<link rel="canonical" href="{{ site.url }}{{ page.url }}"/>
<script type="module">
document.documentElement.classList.remove('no-js');
document.documentElement.classList.add('js');
</script>
<script type="module">
document
.documentElement
.classList
.remove('no-js');
document
.documentElement
.classList
.add('js');
</script>
{% include "scripts.njk" %}
{% include "styles.njk" %}
{% include "favicons.njk" %}
{% include "meta-tags.njk" %}
{% include "preload.njk" %}
{% include "robots.njk" %}
</head>
<body {% if bodyClass %}class="{{ bodyClass }}"{% endif %} id="top">
{% include "icon-sprites.njk" %}
{{ content | safe }}
<script src="/assets/scripts/main.js" async></script>
</body>
{% include "scripts.njk" %}
{% include "styles.njk" %}
{% include "favicons.njk" %}
{% include "meta-tags.njk" %}
{% include "preload.njk" %}
{% include "robots.njk" %}
</head>
<body {% if bodyClass %}class="{{ bodyClass }}"{% endif %} id="top">
{% include "icon-sprites.njk" %}
{{ content | safe }}
<script src="/assets/scripts/main.js" async></script>
</body>
</html>

View File

@@ -4,6 +4,6 @@ layout: base
{% include "page-header.njk" %}
<main class="page-content">
{{ content | safe }}
{{ content | safe }}
</main>
{% include "page-footer.njk" %}

View File

@@ -3,7 +3,7 @@ layout: default
---
<section class="layout-fullsize-section">
<div class="layout-fullsize rowgap">
{{ content | safe }}
</div>
<div class="layout-fullsize rowgap">
{{ content | safe }}
</div>
</section>

View File

@@ -3,7 +3,7 @@ layout: default
---
<div class="layout-narrow">
<div class="wrapper">
{{ content | safe }}
</div>
<div class="wrapper">
{{ content | safe }}
</div>
</div>

View File

@@ -2,26 +2,34 @@
layout: narrow
---
{% if locale === "de" %}{% set pageCollection = collections.sortedGermanBookPages %}{% endif %}
{% if locale === "en" %}{% set pageCollection = collections.sortedEnglishBookPages %}{% endif %}
{% if locale === "de" %}{% set pageCollection = collections.sortedGermanBookPages %}
{% endif %}
{% if locale === "en" %}{% set pageCollection = collections.sortedEnglishBookPages %}
{% endif %}
{% set previousPost = pageCollection | getPreviousCollectionItem(page) %}
{% set nextPost = pageCollection | getNextCollectionItem(page) %}
<article class="page-container">
<h1 class="page-title" >{{ title | nbsp | safe }}</h1>
<div class="page">
{{ content | safe }}
</div>
{% if author or translator %}
<hr />
<footer>
<small>
{% if author %}<strong>{{ i18n[locale].creditAuthor }}</strong> <em>{{ author }}</em>{% endif %}
{% if author and translator %} • {% endif %}
{% if translator %}<strong>{{ i18n[locale].creditTranslator }}</strong> <em>{{ translator }}</em>{% endif %}
</small>
</footer>
{% endif %}
{% include "pagination.njk" %}
<h1 class="page-title" >{{ title | nbsp | safe }}</h1>
<div class="page">
{{ content | safe }}
</div>
{% if author or translator %}
<hr/>
<footer>
<small>
{% if author %}
<strong>{{ i18n[locale].creditAuthor }}</strong>
<em>{{ author }}</em>
{% endif %}
{% if author and translator %} • {% endif %}
{% if translator %}
<strong>{{ i18n[locale].creditTranslator }}</strong>
<em>{{ translator }}</em>
{% endif %}
</small>
</footer>
{% endif %}
{% include "pagination.njk" %}
</article>

View File

@@ -1,5 +1,5 @@
{
"layout": "page",
"tags": ["book", "german"],
"templateEngineOverride": "njk,md"
"layout": "page",
"tags": ["book", "german"],
"templateEngineOverride": "njk,md"
}

Some files were not shown because too many files have changed in this diff Show More