diff --git a/content/docs/zola/_index.md b/content/docs/zola/_index.md index f9f4499..6ed528f 100644 --- a/content/docs/zola/_index.md +++ b/content/docs/zola/_index.md @@ -17,37 +17,56 @@ categories=["Web Development", "Static Site Generation", "Zola"] collection and a collection of HTML templates. The templating language is called [Tera](https://tera.netlify.app). +Zola is a single binary capable of assembling the website out of a collection of +templates, SASS files, static data (including CSS if you're not into SASS), and +markdown files. The Markdown files create the structure of the website as a +series of folders. + +If you need anything else (Typescript built into Javascript, templates other +than Zola's internal, static file conversion, etc.), you'll need separate +toolchains for those. + ## Running Zola -Zola is a single binary. +Zola has only a few commands: - `zola init` - Starts a new Zola project. Creates the structure described in the next section, especially if you enable sass. - `zola serve` - Starts a localhost webserver to serve your content for demo. - `zola build` - Builds a Zola project into a collection of static HTML. +- `zola check` - Check that the current site is coherent +- `zola help` - This list! -## Project layout +## Project Layout -The following files and folders define a basic Zola project +Zola uses a simple layout of content and support, with a single configuration +file. The configuration file has two parts: a root which controls compilation, +and an `[extra]` section that provides data and details that will be available +to all templates during compilation. -- `config.toml`: A configuration file in the [TOML](https://toml.io/en/) - configuration language. Can contain a lot of information that will be made - available to *all* pages in the system. +The following files and folders define a basic Zola project. Any other folders +in a zola project are ignored. + +- `config.toml`: The configuration file. Uses the [TOML](https://toml.io/en/) + configuration language. - `content/`: The structured content folder. All your "living" stuff goes here. - `sass/`: [Sass](../sass) is a CSS preprocessor language that makes CSS easier. - `static/`: Static content such as images, fonts, and Javascript -- `templates`: The HTML templates (and includes, etc) that define the website's +- `templates/`: The HTML templates (and includes, etc) that define the website's layouts -Note that if you want to use modern Javascript features such as a precompiler -like Typescript or a bundler like Webpack, that is outside the functionality of -Zola. You'll have to have a separate project for that, or a subfolder or git -submodule, and you'll have to have a separate build step for that. +Every folder under the `content/` folder that has an `_index.md` file is +considered a *section*, presenting a table of contents or other introductory +matter. Every other markdown document in a section is considered a *page*. +Zola uses different templates for sections versus pages, and individual pages +and sections can choose alternative templates. -It's also a bit of a shame that Tera is 100% an HTML play, and there's no HAML -or similar HTML templating involved. That would be a nifty project. - -## Tera +A folder under a section that has an `index.md` file (note the lack of +underscore prefix) is considered a *page*. This allows content writers to +supply additional assets, such as images or data files, along with the contents +of the page. + +## The Templating Languagae The Tera templating language looks a lot like Django's, or for that matter any number of templating languages. Every page generated with Tera receives a @@ -62,7 +81,7 @@ Tera; everything outside is left untouched. - `{%` and `%}` for statements - `{#` and `#}` for comments -Statements that have a dash as part of their delimeter remove all whitespace +Statements that have a dash as part of their delimiter remove all whitespace from around the delimiter. `{%-` says to eliminate all whitespace between this statement and anything that came before it; `-%}` says to eliminate everything that comes after it. @@ -77,12 +96,25 @@ block, and it can define subsections (note: section is a heavily overloaded word) of itself. These blocks can be used as-is, or replaced when another template inherits them and overwrites them. +You can inherit and extend a block with a `super()` command: + +``` jinja2 +{% block stylesheet %} +{​{ super() }} +{# Insert your own stylesheet HTML here #} +{% endblock %} +``` + + + #### `extends` The `extends` keyword imports one template into another. A file that `extends` -that import then provides its own overrides for blocks found in the imported -templated, substituting its own content and processing for that of the extended -template. +that import then provides its own overrides or extensions for blocks found in +the imported templates, substituting its own content and processing for that of +the extended template. #### `set` @@ -109,23 +141,6 @@ The list of `is` tests that are shipped with Zola are: {{ definition_list(source="docs/zola/predicates.json") }} -- `defined`: the given variable is defined. -- `undefined`: the given variable is undefined. -- `odd`: the given variable is an odd number. -- `even`: the given variable is an even number. -- `string`: the given variable is a string. -- `number`: the given variable is a number. -- `divisibleby`: the given expression is divisible by the arg given. -- `iterable`: Returns true if the given variable can be iterated over in Tera (i.e. is an array/tuple or an object). -- `object`: Returns true if the given variable is an object (i.e. can be iterated over key, value). -- `starting_with(string)`: Returns true if the given variable is a string and starts with the arg given. -- `ending_with(string)`: Returns true if the given variable is a string and ends with the arg given. -- `containing(val)`: Returns true if the given variable contains the arg given. - - strings: is the arg a substring? - - arrays: is the arg one of the members of the array? - - maps: is the arg a key of the map? -- `matching(regexp)`: Returns true if the given variable is a string and matches the regex in the argument. - #### `for` Arrays are iterated with the `for x in array/map ... endfor` syntax. @@ -207,22 +222,7 @@ variable. There are a few basic operations and filters available, however: **Math And Logic Expressions**: -- `+`: adds 2 values together, {{ 1 + 1 }} will print 2 -- `-`: performs a subtraction, {{ 2 - 1 }} will print 1 -- `/`: performs a division, {{ 10 / 2 }} will print 5 -- `*`: performs a multiplication, {{ 5 * 2 }} will print 10 -- `%`: performs a modulo, {{ 2 % 2 }} will print 0 -- `==`: checks whether the values are equal -- `!=`: checks whether the values are different -- `>=`: true if the left value is equal or greater to the right one -- `<=`: true if the right value is equal or greater to the left one -- `>`: true if the left value is greater than the right one -- `<`: true if the right value is greater than the left one -- `and`: true if the left and right operands are true -- `or`: true if the left or right operands are true -- `not`: negate an expression -- `in`: true if the left operand is inside the right container. May be combined - with `not`. +{{ definition_list(source="docs/zola/expressions.json") }} **Concatenation**: @@ -234,62 +234,17 @@ Filters can be used to, well, filter and edit expressions. A filter is placed at the end of an expression with a pipe between them, i.e. `{{ name | upper }}` would upper-case the contents of the variable `name`. -An entire chunk of HTML can be filtered by `{% filter filter_name %} ... {% -endfilter %}`. +An entire chunk of HTML can be filtered by: + +``` jinja2 +{% filter filter_name %} + ... +{% endfilter %} +``` The filters provided are: -- `lower`: Converts string to lowercase -- `upper`: Converts string to uppercase -- `wordcount`: Counts the words in a string -- `capitalize`: Capitalizes the first letter, lowercase the rest -- `replace`: Takes two strings as arguments, replaces the first with the second -- `addslashes`: Escapes quoted strings -- `slugify`: Provides a slug for the string -- `title`: Capitalizes each word in the string -- `trim`: Removes leading and trailing whitespace -- `trim_start`: Removes leading whitespace -- `trim_end`: Removes trailing whitespace -- `trim_start_matches`: Removes leading characters that match a pattern -- `trim_end_matches`: Removes trailing characters that match a pattern -- `truncate`: Truncates the string to the length specified -- `linebreaksbr`: Replaces line breaks (\n or \r\n) with HTML line breaks (
) -- `spaceless`: Remove space ( ) and line breaks (\n or \r\n) between HTML tags -- `striptags`: Tries to remove HTML tags from input -- `first`: Returns the first element of an array -- `last`: Returns the last element of an array -- `nth`: Returns the nth element of an array -- `join`: Joins an array with a delimeter -- `length`: Returns the length of an array, an object, or a string -- `reverse`: Returns a reversed string or array -- `sort`: Sorts an array into ascending order. You can sort objects by providing a fieldname argument -- `unique`: Removes duplicate items from an array. You can filter objects by providing a fieldname argument -- `slice`: Slices an array by the given start and end parameter -- `group_by`: Groups an array using the required attribute argument -- `filter`: Filters the array values, returning objects whose attribute is equal to the argument -- `map`: Retrieves an attribute from each object in an array -- `concat`: Appends values to an array -- `urlencode`: Performs classic (%-based) URL encoding -- `urlencode_strict`: Encodes URLs, including any slashes -- `pluralize`: Can return an alternative text if the argument is greater than one -- `round`: Returns a number rounded -- `filesizeformat`: Generates human-readable sizes for integers -- `date`: Parses a timestamp into a date(time) string -- `escape`: Escapes a string's HTML -- `escape_xml`: Escapes XML special characters -- `safe`: Marks a variable as safe: HTML will not be escaped -- `get`: Accesses a value from an object when the key is not a valid identifier. -- `split`: Splits a string into an array of strings, separated by a pattern. -- `int`: Converts a value into an integer. -- `float`: Converts a value into a float. -- `json_encode`: Transforms a value into its JSON representation -- `as_str`: Returns a string representation of the value. -- `default`: Provides a default value if the name is not present in the context -- `markdown`: Converts the variable contents from markdown to HTML -- `base64_encode`: Encode the variable to base64 -- `base64_decode`: Decode the variable from base64 -- `num_format`: Format a number in a variety of ways - +{{ definition_list(source="docs/zola/filters.json") }} ### Functions diff --git a/content/docs/zola/expressions.json b/content/docs/zola/expressions.json new file mode 100644 index 0000000..aa1b449 --- /dev/null +++ b/content/docs/zola/expressions.json @@ -0,0 +1,64 @@ +{ + "definitions": [ + { + "dd": "adds 2 values together, {{ 1 + 1 }} will print 2", + "dt": "+" + }, + { + "dd": "performs a subtraction, {{ 2 - 1 }} will print 1", + "dt": "-" + }, + { + "dd": "performs a division, {{ 10 / 2 }} will print 5", + "dt": "/" + }, + { + "dd": "performs a multiplication, {{ 5 * 2 }} will print 10", + "dt": "*" + }, + { + "dd": "performs a modulo, {{ 2 % 2 }} will print 0", + "dt": "%" + }, + { + "dd": "checks whether the values are equal", + "dt": "==" + }, + { + "dd": "checks whether the values are different", + "dt": "!=" + }, + { + "dd": "true if the left value is equal or greater to the right one", + "dt": ">=" + }, + { + "dd": "true if the right value is equal or greater to the left one", + "dt": "<=" + }, + { + "dd": "true if the left value is greater than the right one", + "dt": ">" + }, + { + "dd": "true if the right value is greater than the left one", + "dt": "<" + }, + { + "dd": "true if the left and right operands are true", + "dt": "and" + }, + { + "dd": "true if the left or right operands are true", + "dt": "or" + }, + { + "dd": "negate an expression", + "dt": "not" + }, + { + "dd": "true if the left operand is inside the right container. May be combined with \"not\".", + "dt": "in" + } + ] +} diff --git a/content/docs/zola/expressions.yaml b/content/docs/zola/expressions.yaml new file mode 100644 index 0000000..a77023d --- /dev/null +++ b/content/docs/zola/expressions.yaml @@ -0,0 +1,47 @@ +--- +expressions: + - + dt: "+" + dd: adds 2 values together, {{ 1 + 1 }} will print 2 + - + dt: "-" + dd: performs a subtraction, {{ 2 - 1 }} will print 1 + - + dt: "/" + dd: performs a division, {{ 10 / 2 }} will print 5 + - + dt: "*" + dd: performs a multiplication, {{ 5 * 2 }} will print 10 + - + dt: "%" + dd: performs a modulo, {{ 2 % 2 }} will print 0 + - + dt: "==" + dd: checks whether the values are equal + - + dt: "!=" + dd: checks whether the values are different + - + dt: ">=" + dd: true if the left value is equal or greater to the right one + - + dt: "<=" + dd: true if the right value is equal or greater to the left one + - + dt: ">" + dd: true if the left value is greater than the right one + - + dt: "<" + dd: true if the right value is greater than the left one + - + dt: "and" + dd: true if the left and right operands are true + - + dt: "or" + dd: true if the left or right operands are true + - + dt: "not" + dd: negate an expression + - + dt: "in" + dd: true if the left operand is inside the right container. May be combined with "not". diff --git a/content/docs/zola/filters.json b/content/docs/zola/filters.json new file mode 100644 index 0000000..b069777 --- /dev/null +++ b/content/docs/zola/filters.json @@ -0,0 +1,204 @@ +{ + "definitions": [ + { + "dd": "Converts string to lowercase", + "dt": "lower" + }, + { + "dd": "Converts string to uppercase", + "dt": "upper" + }, + { + "dd": "Counts the words in a string", + "dt": "wordcount" + }, + { + "dd": "Capitalizes the first letter, lowercase the rest", + "dt": "capitalize" + }, + { + "dd": "Takes two strings as arguments, replaces the first with the second", + "dt": "replace" + }, + { + "dd": "Escapes quoted strings", + "dt": "addslashes" + }, + { + "dd": "Provides a slug for the string", + "dt": "slugify" + }, + { + "dd": "Capitalizes each word in the string", + "dt": "title" + }, + { + "dd": "Removes leading and trailing whitespace", + "dt": "trim" + }, + { + "dd": "Removes leading whitespace", + "dt": "trim_start" + }, + { + "dd": "Removes trailing whitespace", + "dt": "trim_end" + }, + { + "dd": "Removes leading characters that match a pattern", + "dt": "trim_start_matches" + }, + { + "dd": "Removes trailing characters that match a pattern", + "dt": "trim_end_matches" + }, + { + "dd": "Truncates the string to the length specified", + "dt": "truncate" + }, + { + "dd": "Replaces line breaks (\\n or \\r\\n) with HTML line breaks (<br>)", + "dt": "linebreaksbr" + }, + { + "dd": "Remove space ( ) and line breaks (\\n or \\r\\n) between HTML tags", + "dt": "spaceless" + }, + { + "dd": "Tries to remove HTML tags from input", + "dt": "striptags" + }, + { + "dd": "Returns the first element of an array", + "dt": "first" + }, + { + "dd": "Returns the last element of an array", + "dt": "last" + }, + { + "dd": "Returns the nth element of an array", + "dt": "nth" + }, + { + "dd": "Joins an array with a delimeter", + "dt": "join" + }, + { + "dd": "Returns the length of an array, an object, or a string", + "dt": "length" + }, + { + "dd": "Returns a reversed string or array", + "dt": "reverse" + }, + { + "dd": "Sorts an array into ascending order. You can sort objects by providing a fieldname argument", + "dt": "sort" + }, + { + "dd": "Removes duplicate items from an array. You can filter objects by providing a fieldname argument", + "dt": "unique" + }, + { + "dd": "Slices an array by the given start and end parameter", + "dt": "slice" + }, + { + "dd": "Groups an array using the required attribute argument", + "dt": "group_by" + }, + { + "dd": "Filters the array values, returning objects whose attribute is equal to the argument", + "dt": "filter" + }, + { + "dd": "Retrieves an attribute from each object in an array", + "dt": "map" + }, + { + "dd": "Appends values to an array", + "dt": "concat" + }, + { + "dd": "Performs classic (%-based) URL encoding", + "dt": "urlencode" + }, + { + "dd": "Encodes URLs, including any slashes", + "dt": "urlencode_strict" + }, + { + "dd": "Can return an alternative text if the argument is greater than one", + "dt": "pluralize" + }, + { + "dd": "Returns a number rounded", + "dt": "round" + }, + { + "dd": "Generates human-readable sizes for integers", + "dt": "filesizeformat" + }, + { + "dd": "Parses a timestamp into a date(time) string", + "dt": "date" + }, + { + "dd": "Escapes a string's HTML", + "dt": "escape" + }, + { + "dd": "Escapes XML special characters", + "dt": "escape_xml" + }, + { + "dd": "Marks a variable as safe: HTML will not be escaped", + "dt": "safe" + }, + { + "dd": "Accesses a value from an object when the key is not a valid identifier.", + "dt": "get" + }, + { + "dd": "Splits a string into an array of strings, separated by a pattern.", + "dt": "split" + }, + { + "dd": "Converts a value into an integer.", + "dt": "int" + }, + { + "dd": "Converts a value into a float.", + "dt": "float" + }, + { + "dd": "Transforms a value into its JSON representation", + "dt": "json_encode" + }, + { + "dd": "Returns a string representation of the value.", + "dt": "as_str" + }, + { + "dd": "Provides a default value if the name is not present in the context", + "dt": "default" + }, + { + "dd": "Converts the variable contents from markdown to HTML", + "dt": "markdown" + }, + { + "dd": "Encode the variable to base64", + "dt": "base64_encode" + }, + { + "dd": "Decode the variable from base64", + "dt": "base64_decode" + }, + { + "dd": "Format a number in a variety of ways", + "dt": "num_format" + } + ] +} diff --git a/content/docs/zola/filters.yaml b/content/docs/zola/filters.yaml new file mode 100644 index 0000000..c8d3b26 --- /dev/null +++ b/content/docs/zola/filters.yaml @@ -0,0 +1,150 @@ +- + dt: "lower" + dd: Converts string to lowercase +- + dt: "upper" + dd: Converts string to uppercase +- + dt: "wordcount" + dd: Counts the words in a string +- + dt: "capitalize" + dd: Capitalizes the first letter, lowercase the rest +- + dt: "replace" + dd: Takes two strings as arguments, replaces the first with the second +- + dt: "addslashes" + dd: Escapes quoted strings +- + dt: "slugify" + dd: Provides a slug for the string +- + dt: "title" + dd: Capitalizes each word in the string +- + dt: "trim" + dd: Removes leading and trailing whitespace +- + dt: "trim_start" + dd: Removes leading whitespace +- + dt: "trim_end" + dd: Removes trailing whitespace +- + dt: "trim_start_matches" + dd: Removes leading characters that match a pattern +- + dt: "trim_end_matches" + dd: Removes trailing characters that match a pattern +- + dt: "truncate" + dd: Truncates the string to the length specified +- + dt: "linebreaksbr" + dd: Replaces line breaks (\n or \r\n) with HTML line breaks (
) +- + dt: "spaceless" + dd: Remove space ( ) and line breaks (\n or \r\n) between HTML tags +- + dt: "striptags" + dd: Tries to remove HTML tags from input +- + dt: "first" + dd: Returns the first element of an array +- + dt: "last" + dd: Returns the last element of an array +- + dt: "nth" + dd: Returns the nth element of an array +- + dt: "join" + dd: Joins an array with a delimeter +- + dt: "length" + dd: Returns the length of an array, an object, or a string +- + dt: "reverse" + dd: Returns a reversed string or array +- + dt: "sort" + dd: Sorts an array into ascending order. You can sort objects by providing a fieldname argument +- + dt: "unique" + dd: Removes duplicate items from an array. You can filter objects by providing a fieldname argument +- + dt: "slice" + dd: Slices an array by the given start and end parameter +- + dt: "group_by" + dd: Groups an array using the required attribute argument +- + dt: "filter" + dd: Filters the array values, returning objects whose attribute is equal to the argument +- + dt: "map" + dd: Retrieves an attribute from each object in an array +- + dt: "concat" + dd: Appends values to an array +- + dt: "urlencode" + dd: Performs classic (%-based) URL encoding +- + dt: "urlencode_strict" + dd: Encodes URLs, including any slashes +- + dt: "pluralize" + dd: Can return an alternative text if the argument is greater than one +- + dt: "round" + dd: Returns a number rounded +- + dt: "filesizeformat" + dd: Generates human-readable sizes for integers +- + dt: "date" + dd: Parses a timestamp into a date(time) string +- + dt: "escape" + dd: Escapes a string's HTML +- + dt: "escape_xml" + dd: Escapes XML special characters +- + dt: "safe" + dd: "Marks a variable as safe: HTML will not be escaped" +- + dt: "get" + dd: Accesses a value from an object when the key is not a valid identifier. +- + dt: "split" + dd: Splits a string into an array of strings, separated by a pattern. +- + dt: "int" + dd: Converts a value into an integer. +- + dt: "float" + dd: Converts a value into a float. +- + dt: "json_encode" + dd: Transforms a value into its JSON representation +- + dt: "as_str" + dd: Returns a string representation of the value. +- + dt: "default" + dd: Provides a default value if the name is not present in the context +- + dt: "markdown" + dd: Converts the variable contents from markdown to HTML +- + dt: "base64_encode" + dd: Encode the variable to base64 +- + dt: "base64_decode" + dd: Decode the variable from base64 +- + dt: "num_format" + dd: Format a number in a variety of ways diff --git a/sass/design/_reset.scss b/sass/design/_reset.scss new file mode 100644 index 0000000..ae9be7b --- /dev/null +++ b/sass/design/_reset.scss @@ -0,0 +1,76 @@ +/*** + The new CSS reset - version 1.5.1 (last updated 1.3.2022) + GitHub page: https://github.com/elad2412/the-new-css-reset +***/ + +/* + Remove all the styles of the "User-Agent-Stylesheet", except for the 'display' property + - The "symbol *" part is to solve Firefox SVG sprite bug +*/ +*:where(:not(iframe, canvas, img, svg, video):not(svg *, symbol *)) { + all: unset; + display: revert; +} + +/* Preferred box-sizing value */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +/* Reapply the pointer cursor for anchor tags */ +a, button { + cursor: revert; +} + +/* Remove list styles (bullets/numbers) */ +ol, ul, menu { + list-style: none; +} + +/* For images to not be able to exceed their container */ +img { + max-width: 100%; +} + +/* removes spacing between cells in tables */ +table { + border-collapse: collapse; +} + +/* revert the 'white-space' property for textarea elements on Safari */ +textarea { + white-space: revert; +} + +/* minimum style to allow to style meter element */ +meter { + -webkit-appearance: revert; + appearance: revert; +} + +/* reset default text opacity of input placeholder */ +::placeholder { + color: unset; +} + +/* fix the feature of 'hidden' attribute. + display:revert; revert to element instead of attribute */ +:where([hidden]) { + display: none; +} + +/* revert for bug in Chromium browsers + - fix for the content editable attribute will work properly. */ +:where([contenteditable]) { + -moz-user-modify: read-write; + -webkit-user-modify: read-write; + overflow-wrap: break-word; + -webkit-line-break: after-white-space; +} + +/* apply back the draggable feature - exist only in Chromium and Safari */ +:where([draggable="true"]) { + -webkit-user-drag: element; +} diff --git a/sass/design/_scales.scss b/sass/design/_scales.scss new file mode 100644 index 0000000..8475bc4 --- /dev/null +++ b/sass/design/_scales.scss @@ -0,0 +1,43 @@ +/* @link https://utopia.fyi/type/calculator?c=320,12,1.2,1024,24,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l|xs-m */ + + +:root { + --step--2: calc(clamp(0.52rem, calc(0.43rem + 0.45vw), 0.72rem)); + --step--1: calc(clamp(0.63rem, calc(0.50rem + 0.63vw), 0.90rem)); + --step-0: calc(clamp(0.75rem, calc(0.58rem + 0.85vw), 1.13rem)); + --step-1: calc(clamp(0.90rem, calc(0.67rem + 1.15vw), 1.41rem)); + --step-2: calc(clamp(1.08rem, calc(0.77rem + 1.54vw), 1.76rem)); + --step-3: calc(clamp(1.30rem, calc(0.89rem + 2.05vw), 2.20rem)); + --step-4: calc(clamp(1.56rem, calc(1.01rem + 2.71vw), 2.75rem)); + --step-5: calc(clamp(1.87rem, calc(1.15rem + 3.56vw), 3.43rem)); + --half-step-0: calc(clamp(0.75rem, calc(0.58rem + 0.85vw), 1.13rem) / 2); +} + +/* @link https://utopia.fyi/space/calculator?c=320,12,1.2,1024,24,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l|xs-m */ + +:root { + --space-3xs: calc(clamp(0.19rem, calc(0.1rem + 0.43vw), 0.38rem)); + --space-2xs: calc(clamp(0.38rem, calc(0.2rem + 0.85vw), 0.75rem)); + --space-xs: calc(clamp(0.56rem, calc(0.31rem + 1.28vw), 1.13rem)); + --space-s: calc(clamp(0.75rem, calc(0.41rem + 1.7vw), 1.5rem)); + --space-m: calc(clamp(1.13rem, calc(0.61rem + 2.56vw), 2.25rem)); + --space-l: calc(clamp(1.5rem, calc(0.82rem + 3.41vw), 3rem)); + --space-xl: calc(clamp(2.25rem, calc(1.23rem + 5.11vw), 4.5rem)); + --space-2xl: calc(clamp(3rem, calc(1.64rem + 6.82vw), 6rem)); + --space-3xl: calc(clamp(4.5rem, calc(2.45rem + 10.23vw), 9rem)); + + /* One-up pairs */ + --space-3xs-2xs: calc(clamp(0.19rem, calc(-0.07rem + 1.28vw), 0.75rem)); + --space-2xs-xs: calc(clamp(0.38rem, calc(0.03rem + 1.7vw), 1.13rem)); + --space-xs-s: calc(clamp(0.56rem, calc(0.14rem + 2.13vw), 1.5rem)); + --space-s-m: calc(clamp(0.75rem, calc(0.07rem + 3.41vw), 2.25rem)); + --space-m-l: calc(clamp(1.13rem, calc(0.27rem + 4.26vw), 3rem)); + --space-l-xl: calc(clamp(1.5rem, calc(0.14rem + 6.82vw), 4.5rem)); + --space-xl-2xl: calc(clamp(2.25rem, calc(0.55rem + 8.52vw), 6rem)); + --space-2xl-3xl: calc(clamp(3rem, calc(0.27rem + 13.64vw), 9rem)); + + /* Custom pairs */ + --space-s-l: calc(clamp(0.75rem, calc(-0.27rem + 5.11vw), 3rem)); + --space-xs-m: calc(clamp(0.56rem, calc(-0.2rem + 3.84vw), 2.25rem)); + --space-3xs-l: clamp(0.19rem, calc(-1.09rem + 6.39vw), 3.00rem); +} diff --git a/sass/design/_typography.scss b/sass/design/_typography.scss index 633e3c0..7a6b01a 100644 --- a/sass/design/_typography.scss +++ b/sass/design/_typography.scss @@ -1,10 +1,10 @@ $headers: - h1 ".h1" 1.9535rem 1.2 500, - h2 ".h2" 1.5625rem 1.25 500, - h3 ".h3" 1.25rem 1.3 500, - h4 ".h4" 1.0rem 1.4 700, - h5 ".h5" 0.8rem 1.5 500, - h6 ".h6" 0.64rem 1.4 500; + h1 ".h1" var(--step-4) 1.1 700, + h2 ".h2" var(--step-3) 1.25 500, + h3 ".h3" var(--step-2) 1.1 500, + h4 ".h4" var(--step-1) 1.35 700, + h5 ".h5" var(--step-0) 1.5 500, + h6 ".h6" var(--step--1) 1.4 500; @each $type, $ptype, $size, $height, $weight in $headers { #{$type} { @@ -19,3 +19,4 @@ $headers: font-weight: $weight; } } + diff --git a/sass/main.scss b/sass/main.scss index 8555eec..e2efa68 100644 --- a/sass/main.scss +++ b/sass/main.scss @@ -3,6 +3,7 @@ @import "design/fonts/nunito"; @import "design/fonts/sauna_mono"; @import "design/typography"; +@import "design/_scales"; @import "components/code"; :root { @@ -100,3 +101,12 @@ article.text-article { } } +dl { + margin-left: var(--space-m); + dt { + font-weight: 500; + } + dd { + margin-left: var(--space-m); + } +} diff --git a/templates/macros/definition_body.html b/templates/macros/definition_body.html index a8ef1f0..d2c07f3 100644 --- a/templates/macros/definition_body.html +++ b/templates/macros/definition_body.html @@ -1,7 +1,7 @@ {% macro definition_body(source) %}
{% for entry in source %} -
{{ entry.dt | safe }}
+
{{ entry.dt | safe }}
{{ entry.dd | safe }}
{% if entry.definitions %}{{ self::definition_body(source=entry.definitions) }}{% endif %} {% endfor %}