@mlut/core 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export declare const locationOrigin = "http://localhost/sass";
2
+ export declare const sassIndexFileName = "_index.scss";
@@ -0,0 +1,2 @@
1
+ export const locationOrigin = 'http://localhost/sass';
2
+ export const sassIndexFileName = '_index.scss';
@@ -1,34 +1,8 @@
1
1
  import { path } from '../utils/path.js';
2
- import { sassSourcesLoader } from './SassSourcesLoader.js';
3
- const locationOrigin = globalThis.location?.origin ?? 'http://localhost';
4
- const sassIndexFileName = '_index.scss';
5
- async function loadSourcesRecursive(loader) {
6
- const result = new Map();
7
- const pathPrefix = locationOrigin + '/';
8
- const doLoadRecursive = async (entry, map) => {
9
- const files = await loader.loadDir(entry);
10
- await Promise.all(files.map(async (item) => {
11
- const itemPath = path.join(entry, item);
12
- const isDir = loader.isDir(itemPath);
13
- if (isDir) {
14
- await doLoadRecursive(itemPath, map);
15
- }
16
- else {
17
- const pathObj = path.parse(itemPath);
18
- if (pathObj.base !== sassIndexFileName && pathObj.base.startsWith('_')) {
19
- pathObj.base = pathObj.base.slice(1);
20
- }
21
- const finalPath = pathPrefix + path.format(pathObj);
22
- map.set(finalPath, (await loader.loadFile(itemPath)));
23
- }
24
- }));
25
- return map;
26
- };
27
- return doLoadRecursive(sassSourcesLoader.initPath, result);
28
- }
29
- const modulesMap = await loadSourcesRecursive(sassSourcesLoader);
2
+ import { sourcesMap } from '../sass/index.js';
3
+ import { locationOrigin, sassIndexFileName } from './importerConfig.js';
30
4
  export class ModuleImporter {
31
- modules = modulesMap;
5
+ modules = sourcesMap;
32
6
  aliases = {
33
7
  '@mlut/core': '../sass/index',
34
8
  '@mlut/core/tools': '../sass/tools',
@@ -46,19 +20,19 @@ export class ModuleImporter {
46
20
  const isEntryUrl = !url.startsWith('http');
47
21
  let newUrl = url + '.scss';
48
22
  if (isEntryUrl) {
49
- newUrl = new URL(path.join(locationOrigin, sassSourcesLoader.initPath, url.split('sass')[1]) + '.scss').href;
23
+ newUrl = new URL(path.join(locationOrigin, url.split('sass')[1]) + '.scss').href;
50
24
  }
51
- if (!this.modules.has(newUrl)) {
25
+ if (!(newUrl in this.modules)) {
52
26
  newUrl = path.join(newUrl.replace('.scss', ''), sassIndexFileName);
53
27
  }
54
28
  return new URL(newUrl);
55
29
  };
56
30
  load = (canonicalUrl) => {
57
- if (!this.modules.has(canonicalUrl.href)) {
31
+ if (!(canonicalUrl.href in this.modules)) {
58
32
  throw new Error('Unknown module');
59
33
  }
60
34
  return {
61
- contents: this.modules.get(canonicalUrl.href),
35
+ contents: this.modules[canonicalUrl.href],
62
36
  syntax: 'scss'
63
37
  };
64
38
  };
@@ -0,0 +1 @@
1
+ export const sourcesMap: Record<string, string>;
@@ -0,0 +1 @@
1
+ export const sourcesMap = {"http://localhost/sass/index.d.ts":"export const sourcesMap: Record<string, string>;","http://localhost/sass/index.scss":"@charset 'utf-8';\n\n@forward 'tools';\n@forward 'css';\n","http://localhost/sass/addons/demo-theme.scss":"@use 'sass:map';\n@use '../tools' as ml;\n\n// Demo theme\n//\n// A full-fledged design theme to create an interface. Contains a set of utilities and a colors palette.\n//\n// By default (in JIT mode), only the palette will be loaded. If you want to load and generate utilities (AOT), pass `$is-aot: true` to the module configuration.\n//\n// Styleguide: addons.catalog.demo_theme\n\n// Colors\n//\n// Colors are automatically loaded into the mlut settings, so you can use them when adding utilities or styles. Utilities with colors are generated with [range syntax](section-how_to.html#kssref-how_to-mk_utils-range-color).\n// - step of color shade: **25**\n// - step in the value of utilities: **50**\n// - shades for each color: **8**. This means that for each color there are shades from 0 to 350. For example: `C-red0`, `Bgc-blue150`\n//\n// Name | Base color\n// :--- | :---\n// gray | <span style=\"background-color: #c5ccd3\">#c5ccd3</span>\n// red | <span style=\"background-color: #ff5c5c\"><span style=\"color: white\">#ff5c5c</span></span>\n// orange | <span style=\"background-color: #ffad5c\">#ffad5c</span>\n// yellow | <span style=\"background-color: #faeb61\">#faeb61</span>\n// green | <span style=\"background-color: #70fa61\">#70fa61</span>\n// aqua | <span style=\"background-color: #5cffbb\">#5cffbb</span>\n// blue | <span style=\"background-color: #62a8f8\">#62a8f8</span>\n// purple | <span style=\"background-color: #d35cff\">#d35cff</span>\n//\n// Styleguide: addons.catalog.demo_theme.colors\n\n$demo-colors: (\n\t'gray0': #c5ccd3,\n\t'red0': #ff5c5c,\n\t'orange0': #ffad5c,\n\t'yellow0': #faeb61,\n\t'green0': #70fa61,\n\t'aqua0': #5cffbb,\n\t'blue0': #62a8f8,\n\t'purple0': #d35cff,\n);\n\nml.$utils-db: map.merge(\n\tml.$utils-db, 'common', 'keywords', 'colors',\n\tmap.merge(\n\t\t$demo-colors,\n\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'colors')\n\t)\n);\n\n$is-aot: false !default;\n$shade-step: -25 !default;\n$-color-names: map.keys($demo-colors);\n\n@if $is-aot {\n\t$generate: true !default;\n\t$colors-at-rules: ml.$kBpAll !default;\n\t$colors-pre-states: '^:h' !default;\n\t$colors-post-states: 'h f fw ph' !default;\n\n\t$colors-at-rules: $colors-at-rules and $colors-at-rules + '_';\n\t$colors-pre-states: $colors-pre-states and $colors-pre-states + ' _';\n\t$colors-post-states: $colors-post-states and '_ ' + $colors-post-states;\n\n\t$-colors-key: $colors-at-rules + $colors-pre-states + 'Colors' + $colors-post-states;\n\n\t//stylelint-disable\n\t$demo-utils: (\n\t\tml.$cBpAllCp + 'W': (5u, 10u, 20u, 25u, 40u, 70u),\n\t\tml.$cBpAllCp + 'H': (5u, 10u, 20u, 25u),\n\t\t$-colors-key: ([\n\t\t$-color-names, 8, ('rgb': $shade-step)\n\t], 'white'),\n\t\tml.$cBpAllCp + 'Fns': ([1u, 8], 3gg, 14u, 4gg, 5gg),\n\t\tml.$cBpAllCp + 'Lnh': (\n\t\t\t'md': 1.4,\n\t\t\t'lg': 1.6,\n\t\t\t'xl': 1.8,\n\t\t\t'xxl': 2,\n\t\t),\n\t\tml.$cBpAllCp + 'Offsets': ([1u, 8],),\n\t\tml.$cBpAllCp + 'Translates': ([1u, 8], [-8u, -1]),\n\t\tml.$cBpAllCp + 'BdWidth': (1u, 2u),\n\t\tml.$cBpAllCp + 'BdRadius': (2, [1u, 4]),\n\t\tml.$kBpAll + ' #{ml.$kArSt}_^:h _O_ h f fw': ([10p, 90, 10],),\n\t\tml.$kBpAll + ' #{ml.$kArSt}_^:h _Bxsd_ h f fw': (\n\t\t\t'sm': rgba(0, 0, 0, 0.16) 0px 1px 4px,\n\t\t\t'md': rgba(0, 0, 0, 0.24) 0px 3px 8px,\n\t\t\t'lg': rgba(0, 0, 0, 0.35) 0px 5px 15px,\n\t\t),\n\t\tml.$cArStBp + '-S_ h f': (0.8, 0.9, 1.1, 1.2, 1.5),\n\t);\n\n\t@if $generate {\n\t\tml.$utils-map: map.set(\n\t\t\tml.$utils-map,\n\t\t\t'demo-theme',\n\t\t\t$demo-utils\n\t\t);\n\t}\n} @else {\n\tml.$utils-db: map.merge(\n\t\tml.$utils-db, 'common', 'keywords', 'colors',\n\t\tmap.merge(\n\t\t\tmap.get(\n\t\t\t\tml.generate-uv-color-range([$-color-names, 8, ('rgb': $shade-step)], 'C'),\n\t\t\t\t'values',\n\t\t\t),\n\t\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'colors')\n\t\t)\n\t);\n}\n","http://localhost/sass/css/base-setup.scss":"@forward 'styles';\n@forward 'helpers';\n@forward 'utils/load';\n","http://localhost/sass/css/_index.scss":"@forward 'styles';\n@forward 'helpers';\n","http://localhost/sass/tools/_index.scss":"@forward 'settings';\n@forward 'functions' hide\n\tstr-split, str-trim, remove-nth, str-replace, str-replace-all, str-starts, ls-join, ls-find, str-hex2color, str-contains-item;\n@forward 'mixins';\n","http://localhost/sass/css/helpers/btn.scss":"@use '../../tools' as ml;\n\n/*\nBtn\n\nHelper for creating buttons. Prepares any element to styling as a button.\n\nMarkup: ../../../docs/examples/css_lib-helpers/btn/btn.html\n\nStyleguide: css_lib.helpers.btn\n*/\n\n.btn {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n\tline-height: inherit;\n\ttext-align: center;\n\ttext-decoration: none;\n\tvertical-align: middle;\n\tbackground: none;\n\tborder: 0;\n\tcursor: pointer;\n\n\t@if not ml.$base-border-box {\n\t\tbox-sizing: border-box;\n\t}\n}\n","http://localhost/sass/css/helpers/_index.scss":"@forward 'btn';\n@forward 'wrapper';\n@forward 'ratio-box';\n","http://localhost/sass/css/helpers/gs-debug.scss":"@use '../../tools' as ml;\n\n/*\nGrid-system debug\n\nHelper for debugging layouts that built with grid system. It displays a grid system columns and gutters in the background of the container. The grid system are generated depending on the [settings](section-settings.html#kssref-settings-gs).\n\nThere may be minor inaccuracies in the drawing of the grid, because the grid is generated with CSS `linear-gradient()`. For gutters calculation are used [CSS custom properties](section-css_lib.html#kssref-css_lib-styles-css_vars).\n\nIt **not included** in the default mlut distributive.\n\nMarkup: ../../../docs/examples/css_lib-helpers/grid-debug/grid-debug.html\n\nStyleguide: css_lib.helpers.gs-debug\n*/\n\n.gs-debug {\n\t/* autoprefixer: off */\n\tpadding: calc(var(ml.$var-gg) * 3) 0px;\n\tbackground-image: linear-gradient(\n\t\t90deg,\n\t\tml.$gs-debug-gtr-color var(ml.$var-gg),\n\t\tml.$gs-debug-col-color var(ml.$var-gg),\n\t\tml.$gs-debug-col-color calc(100% - var(ml.$var-gg)),\n\t\tml.$gs-debug-gtr-color 0\n\t);\n\tbackground-size: calc(1 / var(ml.$var-gscc) * 100%);\n}\n","http://localhost/sass/css/helpers/row.scss":"@use '../../tools' as ml;\n\n/*\nRow\n\nHelper for creating layouts. Suitable for columns, cards and horizontal lists. By default, flexbox technology is used for layouts.\n\nParts of the layout within a `row` are created using the elements:\n* [row__col](#kssref-css_lib-helpers-row-row__col)\n* [row__item](#kssref-css_lib-helpers-row-row__item)\n\n`Rows` can be put into each other an unlimited number of times.\n\n`Row` contains CSS counter named `ml-row-item`.\n\nIt **not included** in the default mlut distributive because partially based on the legacy grid system. It is recommended to use the [CSS grid](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout) utilities instead.\n\nMarkup: ../../../docs/examples/css_lib-helpers/row/row.html\n\nStyleguide: css_lib.helpers.row\n*/\n\n/*\nrow__col\n\nThe main element for creating columns in layout. By default, it stretches the entire width of the container. The columns have gutters on the sides and bottom.\n\nThe gutters are implemented using the `margin` and [CSS custom properties](section-css_lib.html#kssref-css_lib-styles-css_vars).\n\nColumn width is set using [W utility](section-utils-reference.html#kssref-utils-reference-w). See example [above](#kssref-css_lib-helpers-row). The formulas for calculating the width and offset for the column are stored in the custom properties. In `--ml-gscf` for W and `--ml-gsof` for [Ml utility](section-utils-reference.html#kssref-utils-reference-ml). These formulas:\n```scss\n--ml-gscf: calc(var(--ml-gsc) / var(--ml-gscc) * 100% - var(--ml-gsfd, var(--ml-gg)) * 2);\n--ml-gsof: calc(var(--ml-gso) / var(--ml-gscc) * 100% + var(--ml-gsfd, var(--ml-gg)));\n```\n`--ml-gsc` or `--ml-gso` is the value of the width or offset in the grid columns. This is a custom property of the utility.<br>\n`--ml-gscc` - the number of columns in the grid system. This is a [global](section-css_lib.html#kssref-css_lib-styles-css_vars) custom property that can be changed on any DOM node.<br>\n`--ml-gsfd` - variable is equal to the gutter if the gutter at the columns is created using margin. In `row__col` is equal `1gg`.<br>\nSome of these variables can be changed using [custom utilities](section-utils-reference.html#kssref-utils-reference--gscc).\n\nYou can create nested layouts with a mix of `row` and `row__col` on the same DOM node. If you don't need double fields in the nested row, use the mix with the `row__item`. See example below.\n\nMarkup: ../../../docs/examples/css_lib-helpers/row/row__col.html\n\nStyleguide: css_lib.helpers.row.row__col\n*/\n\n/*\nrow__item\n\nElement for creating parts of the layout. By default, it stretches across the width of the content.\n\nThe sizes and offsets are set with help of utilities.\n\nLike a `row__col`, an element contains formulas for calculating width and offset. But `--ml-gsfd` here is equal 0px.\n\nMarkup: ../../../docs/examples/css_lib-helpers/row/row__item.html\n\nStyleguide: css_lib.helpers.row.row__item\n*/\n\n.row {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tpadding: 0px;\n\tlist-style: none;\n\tcounter-reset: ml-row-item;\n\n\t@include ml.apply('M0;-1gg');\n}\n\n.row__col,\n.row__item {\n\t#{ml.$var-gsfd}: 0px;\n\tmax-width: 100%;\n\n\t@if not ml.$base-border-box {\n\t\tbox-sizing: border-box;\n\t}\n\n\t@include ml.apply('-Gsf');\n\n\t& > :first-child:not([class]) {\n\t\tmargin-top: 0px;\n\t}\n\n\t& > :last-child:not([class]) {\n\t\tmargin-bottom: 0px;\n\t}\n}\n\n.row__col {\n\t@include ml.apply('-Gsfd1gg W12gc M0;1gg;2gg');\n\n\t&.row {\n\t\tmargin-bottom: 0px;\n\t}\n}\n","http://localhost/sass/css/helpers/ratio-box.scss":"@use '../../tools' as ml;\n\n/*\nRatio-box\n\nHelper for creating containers, with proportional width and height. Implemented using a pseudo-element with a `padding-bottom` in %.\n\nThe default aspect ratio is 16:9.\n\n.Pt75p_b - 4:3 aspect ratio.\n.Pt100p_b - 1:1 aspect ratio.\n\nMarkup: ../../../docs/examples/css_lib-helpers/ratio-block/ratio-block.hbs\n\nStyleguide: css_lib.helpers.ratio-box\n*/\n\n.ratio-box {\n\tposition: relative;\n\n\t&::before {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding-top: 56.25%;\n\t\tcontent: '';\n\t}\n\n\t> :first-child {\n\t\tposition: absolute;\n\t\ttop: 0px;\n\t\tleft: 0px;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n}\n\n@if ml.$ratio-box-flex {\n\t.ratio-box-flex {\n\t\t&::before {\n\t\t\tfloat: left;\n\t\t\tpadding-top: 56.25%;\n\t\t\tcontent: '';\n\t\t}\n\n\t\t@include ml.apply('-Cl');\n\t}\n}\n","http://localhost/sass/css/styles/_index.scss":"@forward 'variables';\n@forward 'generic';\n","http://localhost/sass/css/helpers/wrapper.scss":"@use '../../tools' as ml;\n\n/*\nWrapper\n\nThe helper-container for the main content of the page. The maximum width is set in the [settings](section-settings.html#kssref-settings-general). The default is `1200px`.\n\nThe container has sides `padding` that equal to gutters so that the content does not stick to sides on small screens. On wide screens the container is centered.\n\nMarkup: ../../../docs/examples/css_lib-helpers/wrapper/wrapper.html\n\nStyleguide: css_lib.helpers.wrapper\n*/\n\n.wrapper {\n\tdisplay: block;\n\tmax-width: ml.$wrapper-max-width;\n\tmargin: 0 auto;\n\n\t@include ml.apply('-Px1gg');\n}\n","http://localhost/sass/css/styles/variables.scss":"@use '../../tools' as ml;\n\n/*\nCSS variables\n\nGlobal CSS custom properties which used in mlut.\n\n--ml-gg = 0.75rem - [grid gutter](section-concepts.html#kssref-concepts-custom_unit-gg).\n--ml-gscc = 12 - number of columns in the grid system. Sets by [$gs-columns](section-settings.html#kssref-settings-gs). Available only with `$legacy-grid-system` flag enabled\n\nStyleguide: css_lib.styles.css_vars\n*/\n\n:root {\n\t$prev-value: ml.$gtr-first;\n\n\t#{ml.$var-gg}: ml.$gtr-first;\n\n\t@if ml.$legacy-grid-system {\n\t\t#{ml.$var-gscc}: ml.$gs-columns;\n\t}\n\n\t@each $key, $value in ml.$gs-gutters {\n\t\t@if $value != $prev-value {\n\t\t\t@include ml.bp($key) {\n\t\t\t\t#{ml.$var-gg}: $value;\n\t\t\t}\n\t\t}\n\n\t\t$prev-value: $value;\n\t}\n}\n","http://localhost/sass/css/styles/generic.scss":"@use 'sass:map';\n\n@use '../../tools/settings' as ml;\n\n/*\nGeneric\n\nGeneric CSS that contains `box-sizing`, reset, browser bugs fixes etc. You can configure it with settings.\n\nStyleguide: css_lib.styles.generic\n*/\n\n//stylelint-disable\n\n/*! purgecss start ignore */\n@if map.get(ml.$general-cfg, 'generic-css') {\n\t// Prevent adjustments of font size after orientation changes in iOS\n\thtml {\n\t\t-webkit-text-size-adjust: 100%;\n\t}\n\n\t// Box-sizing should be border-box by default. (c) CSSWG\n\t@if ml.$base-border-box {\n\t\thtml {\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\t*,\n\t\t*::before,\n\t\t*::after {\n\t\t\tbox-sizing: inherit;\n\t\t}\n\t}\n\n\t// Add the ability to set border only with `Bd*w` utils\n\t@if map.get(ml.$general-cfg, 'generic-css', 'reset-border') {\n\t\t*,\n\t\t*::before,\n\t\t*::after {\n\t\t\tborder: 0 solid;\n\t\t}\n\t}\n\n\tbody {\n\t\tmargin: 0px;\n\t}\n\n\t// Render 'main' tag consistently in IE.\n\tmain {\n\t\tdisplay: block;\n\t}\n\n\t/*\n\t1. Add the correct height in Firefox.\n\t2. Show the overflow in IE\n\t3. Correct the inheritance of border color in Firefox\n\t*/\n\thr {\n\t\theight: 0; // 1\n\t\toverflow: visible; // 2\n\t\tcolor: inherit; // 3\n\t}\n\n\t// Add the correct font weight in Edge and Safari.\n\tb,\n\tstrong {\n\t\tfont-weight: bolder;\n\t}\n\n\t// Correct the inheritance and scaling of font size in all browsers\n\tcode,\n\tkbd,\n\tsamp,\n\tpre {\n\t\tfont-family: monospace, monospace;\n\t}\n\n\t// Add the correct text decoration in IE and Safari\n\tabbr[title] {\n\t\ttext-decoration: underline dotted;\n\t}\n\n\t// Prevent 'sub' and 'sup' elements from affecting the line height in all browsers\n\t@if map.get(ml.$general-cfg, 'generic-css', 'sup-sub-no-v-align') {\n\t\tsub,\n\t\tsup {\n\t\t\tline-height: 0;\n\t\t\tposition: relative;\n\t\t\tvertical-align: baseline;\n\t\t\ttop: -.4em;\n\t\t}\n\n\t\tsub {\n\t\t\ttop: .3em;\n\t\t}\n\t}\n\n\t/**\n\t1. Remove text indentation from table contents in Chrome and Safari\n\t2. Correct table border color inheritance in all Chrome and Safari\n\t*/\n\ttable {\n\t\ttext-indent: 0; // 1\n\t\tborder-color: inherit; // 2\n\t}\n\n\t@if map.get(ml.$general-cfg, 'generic-css', 'embeds-v-align') {\n\t\timg, svg, video, canvas, audio, iframe, embed, object {\n\t\t\tvertical-align: bottom;\n\n\t\t\t@if map.get(ml.$general-cfg, 'generic-css', 'embeds-block') {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\t}\n\n\tsource {\n\t\tdisplay: none;\n\t}\n\n\t@if map.get(ml.$general-cfg, 'generic-css', 'embeds-aspect-ratio') {\n\t\timg,\n\t\tsvg,\n\t\tcanvas,\n\t\tvideo {\n\t\t\tmax-width: 100%;\n\t\t\theight: auto;\n\t\t}\n\t}\n\n\t@if map.get(ml.$general-cfg, 'generic-css', 'svg-fill-cur-color') {\n\t\tsvg:not([fill]) {\n\t\t\tfill: currentColor;\n\t\t}\n\t}\n\n\t// Add the correct display in IE\n\t[hidden],\n\ttemplate {\n\t\tdisplay: none;\n\t}\n\n\t// Correct the text wrapping in IE.\n\tlegend {\n\t\tdisplay: table;\n\t\tmax-width: 100%;\n\t\twhite-space: normal;\n\n\t\t@if not ml.$base-border-box {\n\t\t\tbox-sizing: border-box;\n\t\t}\n\t}\n\n\t// Add the correct display in Chrome and Safari.\n\tsummary {\n\t\tdisplay: list-item;\n\t}\n\n\t// Add the correct vertical alignment in Chrome and Firefox\n\tprogress {\n\t\tvertical-align: baseline;\n\t}\n\n\t/**\n\t1. Change the font styles in all browsers.\n\t2. Remove the margin in Firefox and Safari.\n\t*/\n\t@if map.get(ml.$general-cfg, 'generic-css', 'forms-normalize') {\n\t\tbutton,\n\t\tinput,\n\t\toptgroup,\n\t\tselect,\n\t\ttextarea {\n\t\t\tfont-family: inherit; // 1\n\t\t\tfont-size: 100%; // 1\n\t\t\tmargin: 0; // 2\n\n\t\t\t@if map.get(ml.$general-cfg, 'generic-css', 'reset') {\n\t\t\t\tcolor: inherit;\n\t\t\t\tline-height: inherit;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove the inheritance of text transform in IE.\n\tbutton {\n\t\ttext-transform: none;\n\t}\n\n\t// Correct the inability to style clickable types in iOS and Safari.\n\tbutton,\n\t[type='button'],\n\t[type='reset'],\n\t[type='submit'] {\n\t\t-webkit-appearance: button;\n\t}\n\n\t/*\n\t1. Correct the odd appearance in Chrome and Safari.\n\t2. Correct the outline style in Safari.\n\t*/\n\t[type='search'] {\n\t\t-webkit-appearance: textfield; // 1\n\t\toutline-offset: -2px; // 2\n\t}\n\n\t// Remove the default vertical scrollbar in IE\n\ttextarea {\n\t\toverflow: auto;\n\t}\n\n\t// Remove the inner border and padding in Firefox.\n\t::-moz-focus-inner {\n\t\tborder: 0;\n\t\tpadding: 0;\n\t}\n\n\t// Remove the additional ':invalid' styles in Firefox\n\t// TODO: remove it when a percent of the FF 78 ESR users will be below 0.1%\n\t// because it was fixed in FF 86\n\t:-moz-ui-invalid {\n\t\tbox-shadow: none;\n\t}\n\n\t// Correct the cursor style of increment and decrement buttons in Safari.\n\t::-webkit-inner-spin-button,\n\t::-webkit-outer-spin-button {\n\t\theight: auto;\n\t}\n\n\t// Remove the inner padding in Chrome and Safari on macOS.\n\t::-webkit-search-decoration {\n\t\t-webkit-appearance: none;\n\t}\n\n\t/**\n\t1. Correct the inability to style clickable types in iOS and Safari.\n\t2. Change font properties to 'inherit' in Safari.\n\t*/\n\t::-webkit-file-upload-button {\n\t\t-webkit-appearance: button; // 1\n\t\tfont: inherit; // 2\n\t}\n\n\t@if map.get(ml.$general-cfg, 'generic-css', 'default-reduce-motion') {\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t*,\n\t\t\t::before,\n\t\t\t::after {\n\t\t\t\tanimation-delay: -1ms !important;\n\t\t\t\tanimation-duration: 1ms !important;\n\t\t\t\tanimation-iteration-count: 1 !important;\n\t\t\t\tbackground-attachment: initial !important;\n\t\t\t\tscroll-behavior: auto !important;\n\t\t\t\ttransition-delay: 0s !important;\n\t\t\t\ttransition-duration: 0s !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t@if map.get(ml.$general-cfg, 'generic-css', 'reset') {\n\t\tp, blockquote, iframe,\n\t\tpre, figure, fieldset, hr,\n\t\tbutton, input, optgroup,\n\t\tselect, legend, textarea,\n\t\tul, ol, li, dl, dt, dd, td, th\n\t\t{\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6 {\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: inherit;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\tul, ol {\n\t\t\tlist-style: none;\n\t\t}\n\n\t\ttable {\n\t\t\tborder-collapse: collapse;\n\t\t}\n\n\t\taddress {\n\t\t\tfont-style: inherit;\n\t\t}\n\t}\n}\n/*! purgecss end ignore */\n","http://localhost/sass/tools/functions/index.import.scss":"@forward 'base' as ml-*;\n@forward 'common' as ml-*;\n@forward 'high' as ml-*;\n","http://localhost/sass/tools/functions/_index.scss":"// Functions\n//\n// Most of the functions are used for internal needs and has not yet been documented. But some functions from here can be useful in ordinary code.\n//\n// Styleguide: sass-tools.functions\n\n@forward 'base';\n@forward 'common';\n@forward 'high';\n","http://localhost/sass/tools/mixins/index.import.scss":"@forward 'base' as ml-*;\n@forward 'high' as ml-*;\n","http://localhost/sass/tools/mixins/_index.scss":"// Mixins\n//\n// Useful mixins. Most of the mixins are used for internal needs, but some can be useful in ordinary code.\n//\n// Styleguide: sass-tools.mixins\n\n@forward 'base';\n@forward 'high';\n","http://localhost/sass/tools/settings/index.import.scss":"@forward 'base' as ml-*;\n@forward 'common' as ml-*;\n@forward 'high' as ml-*;\n","http://localhost/sass/tools/settings/_index.scss":"@forward 'base';\n@forward 'common';\n@forward 'high';\n","http://localhost/sass/tools/functions/base/_index.scss":"// Base\n//\n// Basic functions.\n//\n/// Styleguide: sass-tools.functions.base\n\n@forward 'error';\n@forward 'string';\n@forward 'list';\n@forward 'math';\n@forward 'getters';\n","http://localhost/sass/tools/functions/base/error.scss":"@use '../../settings/base/general' as ml;\n\n@function error($message, $catch: ml.$is-test-env) {\n\t@if $catch {\n\t\t@return 'ERROR: #{$message}';\n\t}\n\n\t@error '#{$message}';\n}\n","http://localhost/sass/tools/functions/base/getters.scss":"@use 'sass:list';\n@use 'sass:string';\n@use 'sass:map';\n@use 'sass:meta';\n\n@use '../../settings' as ml;\n\n// Getters\n//\n// Functions-getters from settings maps and more.\n//\n/// Styleguide: sass-tools.functions.getters\n\n/// Styleguide: sass-tools.functions.base.getters\n\n@function bp($name, $error-handler: 1) {\n\t@if map.has-key(ml.$bp-map, $name) or $error-handler == 0 {\n\t\t@return map.get(ml.$bp-map, $name);\n\t}\n\n\t@error 'Invalid breakpoint name: `#{$name}`. `#{$name}` is not defined in $ml-breakpoints';\n}\n\n@function bp-next($bp: 0, $data-type: 'value') {\n\t@if $bp == 0 or map.has-key(ml.$bp-map, $bp) {\n\t\t$bp-keys: map.keys(ml.$bp-map);\n\t\t$bp-index: if($bp != 0, list.index($bp-keys, $bp), 0);\n\n\t\t@if $data-type == 'name' {\n\t\t\t@return if($bp-index < list.length($bp-keys), list.nth(map.keys(ml.$bp-map), $bp-index + 1), 0);\n\t\t} @else {\n\t\t\t@return if($bp-index < list.length($bp-keys), list.nth(map.values(ml.$bp-map), $bp-index + 1), 0);\n\t\t}\n\t}\n\n\t@error 'Invalid breakpoint name: `#{$bp}`. `#{$bp}` is not defined in $ml-breakpoints';\n}\n\n@function bp-next-name($bp: 0) {\n\t@return bp-next($bp, 'name');\n}\n\n@function bp-prev($bp: 0, $data-type: 'value') {\n\t@if $bp == 0 or map.has-key(ml.$bp-map, $bp) {\n\t\t$bp-keys: map.keys(ml.$bp-map);\n\t\t$bp-index: if($bp != 0, list.index($bp-keys, $bp), list.length($bp-keys) + 1);\n\n\t\t@if $data-type == 'name' {\n\t\t\t@return if($bp-index > 1, list.nth(map.keys(ml.$bp-map), $bp-index - 1), 0);\n\t\t} @else {\n\t\t\t@return if($bp-index > 1, list.nth(map.values(ml.$bp-map), $bp-index - 1), 0);\n\t\t}\n\t}\n\n\t@error 'Invalid breakpoint name: `#{$bp}`. `#{$bp}` is not defined in $ml-breakpoints';\n}\n\n@function bp-prev-name($bp: 0) {\n\t@return bp-prev($bp, 'name');\n}\n\n@function grid-gtr($name, $error-handler: 1) {\n\t@if map.has-key(ml.$gs-gutters, $name) or $error-handler == 0 {\n\t\t@return map.get(ml.$gs-gutters, $name);\n\t}\n\n\t@error 'Invalid breakpoint name: `#{$name}`. `#{$name}` is not defined in $ml-gs-gutters';\n}\n\n@function css-var($name, $error-handler: 1) {\n\t@if map.has-key(ml.$general-cfg, 'css-vars', $name) or $error-handler == 0 {\n\t\t@return map.get(ml.$general-cfg, 'css-vars', $name);\n\t}\n\n\t@error 'Invalid custom property name. `#{$name}` is not defined in $ml-css-vars';\n}\n\n// util-prop\n//\n// Get the CSS property, which corresponds to the utility from registry.\n// ```scss\n//@debug ml.util-prop('D'); // 'display'\n//```\n//\n// $name - utility name\n// $section = 'utils' - section in the registry in which utility was defined\n// $name-as-prop = false - return the utility name as a property if it was not found\n// $single = false - return one property of the utility, even if there are several\n//\n// Styleguide: sass-tools.functions.utils.util_prop\n\n/// Styleguide: sass-tools.functions.getters.util_prop\n/// Styleguide: sass-tools.functions.base.getters.util_prop\n\n@function util-prop(\n\t$name, $section: 'utils', $name-as-prop: false, $single: false\n) {\n\t$options: map.get(ml.$utils-db, $section, 'registry', $name);\n\t$prop: null;\n\n\t@if meta.type-of($options) == 'map' {\n\t\t$prop-list: map.get($options, 'properties');\n\n\t\t@if $single {\n\t\t\t$prop: list.nth($prop-list, 1);\n\t\t} @else {\n\t\t\t$prop: $prop-list;\n\t\t}\n\t} @else {\n\t\t$prop: $options;\n\t}\n\n\t@return $prop or (\n\t\t$name-as-prop and if(\n\t\t\tstring.slice($name, 1, 1) == '-',\n\t\t\t(\n\t\t\t\t'--' + ml.$uv-css-var-prefix +\n\t\t\t\t// TODO: replace with str-lcfirst function\n\t\t\t\tstring.to-lower-case(string.slice($name, 2, 2)) + string.slice($name, 3)\n\t\t\t),\n\t\t\tstring.to-lower-case($name)\n\t\t)\n\t);\n}\n","http://localhost/sass/tools/functions/base/list.scss":"@use 'sass:meta';\n@use 'sass:string';\n@use 'sass:list';\n\n@use 'error' as *;\n\n// Private functions only for internal usage. I hope that in the future they will be built into Sass. And when it will happens I don't want that their removing broke backward compatibility.\n\n@function ls-implode($list, $separator: '') {\n\t$result: '';\n\n\t@each $item in $list {\n\t\t$result: $result + $item + $separator;\n\t}\n\n\t@return string.slice($result, 1, -1 - string.length($separator));\n}\n\n@function ls-find($list, $callback, $args...) {\n\t@if meta.type-of($callback) != 'function' {\n\t\t@return error(\n\t\t\t'Wrong type of argument $callback: `#{meta.type-of($callback)}`. Expected `function`'\n\t\t);\n\t}\n\n\t$i: 1;\n\n\t@each $item in $list {\n\t\t@if meta.call($callback, $item, $i, $args...) {\n\t\t\t@return $item;\n\t\t}\n\n\t\t$i: $i + 1;\n\t}\n\n\t@return null;\n}\n\n@function remove-nth($list, $index) {\n\t@if meta.type-of($index) != 'number' {\n\t\t@return error('Wrong type of argument $index: `#{meta.type-of($index)}`. Expected `number`');\n\t}\n\n\t$result: ();\n\t$i: 1;\n\n\t@each $item in $list {\n\t\t@if $i != $index {\n\t\t\t$result: list.append($result, $item);\n\t\t}\n\n\t\t$i: $i + 1;\n\t}\n\n\t@return $result;\n}\n","http://localhost/sass/tools/functions/base/math.scss":"@use 'sass:math';\n@use 'sass:meta';\n\n@use '../../settings' as ml;\n\n// Math\n//\n// Functions for calculations.\n//\n// Styleguide: sass-tools.functions.math\n\n// decimal-round\n//\n// Decimal rounding.\n// ```scss\n//@debug ml.decimal-round(33.33333%, 2); // 33.33%\n//```\n//\n// $number - decimal to be rounded. Type: number.\n// $pos - the number of decimal places.\n// $type = 'round' - service parameter for functions-wrappers.\n//\n// Styleguide: sass-tools.functions.math.decimal_round\n\n@function decimal-round($number, $pos, $type: 'round') {\n\t$n: 1;\n\n\t@if meta.type-of($number) != 'number' {\n\t\t@error 'Wrong type of argument $number: `#{meta.type-of($number)}`. Expected number';\n\t}\n\n\t@if meta.type-of($pos) != 'number' {\n\t\t@error 'Wrong type of argument $pos: `#{meta.type-of($pos)}`. Expected `number`';\n\t}\n\n\t@for $i from 0 to $pos {\n\t\t$n: $n * 10;\n\t}\n\n\t@if $type == 'round' {\n\t\t@return math.div(math.round($number * $n), $n);\n\t} @else if $type == 'ceil' {\n\t\t@return math.div(math.ceil($number * $n), $n);\n\t} @else if $type == 'floor' {\n\t\t@return math.div(math.floor($number * $n), $n);\n\t} @else {\n\t\t@error 'Invalid round type: `#{$type}`';\n\t}\n}\n\n// decimal-ceil\n//\n// Wrapper on [decimal-round](#kssref-sass-tools-functions-math-decimal_round) for ceil round.\n// ```scss\n//@debug ml.decimal-ceil(33.33333%, 2); // 33.34%\n//```\n//\n// $number - decimal to be rounded. Type: number.\n// $pos - the number of decimal places.\n//\n// Styleguide: sass-tools.functions.math.decimal_ceil\n\n@function decimal-ceil($number, $pos) {\n\t@return decimal-round($number, $pos, 'ceil');\n}\n\n\n// decimal-floor\n//\n// Wrapper on [decimal-round](#kssref-sass-tools-functions-decimal_round) for floor round.\n// ```scss\n//@debug ml.decimal-floor(33.33999%, 2); // 33.33%\n//```\n//\n// $number - decimal to be rounded. Type: number.\n// $pos - the number of decimal places.\n//\n// Styleguide: sass-tools.functions.math.decimal_floor\n\n@function decimal-floor($number, $pos) {\n\t@return decimal-round($number, $pos, 'floor');\n}\n\n// px2em\n//\n// Convert pixels to `em`.\n// Final value in ems rounded because accuracy more than two decimal places does not make sense.\n// ```scss\n//@debug ml.px2em(24px, 18px); // 1.33em\n//@debug ml.px2em(24px); // 1.5em\n// ```\n//\n// $number - number in `px` that will be converted.\n// $divider = $browser-font-size - parent font size in `px`.\n// $unit = 'em' - service parameter for functions-wrappers.\n//\n// Styleguide: sass-tools.functions.math.px2em\n\n@function px2em($number, $divider: ml.$browser-font-size, $unit: 'em') {\n\t@if math.is-unitless($number) {\n\t\t$number: $number * 1px;\n\t} @else if math.unit($number) == $unit {\n\t\t@return $number;\n\t}\n\n\t@if $unit == 'rem' {\n\t\t@return decimal-round(math.div($number, $divider), 2) * 1rem;\n\t}\n\n\t@if $unit == '' {\n\t\t@return decimal-round(math.div($number, $divider), 2);\n\t}\n\n\t@return decimal-round(math.div($number, $divider), 2) * 1em;\n}\n\n// px2rem\n//\n// Wrapper on [px2em](#kssref-sass-tools-functions-math-px2em) for converting to `rem`. Works similarly.\n// ```scss\n//@debug ml.px2rem(24px); // 1.5rem\n// ```\n//\n// $number - number in `px` that will be converted.\n// $divider = $browser-font-size - browser default font size in `px`.\n//\n// Styleguide: sass-tools.functions.math.px2rem\n\n@function px2rem($number, $divider: ml.$browser-font-size) {\n\t@return px2em($number, $divider, 'rem');\n}\n\n\n// px2lh\n//\n// Wrapper on [px2em](#kssref-sass-tools-functions-math-px2em) for converting to `line-height` units. Works similarly.\n// ```scss\n//@debug ml.px2lh(24px, 14px); // 1.71\n//@debug ml.px2lh(24px); // 1.5\n// ```\n//\n// $number - number in `px` that will be converted.\n// $divider = $browser-font-size - parent font size in `px`.\n//\n// Styleguide: sass-tools.functions.math.px2lh\n\n@function px2lh($number, $divider: ml.$browser-font-size) {\n\t@return px2em($number, $divider, '');\n}\n","http://localhost/sass/tools/functions/common/custom-units.scss":"@use 'sass:meta';\n@use 'sass:map';\n@use 'sass:math';\n@use 'sass:string';\n@use 'sass:list';\n\n@use 'forward-tools' as ml;\n\n// Custom units\n//\n// Functions for working with custom units.\n//\n// Styleguide: sass-tools.functions.custom_units\n\n// su\n//\n// Converts space units to CSS value.\n// ```scss\n//@debug ml.su(3u); // 0.75rem\n//@debug ml.su(4); // 1rem\n// ```\n//\n// $n - unitless number or number with `u` unit\n// $data = () - service argument for provide any data\n//\n// Styleguide: sass-tools.functions.custom_units.su\n\n@function su($n, $data: ()) {\n\t@if meta.type-of($n) != 'number' {\n\t\t@return ml.error(\n\t\t\t'Wrong type of argument $n: `#{meta.type-of($n)}`. Expected `number`'\n\t\t);\n\t}\n\n\t@if math.unit($n) == 'u' {\n\t\t$n: math.div($n, 1u);\n\t}\n\n\t@return ml.$su * $n;\n}\n\n// gg\n//\n// Converts grid gutter to CSS value.\n// ```scss\n//@debug ml.gg(5); // calc(var(--ml-gg) * 5)\n//@debug ml.gg(1gg); // var(--ml-gg)\n// ```\n//\n// $n - unitless number or number with `gg` unit\n// $data = () - service argument for provide any data\n//\n// Styleguide: sass-tools.functions.custom_units.gg\n\n@function gg($n, $data: ()) {\n\t@if meta.type-of($n) != 'number' {\n\t\t@return ml.error(\n\t\t\t'Wrong type of argument $n: `#{meta.type-of($n)}`. Expected `number`'\n\t\t);\n\t}\n\n\t@if math.unit($n) == 'gg' {\n\t\t$n: math.div($n, 1gg);\n\t}\n\n\t@return string.unquote(\n\t\t'calc(var(#{map.get(ml.$general-cfg, \"css-vars\", \"gg\")}) * #{$n})'\n\t);\n}\n\nml.$general-cfg: map.set(\n\tml.$general-cfg, 'custom-unit-values', 'gg', meta.get-function('gg', false)\n);\n\n$-gtr-fallback-rem: ml.px2rem(ml.$gs-default-gtr);\n\n// TODO: remove unused code\n@function gg-fallback($util, $util-value, $css-value, $important) {\n\t$value-part-init: 'calc(var(#{ml.css-var(\"gg\")}';\n\n\t@if not string.index(meta.inspect($css-value), $value-part-init) {\n\t\t@return null;\n\t}\n\n\t$def-unit: map.get(ml.$utils-db, 'utils', 'registry', $util, 'default-unit');\n\n\t$value-part: $value-part-init + '#{$def-unit and \"-\" + $def-unit}) * ';\n\t$fallback-list: ();\n\t$multi-sep: list.separator($css-value);\n\n\t$value-parts: (\n\t\t(\n\t\t\t$value-part,\n\t\t\tstring.length($value-part),\n\t\t\tif(\n\t\t\t\t$def-unit == 'rem',\n\t\t\t\t$-gtr-fallback-rem,\n\t\t\t\tml.$gs-default-gtr\n\t\t\t)\n\t\t),\n\t);\n\n\t@if map.get(ml.$utils-db, 'utils', 'registry', $util, 'directions') {\n\t\t$value-part: $value-part-init + '-rem) * ';\n\t\t$value-parts: list.append(\n\t\t\t$value-parts,\n\t\t\t(\n\t\t\t\t$value-part,\n\t\t\t\tstring.length($value-part),\n\t\t\t\t$-gtr-fallback-rem,\n\t\t\t)\n\t\t);\n\t}\n\n\t@each $list in $css-value {\n\t\t$converted-list: ();\n\n\t\t@each $item in $list {\n\t\t\t@if meta.type-of($item) == 'string' {\n\t\t\t\t@each $part, $length, $fallback in $value-parts {\n\t\t\t\t\t@if ml.str-starts($item, $part) {\n\t\t\t\t\t\t$converted-list: list.append(\n\t\t\t\t\t\t\t$converted-list,\n\t\t\t\t\t\t\tml.str2n(string.slice($item, $length + 1)) * $fallback\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t$converted-list: list.append($converted-list, $item);\n\t\t\t}\n\t\t}\n\n\t\t$fallback-list: list.append($fallback-list, $converted-list, $multi-sep);\n\t}\n\n\t@return $fallback-list $important;\n}\n\n@if ml.$css-vars-fallback {\n\t$-utils-registry: ();\n\n\t@each $item in map.get(ml.$utils-cfg, 'gg-fallback-list') {\n\t\t$props-map: ();\n\t\t$props-list: ml.util-prop($item);\n\n\t\t@each $item in $props-list {\n\t\t\t$props-map: map.set(\n\t\t\t\t$props-map, $item, meta.get-function('gg-fallback', false)\n\t\t\t);\n\t\t}\n\n\t\t$-utils-registry: map.set(\n\t\t\t$-utils-registry,\n\t\t\t$item,\n\t\t\t(\n\t\t\t\t'preset-properties': $props-map,\n\t\t\t\t'properties': $props-list\n\t\t\t)\n\t\t);\n\t}\n\n\tml.$utils-db: map.deep-merge(\n\t\tml.$utils-db,\n\t\t(\n\t\t\t'utils': ('registry': $-utils-registry)\n\t\t)\n\t);\n}\n\n@function gc($n, $data: ()) {\n\t@if math.unit($n) == 'gc' {\n\t\t$n: math.div($n, 1gc);\n\t}\n\n\t@return var(\n\t\t#{ml.$cv-pref + if(map.get($data, 'util') == 'Ml', 'gsof', 'gscf')},\n\t\t#{math.div($n, ml.$gs-columns) * 100%}\n\t);\n}\n\n@function -gc-prop($util, $value, $css-value, $important) {\n\t$n: ml.str2n($value);\n\n\t@return if(\n\t\tmeta.type-of($n) == 'number' and math.unit($n) == 'gc',\n\t\tmath.div($n, 1gc),\n\t\tnull\n\t);\n}\n\n@function -gc-fallback($util, $value, $css-value, $important) {\n\t$n: ml.str2n($value);\n\n\t@if meta.type-of($n) == 'number' and math.unit($n) == 'gc' {\n\t\t$cols: math.div($n, 1gc);\n\n\t\t@return calc(\n\t\t\t(math.div($cols, ml.$gs-columns) * 100%) -\n\t\t\tml.$gs-default-gtr * if($util == 'Ml', -1, 2)\n\t\t);\n\t}\n\n\t@return null;\n}\n\n@if ml.$legacy-grid-system {\n\tml.$general-cfg: map.set(\n\t\tml.$general-cfg, 'custom-unit-values', 'gc', meta.get-function('gc', false)\n\t);\n\n\tml.$utils-db: map.deep-merge(\n\t\tml.$utils-db,\n\t\t('utils': (\n\t\t\t'registry': (\n\t\t\t\t'W': (\n\t\t\t\t\t'preset-properties': (\n\t\t\t\t\t\tml.$cv-pref + 'gsc': meta.get-function('-gc-prop'),\n\t\t\t\t\t\t// space in key is needed to add the second fallback\n\t\t\t\t\t\t' width': meta.get-function('-gc-fallback'),\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'Ml': (\n\t\t\t\t\t'preset-properties': (\n\t\t\t\t\t\tml.$cv-pref + 'gso': meta.get-function('-gc-prop'),\n\t\t\t\t\t\t' margin-left': meta.get-function('-gc-fallback'),\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t))\n\t);\n}\n","http://localhost/sass/tools/functions/base/string.scss":"@use 'sass:meta';\n@use 'sass:map';\n@use 'sass:math';\n@use 'sass:string';\n@use 'sass:list';\n\n@use '../../settings/base/general' as ml;\n@use 'error' as *;\n\n// String\n//\n// Functions to manipulate strings.\n//\n// Styleguide: sass-tools.functions.string\n\n// str2n\n//\n// Convert string to number. Returns null if conversion is not possible.\n// ```scss\n//@debug ml.str2n('1.5'); // 1.5\n//@debug ml.str2n('1x5'); // 1\n//@debug ml.str2n('xx'); // null\n//@debug ml.str2n('1x5', 1); // 1x5\n// ```\n//\n// $str - string to be converted\n// $skip-unknown = false - bool flag. If it on and the string contains an unknown sequence of characters after the number, then the it is returned as is\n//\n// Styleguide: sass-tools.functions.string.str2n\n\n@function str2n($str, $skip-unknown: false) {\n\t$value-type: meta.type-of($str);\n\n\t@if $value-type == 'number' {\n\t\t@return $str;\n\t}\n\n\t@if $value-type != 'string' {\n\t\t@return null;\n\t}\n\n\t$negative: string.slice($str, 1, 1) == '-';\n\t$result: 0;\n\t$decimal: false;\n\n\t@for $i from if($negative, 2, 1) through string.length($str) {\n\t\t$char: string.slice($str, $i, $i);\n\t\t$digit: list.index(ml.$dec-digits, $char);\n\n\t\t@if $digit and not $decimal {\n\t\t\t$result: $result * 10 + ($digit - 1);\n\t\t} @else if $digit and $decimal {\n\t\t\t$result: $result + math.div($digit - 1, $decimal);\n\t\t\t$decimal: $decimal * 10;\n\t\t} @else if $char == '.' and not $decimal {\n\t\t\t$decimal: 10;\n\t\t} @else if ($i == 1 and not $negative) or ($i == 2 and $negative) {\n\t\t\t@return null;\n\t\t} @else {\n\t\t\t$unit: map.get(ml.$units-all, string.to-lower-case(string.slice($str, $i)));\n\n\t\t\t@if not $unit {\n\t\t\t\t@if $skip-unknown {\n\t\t\t\t\t@return $str;\n\t\t\t\t}\n\n\t\t\t\t$unit: 1;\n\t\t\t}\n\n\t\t\t@return if($negative, -$result, $result) * $unit;\n\t\t}\n\t}\n\n\t@return if($negative, -$result, $result);\n}\n\n// str-digit-index\n//\n// Returns the first index of digit in $str, or `null` if digits not found\n// ```scss\n//@debug ml.str-digit-index('Mb55'); // 3\n//@debug ml.str-digit-index('Mt-a'); // null\n// ```\n//\n// $str - string for search\n//\n// Styleguide: sass-tools.functions.string.str_digit_index\n\n@function str-digit-index($str) {\n\t@if meta.type-of($str) != 'string' {\n\t\t@return error('Wrong type of argument $str: `#{meta.type-of($str)}`. Expected `string`');\n\t}\n\n\t@for $i from 1 through string.length($str) {\n\t\t@if list.index(ml.$dec-digits, string.slice($str, $i, $i)) {\n\t\t\t@return $i;\n\t\t}\n\t}\n\n\t@return null;\n}\n\n// str-ucfirst\n//\n// Converts the first letter of string to uppercase\n// ```scss\n//@debug ml.str-ucfirst('fxg1'); // 'Fxg1'\n// ```\n//\n// $str - string for converting\n//\n// Styleguide: sass-tools.functions.string.str_ucfirst\n\n@function str-ucfirst($str) {\n\t@if meta.type-of($str) != 'string' {\n\t\t@return error('Wrong type of argument $str: `#{meta.type-of($str)}`. Expected `string`');\n\t}\n\n\t@return string.to-upper-case(string.slice($str, 1, 1)) + string.slice($str, 2);\n}\n\n// str-escape\n//\n// Escape special characters in value for using it in CSS selector.\n// ```scss\n//@debug ml.str-escape(':^:&:h'); // '\\\\:\\\\^\\\\:\\\\&\\\\:h'\n//@debug ml.str-escape(1.5); // '1\\\\.5'\n// ```\n//\n// $value - value for escaping\n//\n// Styleguide: sass-tools.functions.string.str_escape\n\n@function str-escape($value) {\n\t$str: $value + '';\n\t$escaped: '';\n\n\t@for $i from 1 through string.length($str) {\n\t\t$char: string.slice($str, $i, $i);\n\n\t\t@if list.index(ml.$spec-chars, $char) {\n\t\t\t$char: '\\\\' + $char;\n\t\t}\n\n\t\t$escaped: $escaped + $char;\n\t}\n\n\t@return $escaped;\n}\n\n// Private functions only for internal usage. I hope that in the future they will be built into Sass. And when it will happens I don't want that their removing broke backward compatibility.\n\n@function str-split($str, $separator: '', $repeats: ml.$number-max) {\n\t$result: ();\n\t$sep-length: string.length($separator);\n\t$str-length: string.length($str);\n\n\t@if $sep-length == 0 {\n\t\t@if $repeats < 1 {\n\t\t\t@return $str;\n\t\t}\n\n\t\t@for $i from 1 through math.min($str-length, $repeats) {\n\t\t\t$result: list.append($result, string.slice($str, $i, $i));\n\t\t}\n\n\t\t@return if(\n\t\t\t$repeats < $str-length,\n\t\t\tlist.append($result, string.slice($str, $repeats + 1)),\n\t\t\t$result\n\t\t);\n\t}\n\n\t$sep-pos: string.index($str, $separator);\n\t$i: 0;\n\n\t@while $sep-pos != null and $i < $repeats {\n\t\t$result: list.append($result, string.slice($str, 1, $sep-pos - 1));\n\t\t$str: string.slice($str, $sep-pos + $sep-length);\n\t\t$sep-pos: string.index($str, $separator);\n\t\t$i: $i + 1;\n\t}\n\n\t@return list.append($result, $str);\n}\n\n//Trim so simple because common usage will trim one or zero spaces in one side.\n\n@function str-trim($str) {\n\t@while 1 {\n\t\t@if string.slice($str, 1, 1) == ' ' {\n\t\t\t$str: string.slice($str, 2);\n\t\t} @else if string.slice($str, -1) == ' ' {\n\t\t\t$str: string.slice($str, 1, -2);\n\t\t} @else {\n\t\t\t@return $str;\n\t\t}\n\t}\n}\n\n@function str-replace($str, $old, $new: '') {\n\t$old-pos: string.index($str, $old);\n\n\t@if $old-pos {\n\t\t@return string.slice($str, 1, $old-pos - 1) + $new + string.slice($str, $old-pos + string.length($old));\n\t}\n\n\t@return $str;\n}\n\n@function str-replace-all($str, $old, $new: '') {\n\t$old-pos: string.index($str, $old);\n\t$old-length: string.length($old);\n\t$result: '';\n\n\t@while $old-pos {\n\t\t$result: $result + string.slice($str, 1, $old-pos - 1) + $new;\n\t\t$str: string.slice($str, $old-pos + $old-length);\n\t\t$old-pos: string.index($str, $old);\n\t}\n\n\t@return $result + $str;\n}\n\n@function str-starts($str, $substr) {\n\t@if meta.type-of($str) != 'string' or meta.type-of($substr) != 'string' {\n\t\t@return false;\n\t}\n\n\t@return string.slice($str, 1, string.length($substr)) == $substr;\n}\n\n@function str-contains-item($item, $i, $str) {\n\t@return string.index($str, $item);\n}\n\n@function str-hex2color($str) {\n\t$value-type: meta.type-of($str);\n\n\t@if $value-type == 'color' {\n\t\t@return $str;\n\t}\n\n\t@if $value-type != 'string' or string.slice($str, 1, 1) != '#' {\n\t\t@return null;\n\t}\n\n\t$str-length: string.length($str);\n\n\t@if $str-length != 4 and $str-length != 7 {\n\t\t@return error('Invalid color format: `#{$str}`. Allowed 3 or 6 hexadecimal digits');\n\t}\n\n\t$r: '';\n\t$g: '';\n\t$b: '';\n\t$str: string.to-lower-case($str);\n\n\t$max-length: if(\n\t\t$str-length == 4, 1, 2\n\t);\n\n\t@for $i from 2 through $str-length {\n\t\t$digit: string.slice($str, $i, $i);\n\n\t\t@if not list.index(ml.$hex-digits, $digit) {\n\t\t\t@return error('Invalid character: `#{$digit}`. Allowed only hexadecimal digits');\n\t\t}\n\n\t\t@if string.length($r) < $max-length {\n\t\t\t$r: $r + $digit;\n\t\t} @else if string.length($g) < $max-length {\n\t\t\t$g: $g + $digit;\n\t\t} @else {\n\t\t\t$b: $b + $digit;\n\t\t}\n\t}\n\n\t@if $str-length == 4 {\n\t\t$r: $r + $r;\n\t\t$g: $g + $g;\n\t\t$b: $b + $b;\n\t}\n\n\t@return rgb(-hex2dec($r), -hex2dec($g), -hex2dec($b));\n}\n\n@function -hex2dec($n) {\n\t$str-number: string.to-lower-case($n);\n\t$result: 0;\n\t$base: list.length(ml.$hex-digits);\n\t$length: string.length($str-number);\n\n\t@for $i from 1 through $length {\n\t\t$digit: list.index(ml.$hex-digits, string.slice($str-number, $i, $i)) - 1;\n\t\t$result: $result + $digit * math.pow($base, $length - $i);\n\t}\n\n\t@return $result;\n}\n","http://localhost/sass/tools/functions/common/forward-tools.scss":"@forward '../../settings';\n@forward '../base';\n","http://localhost/sass/tools/functions/common/helpers.scss":"@use 'sass:meta';\n@use 'sass:map';\n@use 'sass:math';\n@use 'sass:string';\n@use 'sass:list';\n\n@use '../base' as ml;\n\n// Helpers\n//\n// Basically, here are functions for internal needs. Perhaps the documentation will appear later.\n//\n/// Styleguide: sass-tools.functions.common.helpers\n\n@function css-class($name, $only-name: false) {\n\t$name: $name + '';\n\n\t@if $only-name {\n\t\t@return if(string.slice($name, 1, 1) == '.', string.slice($name, 2), $name);\n\t}\n\n\t@return if(string.slice($name, 1, 1) == '.', $name, '.' + $name);\n}\n\n@function replace-keyword($list, $keyword, $replacement) {\n\t@each $item in $list {\n\t\t$keyword-pos: string.index($item, $keyword);\n\n\t\t@if $keyword-pos {\n\t\t\t$list: ml.remove-nth($list, list.index($list, $item));\n\n\t\t\t@each $rep-item in $replacement {\n\t\t\t\t$item-with-kw: ml.str-replace($item, $keyword, $rep-item);\n\n\t\t\t\t@if $item-with-kw != '' {\n\t\t\t\t\t$list: list.append($list, $item-with-kw);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@return $list;\n}\n\n@function is-css-var($value, $in-color: false) {\n\t@return (\n\t\tml.str-starts($value, 'var(') or\n\t\t(\n\t\t\t$in-color and (\n\t\t\t\tml.str-starts($value, 'rgba(var(') or\n\t\t\t\tml.str-starts($value, 'rgb(var(') or\n\t\t\t\tml.str-starts($value, 'hsla(var(') or\n\t\t\t\tml.str-starts($value, 'hsl(var(')\n\t\t\t)\n\t\t)\n\t);\n}\n","http://localhost/sass/tools/functions/common/_index.scss":"// Common\n//\n// Common functions.\n//\n/// Styleguide: sass-tools.functions.common\n\n@forward 'helpers';\n@forward 'custom-units';\n@forward 'utils';\n","http://localhost/sass/tools/functions/high/at-rules.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:string';\n@use 'sass:math';\n@use 'sass:meta';\n\n@use 'forward-tools' as ml;\n\n// At-rules\n//\n// Functions for working with at-rules.\n//\n/// Styleguide: sass-tools.functions.high.at_rules\n\n$-tALs-length: string.length(ml.$tALs);\n$-tACs-length: string.length(ml.$tACs);\n\n@function convert-bp-list($bp-list) {\n\t$from: list.nth($bp-list, 1);\n\t$is-max: ml.str-starts($from, ml.$tALs);\n\n\t@if $is-max {\n\t\t$from: string.slice($from, $-tALs-length + 1);\n\t}\n\n\t$from-value: map.get(ml.$bp-map, $from);\n\n\t@if not $from-value {\n\t\t@return ml.error(\n\t\t\t'Invalid breakpoint name: `#{$from}`',\n\t\t);\n\t}\n\n\t$media-str: '(min-width: #{$from-value})';\n\n\t@if $is-max {\n\t\t$media-str: '(max-width: #{$from-value - 1px})';\n\t} @else if list.length($bp-list) >= 2 {\n\t\t$media-str:\n\t\t\t$media-str + ' and (max-width: #{ml.bp(list.nth($bp-list, 2)) - 1px})';\n\t}\n\n\t@return $media-str;\n}\n\n@function convert-feature-abbr($abbr, $section: 'utils') {\n\t@if $abbr == '' {\n\t\t@return ml.error('Passed empty string');\n\t}\n\n\t$result: '';\n\t$abbr-data: ml.parse-abbr($abbr);\n\t$abbr-feature: map.get($abbr-data, 'name');\n\t$abbr-value: map.get($abbr-data, 'value');\n\t$separator: map.get($abbr-data, 'separator');\n\t$feat-prefix: '';\n\t$feature: ml.util-prop($abbr-feature, $section, false, true);\n\n\t@if not $feature {\n\t\t@if $section == 'container' and $abbr-value == '' {\n\t\t\t@return $abbr;\n\t\t}\n\n\t\t@return ml.error(\n\t\t\t'Invalid feature abbreviation: `#{$abbr}`. `#{$abbr}` is not defined in `#{$section}` section of $utils-db map'\n\t\t);\n\t}\n\n\t@if (\n\t\t$abbr-value == '' and\n\t\tnot map.has-key(ml.$utils-db, $section, 'registry', $abbr-feature, 'keywords')\n\t) {\n\t\t@return '(#{$feature})';\n\t}\n\n\t@if $separator {\n\t\t@if string.index($separator, ml.$tALs) {\n\t\t\t$feat-prefix: 'max-';\n\t\t} @else if string.index($separator, ml.$tAGt) {\n\t\t\t$feat-prefix: 'min-';\n\t\t}\n\t}\n\n\t$feat-value: ml.convert-util-value($abbr-value, $abbr-feature, $section);\n\n\t@if meta.type-of($feat-value) == 'number' {\n\t\t$value-unit: math.unit($feat-value);\n\n\t\t@if $value-unit == 'u' {\n\t\t\t$feat-value: ml.su($feat-value);\n\t\t}\n\n\t\t@if $separator == ml.$tALs or $separator == ml.$tAGt {\n\t\t\t$value-diff: bp-value-diff($feat-value, $value-unit);\n\n\t\t\t@if $separator == ml.$tALs {\n\t\t\t\t$value-diff: $value-diff * -1;\n\t\t\t}\n\n\t\t\t$feat-value: $feat-value + $value-diff;\n\t\t}\n\t}\n\n\t@return '(#{$feat-prefix + $feature}: #{$feat-value})';\n}\n\n@function bp-value-diff($value, $computed-unit: null) {\n\t$unit: $computed-unit or math.unit($value);\n\t$diff: map.get(ml.$general-cfg, 'units', 'css', $unit) or 1;\n\n\t@if $unit == 'rem' or $unit == 'em' {\n\t\t$diff: $diff * 0.06; // 1px = 0.062rem\n\t} @else if $unit != 'px' and $unit != '' {\n\t\t// TODO: add calculations for other units\n\t\t$diff: $diff * 0.01;\n\t}\n\n\t@return $diff;\n}\n\n// Converters\n//\n// Converts abbreviations to at-rules. The name of the converter begins with `convert-ar-` and ends with the name of the at-rule, which it corresponds. The exception is the breakpoint converter. All converters take the same arguments, see below.\n//\n// Converter is bind to the at-rule that contains in the `$at-rules-db` map. It is recorded on the 'converter' key in the map of the relevant rule.\n//\n// Available converters:\n// ```scss\n//@debug ml.convert-ar-bp('<sm,xl'); // '(max-width: 519px), (min-width: 1168px)'\n//@debug ml.convert-ar-media('s:fc'); // 'screen and (forced-colors)'\n//@debug ml.convert-ar-supports('!&', 'D-ig'); // '(not (display: inline-grid))'\n// ```\n//\n// $ar - string with abbreviations\n// $this-util = null - utility for which the at-rules will be generated\n//\n/// Styleguide: sass-tools.functions.high.at_rules.converters\n\n@function convert-ar-bp($ar, $this-util: null) {\n\t$result: '';\n\t$queries: ml.str-split($ar, ml.$tAOr);\n\n\t@each $queary in $queries {\n\t\t$result: $result + convert-bp-list(ml.str-split($queary, ml.$tAAnd)) + ', ';\n\t}\n\n\t@return string.slice($result, 1, -3);\n}\n\n@function convert-ar-media($ar, $this-util: null) {\n\t$result: '';\n\t$queries: ml.str-split($ar, ml.$tAOr);\n\t$and: ' and ';\n\t$or: ', ';\n\n\t@each $queary in $queries {\n\t\t$queary-list: ml.str-split($queary, ml.$tAAnd);\n\n\t\t@each $item in $queary-list {\n\t\t\t@if map.has-key(ml.$at-rules-db, 'media', 'types', $item) {\n\t\t\t\t$result: $result + map.get(ml.$at-rules-db, 'media', 'types', $item);\n\t\t\t} @else if ml.str-starts($item, ml.$tACs) {\n\t\t\t\t$item-name: string.slice($item, $-tACs-length + 1);\n\n\t\t\t\t@if map.has-key(ml.$at-rules-db, 'media', 'custom', $item-name) {\n\t\t\t\t\t$result: $result + map.get(ml.$at-rules-db, 'media', 'custom', $item-name);\n\t\t\t\t} @else {\n\t\t\t\t\t@return ml.error('Undefined custom media query: `#{$item}`');\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t$result: $result + convert-feature-abbr($item, 'media');\n\t\t\t}\n\n\t\t\t$result: $result + $and;\n\t\t}\n\n\t\t$result: string.slice($result, 1, -(1 + string.length($and))) + $or;\n\t}\n\n\t@return string.slice($result, 1, -(1 + string.length($or)));\n}\n\n@function convert-ar-supports($ar, $this-util: null) {\n\t@if $ar == '' and $this-util {\n\t\t@return convert-feature-abbr(\n\t\t\tmap.get($this-util, 'name') + map.get($this-util, 'value')\n\t\t);\n\t}\n\n\t$result: '';\n\t$separator: ml.$tAAnd;\n\t$operator: ' and ';\n\n\t@if string.index($ar, ml.$tAOr) {\n\t\t@if string.index($ar, ml.$tAAnd) {\n\t\t\t@return ml.error('Different operators are not allowed in one abbreviations list');\n\t\t}\n\n\t\t$separator: ml.$tAOr;\n\t\t$operator: ' or ';\n\t}\n\n\t@each $item in ml.str-split($ar, $separator) {\n\t\t$converted: '';\n\t\t$not: string.slice($item, 1, 1) == ml.$tANot;\n\n\t\t@if $not {\n\t\t\t$item: string.slice($item, 2);\n\t\t}\n\n\t\t@if ml.str-starts($item, ml.$tACs) {\n\t\t\t$item-name: string.slice($item, 2);\n\n\t\t\t@if map.has-key(ml.$at-rules-db, 'supports', 'custom', $item-name) {\n\t\t\t\t$converted: map.get(ml.$at-rules-db, 'supports', 'custom', $item-name);\n\t\t\t} @else {\n\t\t\t\t@return ml.error('Undefined custom supports condition: `#{$item}`');\n\t\t\t}\n\t\t} @else if ml.str-starts($item, ml.$tSTu) {\n\t\t\t@if not $this-util {\n\t\t\t\t@return ml.error('`#{ml.$tSTu}` cannot be used because $this-util is not passed');\n\t\t\t}\n\n\t\t\t$value: map.get($this-util, 'value');\n\n\t\t\t@if $item == ml.$tSTu + ml.$tUSv {\n\t\t\t\t$value: ml.$tUSv + 'ini';\n\t\t\t} @else if $item != ml.$tSTu {\n\t\t\t\t$value: string.slice($item, 2);\n\t\t\t}\n\n\t\t\t$converted: convert-feature-abbr(map.get($this-util, 'name') + $value);\n\t\t} @else {\n\t\t\t$converted: convert-feature-abbr(ml.str-ucfirst($item));\n\t\t}\n\n\t\t@if $not {\n\t\t\t$converted: '(not #{$converted})';\n\t\t}\n\n\t\t$result: $result + $converted + $operator;\n\t}\n\n\t@return string.slice($result, 1, -(1 + string.length($operator)));\n}\n\n@function convert-ar-container($ar, $this-util: null) {\n\t$result: '';\n\t$queries: ml.str-split($ar, ml.$tAOr);\n\t$and: ' and ';\n\t$or: ', ';\n\n\t@each $queary in $queries {\n\t\t$queary-list: ml.str-split($queary, ml.$tAAnd);\n\n\t\t@each $item in $queary-list {\n\t\t\t$is-container-name: false;\n\n\t\t\t@if ml.str-starts($item, ml.$tACs) {\n\t\t\t\t$item-name: string.slice($item, $-tACs-length + 1);\n\n\t\t\t\t@if map.has-key(ml.$at-rules-db, 'container', 'custom', $item-name) {\n\t\t\t\t\t$result: $result + map.get(ml.$at-rules-db, 'container', 'custom', $item-name);\n\t\t\t\t} @else {\n\t\t\t\t\t@return ml.error('Undefined custom container condition: `#{$item}`');\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t$converted: convert-feature-abbr($item, 'container');\n\n\t\t\t\t@if $converted == $item {\n\t\t\t\t\t$is-container-name: true;\n\t\t\t\t}\n\n\t\t\t\t$result: $result + $converted;\n\t\t\t}\n\n\t\t\t$result: $result + if($is-container-name, ' ', $and);\n\t\t}\n\n\t\t$result: string.slice($result, 1, -(1 + string.length($and))) + $or;\n\t}\n\n\t@return string.slice($result, 1, -(1 + string.length($or)));\n}\n\n@function convert-ar-layer($ar, $this-util: null) {\n\t@return $ar;\n}\n\n@each $key, $value in ml.$at-rules-db {\n\t@if meta.function-exists('convert-ar-#{$key}') {\n\t\tml.$at-rules-db: map.set(\n\t\t\tml.$at-rules-db, $key, 'converter', meta.get-function('convert-ar-#{$key}')\n\t\t);\n\t}\n}\n","http://localhost/sass/tools/functions/high/forward-tools.scss":"@forward '../../settings';\n@forward '../base';\n@forward '../common';\n","http://localhost/sass/tools/functions/common/utils.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:math';\n@use 'sass:string';\n\n@use 'forward-tools' as ml;\n@use 'helpers';\n\n// Utils\n//\n// Basically, here are functions for internal needs. Perhaps the documentation will appear later.\n//\n/// Styleguide: sass-tools.functions.common.utils\n\n// convert-util-value\n//\n// Determines the type of utility and, depending on type, calls the converter from the `$util-value-converters` map. If the utility type is not recognized, the [default converter](#kssref-sass-tools-functions-utils-value_converters-def) is called. If the `$utils-value-converters` does not contain a converter for this type, the utility value is returned without conversion. Else the result of the converter work is returned.\n// ```scss\n//@debug ml.convert-util-value('2r', 'Fns'); // 2rem\n//@debug ml.convert-util-value(100, 'Fnw'); // 100\n// ```\n//\n// $util-val - utility value\n// $name - utility name\n// $section = 'utils' - section in the registry in which utility was defined\n//\n/// Styleguide: sass-tools.functions.common.utils.convert_util_value\n\n@function convert-util-value($util-val, $name, $section: 'utils') {\n\t$result: null;\n\n\t@if meta.type-of($util-val) == 'string' {\n\t\t$multi-list-sep: if(\n\t\t\tmap.has-key(ml.$utils-db, $section, 'registry', $name, 'multi-list-separator'),\n\t\t\tmap.get(ml.$utils-db, $section, 'registry', $name, 'multi-list-separator'),\n\t\t\tml.$tUNls\n\t\t);\n\n\t\t@if string.index($util-val, $multi-list-sep) or string.index($util-val, ml.$tUSp) {\n\t\t\t$converted: ();\n\t\t\t$separator: map.get(ml.$utils-cfg, 'tokens-values', $multi-list-sep);\n\n\t\t\t@each $list in ml.str-split($util-val, $multi-list-sep) {\n\t\t\t\t$items: ml.str-split($list, ml.$tUSp);\n\t\t\t\t$one-value: list.length($items) == 1;\n\t\t\t\t$converted-items: ();\n\n\t\t\t\t@each $value in $items {\n\t\t\t\t\t$converted-items: list.append(\n\t\t\t\t\t\t$converted-items,\n\t\t\t\t\t\tapply-value-converter($value, $name, $section, $one-value)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t$converted: list.append($converted, $converted-items, $separator);\n\t\t\t}\n\n\t\t\t$result: if(\n\t\t\t\tlist.length($converted) == 1,\n\t\t\t\tlist.nth($converted, 1),\n\t\t\t\t$converted\n\t\t\t);\n\t\t} @else if string.slice($util-val, 1, 1) == ml.$tURv {\n\t\t\t$result: string.unquote(string.slice($util-val, 2));\n\t\t}\n\t}\n\n\t@if not $result {\n\t\t$result: apply-value-converter($util-val, $name, $section);\n\t}\n\n\t@if map.has-key(\n\t\tml.$utils-db, $section, 'registry', $name, 'transformer'\n\t) {\n\t\t@return meta.call(\n\t\t\tmap.get(\n\t\t\t\tml.$utils-cfg,\n\t\t\t\t'transformers',\n\t\t\t\tmap.get(ml.$utils-db, $section, 'registry', $name, 'transformer')\n\t\t\t),\n\t\t\t$result,\n\t\t\t('name': $name)\n\t\t);\n\t}\n\n\t@return $result;\n}\n\n@function apply-value-converter(\n\t$util-value, $name, $section: 'utils', $one-value: true\n) {\n\t@if ml.str-starts($util-value, ml.$tURv) {\n\t\t@return string.unquote(string.slice($util-value, 2));\n\t}\n\n\t$conversion: (\n\t\tmap.get(ml.$utils-db, $section, 'registry', $name, 'conversion') or\n\t\t'default'\n\t);\n\t$is-pipeline: false;\n\t$negative: (\n\t\tmeta.type-of($util-value) == 'string' and\n\t\tstring.slice($util-value, 1, 1) == '-' and\n\t\tnot list.index(ml.$dec-digits, string.slice($util-value, 2, 2))\n\t);\n\n\t@if $negative {\n\t\t$util-value: string.slice($util-value, 2);\n\t}\n\n\t@each $item in map.get(ml.$utils-cfg, 'conversion-types', $conversion) {\n\t\t@if map.has-key(ml.$utils-cfg, 'converters', $item) {\n\t\t\t$prev-value: $util-value;\n\n\t\t\t$util-value: meta.call(\n\t\t\t\tmap.get(ml.$utils-cfg, 'converters', $item),\n\t\t\t\t$util-value,\n\t\t\t\t(\n\t\t\t\t\t'name': $name,\n\t\t\t\t\t'section': $section,\n\t\t\t\t\t'negative': $negative,\n\t\t\t\t\t'one-value': $one-value,\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t@if $util-value != $prev-value and not $is-pipeline {\n\t\t\t\t@if $negative and ($item == 'keyword' or $item == 'global-kw') {\n\t\t\t\t\t@if meta.type-of($util-value) == 'number' {\n\t\t\t\t\t\t@return $util-value * -1;\n\t\t\t\t\t} @else if(\n\t\t\t\t\t\thelpers.is-css-var($util-value) or\n\t\t\t\t\t\tmeta.type-of($util-value) == 'calculation'\n\t\t\t\t\t) {\n\t\t\t\t\t\t@return calc($util-value * -1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t@return $util-value;\n\t\t\t}\n\t\t} @else if $item == ml.$kSsVCP {\n\t\t\t$is-pipeline: true;\n\t\t}\n\t}\n\n\t@if $negative {\n\t\t$util-value: '-' + $util-value;\n\t}\n\n\t@return if(\n\t\t//checks type again because here we could get after the converter pipeline\n\t\tmeta.type-of($util-value) == 'string',\n\t\tstring.unquote($util-value),\n\t\t$util-value\n\t);\n}\n\n@function parse-abbr($abbr) {\n\t$abbr-value: '';\n\t$abbr-prefix: '';\n\t$hash-value-sep: ml.$tUHv;\n\t$all-separators: ml.$abbr-separators;\n\t$result: ();\n\n\t@if string.slice($abbr, 1, 1) == '-' {\n\t\t$abbr: string.slice($abbr, 2);\n\t\t$abbr-prefix: '-';\n\t}\n\n\t@if ml.$tUHv == '' {\n\t\t$hash-value-sep: '#';\n\t\t$all-separators: list.append($all-separators, '#');\n\t}\n\n\t$abbr-name: $abbr;\n\t$number-index: ml.str-digit-index($abbr);\n\t$separator: ml.ls-find(\n\t\t$all-separators, meta.get-function('str-contains-item', false, ml), $abbr\n\t);\n\n\t$sep-before-digit: if(\n\t\t$separator and $number-index,\n\t\t$number-index > string.index($abbr, $separator),\n\t\ttrue\n\t);\n\n\t@if $separator and $sep-before-digit {\n\t\t$abbr-parts: ml.str-split($abbr, $separator, 1);\n\t\t$abbr-name: list.nth($abbr-parts, 1);\n\t\t$abbr-value: list.nth($abbr-parts, 2);\n\n\t\t@if ml.$tUNv == '' and $separator == '-' and ml.str2n($abbr-value) {\n\t\t\t$abbr-value: '-' + $abbr-value;\n\t\t} @else if $separator == $hash-value-sep or $separator == ml.$tURv {\n\t\t\t$abbr-value: $separator + $abbr-value;\n\t\t} @else {\n\t\t\t$result: map.set($result, 'separator', $separator);\n\t\t}\n\t} @else if ml.$tUNv == '' and $number-index {\n\t\t$abbr-name: string.slice($abbr, 1, $number-index - 1);\n\t\t$abbr-value: string.slice($abbr, $number-index);\n\t}\n\n\t@return map.merge(\n\t\t$result,\n\t\t(\n\t\t\t'value': $abbr-value,\n\t\t\t'name': $abbr-prefix + $abbr-name,\n\t\t)\n\t);\n}\n","http://localhost/sass/tools/functions/high/_index.scss":"// High\n//\n// High-level functions.\n//\n/// Styleguide: sass-tools.functions.high\n\n@forward 'utils';\n@forward 'at-rules';\n","http://localhost/sass/tools/mixins/base/_index.scss":"@use 'sass:meta';\n@use 'sass:map';\n@use 'sass:list';\n@use 'sass:math';\n@use 'sass:string';\n\n@use 'forward-tools' as ml;\n\n@forward 'mk-ar';\n@forward 'mk-state';\n\n// At-Rules\n//\n// At-Rules mixins.\n//\n// Styleguide: sass-tools.mixins.ar\n\n// bp\n//\n// Mixin for creation media queries with breakpoints. You can use [syntax](section-concepts.html#kssref-concepts-at_rules-bp) for breakpoints from utilities or one-two arbitrary numbers. When using numbers:\n// - one number: `min-width` query\n// - two from zero: `max-width`\n// - two numbers: range\n// ```scss\n// @include ml.bp('<sm,md:lg') {\n//\t\t.inp--common {\n//\t\t\tpadding-left: 48px;\n//\t\t}\n// }\n//\n// @include ml.bp(0 600px) {\n//\t\t.btn__icon {\n//\t\t\tmargin-left: 18px;\n//\t\t}\n// }\n//\n// @include ml.bp(16em 32em) {\n//\t\t.btn__icon {\n//\t\t\tmargin-top: 8px;\n//\t\t}\n// }\n//\n// // CSS\n// @media (max-width: 519px), (min-width: 768px) and (max-width: 991px) {\n//\t\t.inp--common {\n//\t\t\tpadding-left: 48px;\n//\t\t}\n// }\n//\n// @media (max-width: 599px) {\n//\t\t.btn__icon {\n//\t\t\tmargin-left: 18px;\n//\t\t}\n// }\n//\n// @media (min-width: 16em) and (max-width: 31.94em) {\n//\t\t.btn__icon {\n//\t\t\tmargin-top: 8px;\n//\t\t}\n// }\n// ```\n//\n// $bp - string in syntax for breakpoins or list with numbers.\n// @content - CSS relus that will be placed into mediaquery.\n//\n// Styleguide: sass-tools.mixins.ar.bp\n\n@mixin bp($bp) {\n\t$bp-type: meta.type-of($bp);\n\t$mq-str: '';\n\n\t@if $bp-type == 'string' {\n\t\t$mq-str: ml.convert-ar-bp($bp);\n\t} @else if $bp-type == 'number' {\n\t\t$mq-str: '(min-width: #{$bp})';\n\t} @else if $bp-type == 'list' {\n\t\t$from: list.nth($bp, 1);\n\t\t$to: list.nth($bp, 2);\n\t\t$to: $to - ml.bp-value-diff($to);\n\n\t\t$mq-str: if(\n\t\t\t$from == 0,\n\t\t\t'(max-width: #{$to})',\n\t\t\t'(min-width: #{$from}) and (max-width: #{$to})'\n\t\t);\n\t} @else {\n\t\t@error 'Wrong type of argument $bp: `#{$bp-type}`. Expected `string`, `number` or numbers `list`';\n\t}\n\n\t@media #{$mq-str} {\n\t\t@content;\n\t}\n}\n","http://localhost/sass/tools/mixins/base/forward-tools.scss":"@forward '../../settings';\n@forward '../../functions';\n","http://localhost/sass/tools/mixins/base/mk-ar.scss":"@use 'sass:meta';\n@use 'sass:map';\n@use 'sass:list';\n@use 'sass:string';\n\n@use 'forward-tools' as ml;\n\n// mk-ar\n//\n// Generate at-rules from the string with space separated abbreviations. Used [syntax](section-concepts.html#kssref-concepts-at_rules) for at-rules from utilities.\n//\n// ```scss\n//@include ml.mk-ar('@s:apcr4/3@:dm') using ($ar) {\n// \t.block {\n// \t\tdisplay: inline-grid;\n// \t}\n//}\n//\n//// CSS\n//@supports (aspect-ratio: 4/3) {\n// \t@media (display-mode: fullscreen) {\n// \t\t.block {\n// \t\t\tdisplay: inline-grid;\n// \t\t}\n// \t}\n//}\n// ```\n//\n// $at-rules - string with abbreviations\n// $this-util = null - utility for which the at-rules will be generated.<br> This is a map in format `('name': '', 'value': '')`\n// @content - CSS rules that will be placed into at-rules\n//\n// Styleguide: sass-tools.mixins.ar.mk_ar\n\n@mixin mk-ar($at-rules, $this-util: null) {\n\t$abbr-list: ml.str-split($at-rules, ' ');\n\n\t@each $key, $value in map.get(ml.$at-rules-cfg, 'keywords') {\n\t\t@if meta.type-of($value) == 'string' {\n\t\t\t$value: map.keys(map.get(ml.$at-rules-cfg, $value));\n\t\t}\n\n\t\t$abbr-list: ml.replace-keyword($abbr-list, $key, $value);\n\t}\n\n\t@each $item in $abbr-list {\n\t\t$ar-list: ml.str-split($item, ml.$tAAr);\n\n\t\t@if list.nth($ar-list, 1) == '' {\n\t\t\t$ar-list: ml.remove-nth($ar-list, 1);\n\t\t}\n\n\t\t@include -generate-ar($item, $this-util, $ar-list, 1, list.length($ar-list)) {\n\t\t\t@content($item);\n\t\t}\n\t}\n}\n\n@mixin -generate-ar($at-rules, $this-util, $ar-list, $cur-index, $last-index) {\n\t$item: list.nth($ar-list, $cur-index);\n\t$ar-alias: list.nth(ml.str-split($item, ml.$tAAnd), 1);\n\t$ar-name: ml.ls-find(\n\t\tmap.keys(ml.$at-rules-db), meta.get-function('-is-ar-alias'), $ar-alias\n\t);\n\t$converter: null;\n\t$ar-str: $item;\n\n\t@if string.index($at-rules, ml.$tAAr) == 1 or $cur-index > 1 {\n\t\t@if not $ar-name {\n\t\t\t@error 'At-rule for alias `#{$ar-alias}` is not defined';\n\t\t}\n\n\t\t$converter: map.get(ml.$at-rules-db, $ar-name, 'converter');\n\t\t$ar-str: string.slice($item, string.length($ar-alias) + 2);\n\t} @else {\n\t\t$ar-name: 'media';\n\t\t$converter: meta.get-function('convert-ar-bp', false, ml);\n\t}\n\n\t@#{$ar-name} #{meta.call($converter, $ar-str, $this-util)} {\n\t\t@if $cur-index < $last-index {\n\t\t\t@include -generate-ar($at-rules, $this-util, $ar-list, $cur-index + 1, $last-index) {\n\t\t\t\t@content;\n\t\t\t}\n\t\t} @else {\n\t\t\t@content;\n\t\t}\n\t}\n}\n\n@function -is-ar-alias($name, $i, $alias) {\n\t@return (\n\t\t($alias == '' and map.get(ml.$at-rules-db, $name, 'default')) or\n\t\tmap.get(ml.$at-rules-db, $name, 'alias') == $alias\n\t);\n}\n","http://localhost/sass/tools/mixins/high/forward-tools.scss":"@forward '../../settings';\n@forward '../../functions';\n@forward '../base';\n","http://localhost/sass/tools/mixins/base/mk-state.scss":"@use 'sass:meta';\n@use 'sass:list';\n@use 'sass:map';\n@use 'sass:selector';\n@use 'sass:string';\n\n@use 'forward-tools' as ml;\n\n// mk-state\n//\n// Generates values for utilities in various [states](section-concepts.html#kssref-concepts-utility-states). Names and values of states are set in the [settings](#kssref-sass-tools-settings-utils-states). Usually this mixin is not used separately because it is called inside [mk-util](#kssref-sass-tools-mixins-mk_util).\n//\n// ```scss\n//@include mk-state('.Bgc-mn0', ('h')) {\n//\t\tbackground-color: #60f;\n//}\n// ```\n// CSS\n// ```css\n//.Bgc-mn0 {\n//\t\tbackground-color: #60f;\n//}\n//\n//.h_Bgc-mn0:hover {\n//\t\tbackground-color: #60f;\n//}\n// ```\n//\n// $post\n// $pre = null\n// $no-state = 1 - number flag. If equal to 1, then a value without state will be generated as in the example above.\n// $selector = & - selector of CSS rule. Can be `string` or `&`.\n// $this-util = null\n// $custom-sel = null\n//\n/// Styleguide: sass-tools.mixins.utils.mk_state\n\n@mixin mk-state(\n\t$post,\n\t$pre: null,\n\t$no-state: true,\n\t$selector: &,\n\t$this-util: null,\n\t$custom-sel: null,\n) {\n\t@if not $selector {\n\t\t@error '$selector argument must not be null.';\n\t}\n\n\t$selector: ml.css-class($selector);\n\t$final-selector-list: ();\n\t$pre-comb-list: $selector;\n\n\t@at-root {\n\t\t@if $no-state {\n\t\t\t#{ml.util-apply-selector($custom-sel, $selector)} {\n\t\t\t\t@content;\n\t\t\t}\n\t\t}\n\n\t\t@if $pre {\n\t\t\t$pre-comb-list: ();\n\t\t\t$pre-states: ml.str-split($pre, ml.$kStCb);\n\t\t\t$separate-states: list.nth($pre-states, 1);\n\n\t\t\t@if $separate-states != '' {\n\t\t\t\t$final-selector-list: -convert-states($separate-states, $selector, $this-util);\n\t\t\t}\n\n\t\t\t@if list.length($pre-states) > 1 {\n\t\t\t\t$pre-comb-list: -convert-states(list.nth($pre-states, 2), $selector, $this-util);\n\t\t\t}\n\t\t}\n\n\t\t@if $post {\n\t\t\t$post-states: ml.str-split($post, ml.$kStCb);\n\t\t\t$separate-states: list.nth($post-states, 1);\n\n\t\t\t@if $separate-states != '' {\n\t\t\t\t$final-selector-list: list.join(\n\t\t\t\t\t$final-selector-list,\n\t\t\t\t\t-convert-states($separate-states, $selector, $this-util, 'post')\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t@if list.length($post-states) > 1 {\n\t\t\t\t@each $pre-item in $pre-comb-list {\n\t\t\t\t\t$final-selector-list: list.join(\n\t\t\t\t\t\t$final-selector-list,\n\t\t\t\t\t\t-convert-states(list.nth($post-states, 2), $pre-item, $this-util, 'post')\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t@each $item in $final-selector-list {\n\t\t\t#{ml.util-apply-selector($custom-sel, $item)} {\n\t\t\t\t@content;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@function -pre-state-selector($list, $selector, $this: null) {\n\t$result: ();\n\t$selector: ml.css-class($selector, 1);\n\t$escaped-token: ml.str-escape(ml.$tUCm);\n\n\t@each $item in $list {\n\t\t$selector-list: '';\n\n\t\t@each $part in ml.str-split(\n\t\t\tml.convert-util-states($item, $this, true), ','\n\t\t) {\n\t\t\t$state-prefix: ml.str-escape($item) + $escaped-token;\n\t\t\t$ar-separator: string.index($selector, $escaped-token + $this);\n\n\t\t\t$cur-selector: if(\n\t\t\t\t$ar-separator,\n\t\t\t\tstring.insert(\n\t\t\t\t\t$selector, $state-prefix, $ar-separator + string.length($escaped-token)\n\t\t\t\t),\n\t\t\t\t$state-prefix + $selector\n\t\t\t);\n\n\t\t\t$selector-list: $selector-list + '#{$part}.#{$cur-selector},';\n\t\t}\n\n\t\t$result: list.append($result, string.slice($selector-list, 1, -2));\n\t}\n\n\t@return $result;\n}\n\n@function -post-state-selector($list, $selector, $this: null) {\n\t$result: ();\n\t$escaped-token: ml.str-escape(ml.$tSTu);\n\n\t@each $item in $list {\n\t\t$util-selector: selector.append($selector, ml.str-escape(ml.$tUCm + $item));\n\t\t$state-selector: ml.str-replace-all(\n\t\t\tml.convert-util-states($item, $this), $escaped-token, $util-selector\n\t\t);\n\n\t\t$result: list.append(\n\t\t\t$result,\n\t\t\tselector.nest(\n\t\t\t\t$util-selector,\n\t\t\t\t$state-selector\n\t\t\t)\n\t\t);\n\t}\n\n\t@return $result;\n}\n\n@function -convert-states($item, $selector, $this: null, $type: 'pre') {\n\t// TODO: move this repeating code from here and from `mk-ar` to a separate function\n\t$result: ml.str-split(ml.str-trim($item), ' ');\n\n\t@each $key, $value in map.get(ml.$utils-cfg, 'states', 'keywords') {\n\t\t@if meta.type-of($value) == 'string' {\n\t\t\t$value: map.keys(map.get(ml.$utils-cfg, 'states', $value));\n\t\t}\n\n\t\t$result: ml.replace-keyword($result, $key, $value);\n\t}\n\n\t@return meta.call(\n\t\tmeta.get-function('-#{$type}-state-selector'),\n\t\t$result,\n\t\t$selector,\n\t\t$this\n\t);\n}\n","http://localhost/sass/tools/mixins/high/_index.scss":"@forward 'utils';\n","http://localhost/sass/tools/settings/base/general.scss":"@use 'sass:map';\n@use 'sass:math';\n@use 'sass:string';\n\n// General\n//\n// Settings that affect the work of the all toolkit.\n//\n// $browser-font-size = 16px - font size for converting [px to rem](section-sass-tools.html#kssref-sass-tools-functions-px2rem). 16px used because is default font size in settings of most browsers.\n// $su = 0.25rem - space unit value\n// $css-vars-fallback = false - add fallback for values in `grid-gutters` units\n// $css-transition-time = 0.3s - default transition duration.\n// $ratio-box-flex = false - adds a more advanced version of [Ratio-box](section-css_lib.html#kssref-css_lib-helpers-ratio-box) helper with an arbitrary height \\- `ratio-box-flex`\n// $wrapper-max-width = 1200px - max width of the [Wraper](section-css_lib.html#kssref-css_lib-helpers-wrapper) helper\n// $css-var-prefix = 'ml-' - prefix for the CSS custom properties, which are generated in the values of utilities. For example, value of `W-$myCard` with prefix: `var(--ml-myCard)`, and without: `var(--myCard)`\n// $class-prefix - prefix, which will be added to CSS classes of all utilities. This can be useful when using mlut on top of the existing CSS\n//\n// Styleguide: settings.general\n\n// TODO: add docs\n// Generic CSS\n//\n// Generic styles like a reset/normalize, setting `box-sizing` etc. See example here.\n//\n/// Styleguide: settings.general.generic_css\n\n// TODO: add docs for css vars\n// CSS variables\n//\n// Settings of global [CSS custom properties](section-css_lib.html#kssref-css_lib-styles-css_vars) which used in mlut.\n//\n/// Styleguide: settings.general.css_vars\n\n// Names\n//\n// In addition to variables, the names of custom properties are contained in the map `$css-vars`.\n// Below are the names of the variables, the corresponding keys in the map and names of custom properties.\n//\n// $var-gg = --gg - `gg`.\n// $var-grid-cols = --grid-cols - `grid-cols`.\n//\n/// Styleguide: settings.general.css_vars.names\n\n$ratio-box-flex: false !default;\n$browser-font-size: 16px !default;\n$css-transition-time: 0.3s !default;\n$wrapper-max-width: 1200px !default;\n\n$su: 0.25rem !default;\n\n$is-test-env: false !default;\n\n$css-var-prefix: 'ml-' !default;\n$css-vars-fallback: false !default;\n\n$class-prefix: '' !default;\n\n$hex-digits: (\n\t'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'\n);\n\n$dec-digits: (\n\t'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n);\n\n$spec-chars: (\n\t' ', '!', '#', '$', '%', '&', '(', ')', '*', '+', ',', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '`', '{', '|', '}', '~', \"'\",\n) !default;\n\n$number-max: 2e9 !default;\n\n$general-cfg: (\n\t'main-directions': (\n\t\t't': top,\n\t\t'r': right,\n\t\t'b': bottom,\n\t\t'l': left,\n\t),\n\t'custom-unit-values': (\n\t\t'u': $su,\n\t),\n\t'units': (\n\t\t'css': (\n\t\t\t'px': 1px,\n\t\t\t'cm': 1cm,\n\t\t\t'mm': 1mm,\n\t\t\t'q': 1q,\n\t\t\t'rem': 1rem,\n\t\t\t'%': 1%,\n\t\t\t'fr': 1fr,\n\t\t\t'ch': 1ch,\n\t\t\t'pc': 1pc,\n\t\t\t'in': 1in,\n\t\t\t'em': 1em,\n\t\t\t'pt': 1pt,\n\t\t\t'ex': 1ex,\n\t\t\t'vw': 1vw,\n\t\t\t'vh': 1vh,\n\t\t\t'vmin': 1vmin,\n\t\t\t'vmax': 1vmax,\n\t\t\t'deg': 1deg,\n\t\t\t'turn': 1turn,\n\t\t\t'grad': 1grad,\n\t\t\t'rad': 1rad,\n\t\t\t's': 1s,\n\t\t\t'ms': 1ms,\n\t\t\t'hz': 1hz,\n\t\t\t'khz': 1khz,\n\t\t\t'dpi': 1dpi,\n\t\t\t'dpcm': 1dpcm,\n\t\t\t'dppx': 1dppx,\n\t\t\t'x': 1x,\n\t\t),\n\t\t'custom': (\n\t\t\t'': 1,\n\t\t\t'gg': 1gg,\n\t\t\t'gc': 1gc,\n\t\t\t'u': 1u,\n\t\t\t'd': 1d,\n\t\t\t'e': 1e,\n\t\t\t'g': 1g,\n\t\t\t'i': 1i,\n\t\t\t'p': 1p,\n\t\t\t'r': 1r,\n\t\t\t'ra': 1ra,\n\t\t\t't': 1t,\n\t\t),\n\t),\n\t'generic-css': (\n\t\t'border-box': true,\n\t\t'sup-sub-no-v-align': true,\n\t\t'embeds-v-align': true,\n\t\t'embeds-aspect-ratio': true,\n\t\t'forms-normalize': true,\n\t\t'embeds-block': false,\n\t\t'svg-fill-cur-color': false,\n\t\t'default-reduce-motion': false,\n\t\t'reset-border': false,\n\t\t'reset': false,\n\t),\n\t'css-vars': (\n\t\t'gg': 'gg',\n\t\t'gs-formula-diff': 'gsfd',\n\t\t'gs-columns-count': 'gscc',\n\t),\n) !default;\n\n$general-config: () !default;\n$general-config-ext: () !default;\n\n$general-cfg: map.deep-merge($general-cfg, $general-config);\n$general-cfg: map.deep-merge($general-cfg, $general-config-ext);\n\n$main-directions: map.get($general-cfg, 'main-directions');\n\n$units-all: map.merge(\n\tmap.get($general-cfg, 'units', 'css'),\n\tmap.get($general-cfg, 'units', 'custom'),\n);\n\n$-prefixed-vars: ();\n\n@each $key, $value in map.get($general-cfg, 'css-vars') {\n\t$-prefixed-vars: map.set(\n\t\t$-prefixed-vars, $key, string.unquote('--#{$css-var-prefix}#{$value}')\n\t);\n}\n\n$general-cfg: map.set($general-cfg, 'css-vars', $-prefixed-vars);\n\n$var-gg: map.get($general-cfg, 'css-vars', 'gg');\n$var-gsfd: map.get($general-cfg, 'css-vars', 'gs-formula-diff');\n$var-gscc: map.get($general-cfg, 'css-vars', 'gs-columns-count');\n\n$base-border-box: map.get($general-cfg, 'generic-css', 'border-box');\n","http://localhost/sass/tools/settings/common/_index.scss":"@forward 'utils';\n@forward 'at-rules';\n","http://localhost/sass/tools/settings/common/at-rules.scss":"@use 'sass:map';\n@use 'sass:list';\n@use 'sass:string';\n@use 'sass:math';\n@use '../base' as ml;\n@use 'utils' as ud;\n\n// At-rules\n//\n// Settings for media queries and other CSS at-rules. There is a small database and several configs.\n//\n// Styleguide: settings.at_rules\n\n// Data\n//\n// `$at-rules-db` \\- map, the keys in which are the names of the at-rules, and the values are map with options. In the options of each at-rule there is a custom map, to which you can add alias for custom expressions. See example [here](section-how_to.html#kssref-how_to-config-media).\n//\n// Below are the at-rule options\n//\n// alias - `string` <div>the abbreviation that will be used in the utils components. It will be converted into at-crule name. For example: `@s` => `@supports`</div>\n// default = false - <div class=\"Mt3u\"> `boolean` </div> It can be `true`, only in one at-rule. Sets at-rule by default. This means that this at-rule will be used, without an indication of alias after the `@` symbol. By default, `media` is default at-rule\n// custom - <div class=\"Mt3u\"> `map` </div> Here you can set alias for custom expressions. See the example above\n//\n// Styleguide: settings.at_rules.data\n\n// Breakpoints\n//\n// Breakpoints are stored in the config `$at-rules-cfg`, in the `breakpoints` section. For convenience, they are configured in a separate map `$breakpoints`. You can see an example of simple use [here](section-how_to.html#kssref-how_to-config-bp).\n//\n// Name | Value\n// :---: | :---:\n// <sm | 0px\n// sm | 520px\n// md | 768px\n// lg | 992px\n// xl | 1200px\n// xxl | 1400px\n//\n// To fully rewrite breakpoints, use `$breakpoints-ext` map:\n// ```scss\n//\t@use 'mlut/tools' as ml with (\n//\t\t$breakpoints: null,\n//\t\t$breakpoints-ext: (\n//\t\t\t'sm': 768px,\n//\t\t\t'md': 1200px,\n//\t\t\t'lg': 1440px,\n//\t\t),\n//\t);\n//\n//\t@debug map.get(ml.$at-rules-cfg, 'breakpoints');\n//\t// (\n//\t// 'sm': 768px,\n//\t// 'md': 1200px,\n//\t// 'lg': 1440px,\n//\t// )\n// ```\n//\n// Styleguide: settings.at_rules.breakpoints\n\n$at-rules-db: (\n\t'media': (\n\t\t'alias': 'm',\n\t\t'default': true,\n\t\t'types': (\n\t\t\t'pr': print,\n\t\t\t's': screen,\n\t\t),\n\t),\n\t'supports': (\n\t\t'alias': 's',\n\t),\n\t'container': (\n\t\t'alias': 'c',\n\t),\n\t'layer': (\n\t\t'alias': 'l',\n\t),\n) !default;\n\n$at-rules-cfg: (\n\t'tokens': (\n\t\t'syntax': (\n\t\t\t'or': ml.$tSOr,\n\t\t\t'and': ml.$tSAnd,\n\t\t\t'custom': ml.$tSCs,\n\t\t\t'not': ml.$tSNot,\n\t\t\t'ar': '@',\n\t\t\t'greater-equal': '>=',\n\t\t\t'less-equal': '<=',\n\t\t\t'greater': '>',\n\t\t\t'less': '<',\n\t\t),\n\t\t'generation': (\n\t\t\t'all-breakpoints': 'BpAll',\n\t\t\t'at-rules-only': 'ArOl',\n\t\t\t'at-rules-states': 'ArSt',\n\t\t\t'at-rules-states-only': 'ArSO',\n\t\t),\n\t),\n\t'breakpoints': (\n\t\t'sm': 520px,\n\t\t'md': 768px,\n\t\t'lg': 992px,\n\t\t'xl': 1200px,\n\t\t'xxl': 1400px,\n\t),\n) !default;\n\n$at-rules-data: () !default;\n$at-rules-data-ext: () !default;\n$at-rules-config: () !default;\n$at-rules-config-ext: () !default;\n$breakpoints: () !default;\n$breakpoints-ext: () !default;\n\n$at-rules-db: map.deep-merge($at-rules-db, $at-rules-data);\n$at-rules-db: map.deep-merge($at-rules-db, $at-rules-data-ext);\n$at-rules-cfg: map.deep-merge($at-rules-cfg, $at-rules-config);\n$at-rules-cfg: map.deep-merge($at-rules-cfg, $at-rules-config-ext);\n$at-rules-cfg: map.merge($at-rules-cfg, 'breakpoints', $breakpoints);\n$at-rules-cfg: map.merge($at-rules-cfg, 'breakpoints', $breakpoints-ext);\n\n$bp-map: map.get($at-rules-cfg, 'breakpoints');\n$-bp-values: map.values($bp-map);\n$bp-keys: map.keys($bp-map);\n$bp-map: ();\n\n@for $i from 1 through list.length($-bp-values) {\n\t$min-bp: math.min($-bp-values...);\n\t$min-index: list.index($-bp-values, $min-bp);\n\t$-bp-values: list.set-nth($-bp-values, $min-index, ml.$number-max);\n\t$bp-map: map.set($bp-map, list.nth($bp-keys, $min-index), $min-bp);\n}\n\n$at-rules-cfg: map.set($at-rules-cfg, 'breakpoints', $bp-map);\n$-custom-global-kw: map.get(ud.$utils-db, 'common', 'keywords', 'global');\n$-bp-kw-map: ();\n\n@each $key, $value in $bp-map {\n\t$-bp-kw-map: map.set(\n\t\t$-bp-kw-map,\n\t\t(\n\t\t\tml.$tUGkw +\n\t\t\tstring.to-upper-case(string.slice($key, 1, 1)) +\n\t\t\tstring.slice($key, 2)\n\t\t),\n\t\t$value\n\t);\n}\n\n$global-kw-bp: map.keys($-bp-kw-map);\n\n@if $-custom-global-kw {\n\t$-bp-kw-map: map.merge($-bp-kw-map, $-custom-global-kw);\n}\n\nud.$utils-db: map.set(\n\tud.$utils-db, 'common', 'keywords', 'global', $-bp-kw-map\n);\n\n$tAOr: map.get($at-rules-cfg, 'tokens', 'syntax', 'or');\n$tAAnd: map.get($at-rules-cfg, 'tokens', 'syntax', 'and');\n$tANot: map.get($at-rules-cfg, 'tokens', 'syntax', 'not');\n$tACs: map.get($at-rules-cfg, 'tokens', 'syntax', 'custom');\n$tAAr: map.get($at-rules-cfg, 'tokens', 'syntax', 'ar');\n$tAGte: map.get($at-rules-cfg, 'tokens', 'syntax', 'greater-equal');\n$tALse: map.get($at-rules-cfg, 'tokens', 'syntax', 'less-equal');\n$tAGt: map.get($at-rules-cfg, 'tokens', 'syntax', 'greater');\n$tALs: map.get($at-rules-cfg, 'tokens', 'syntax', 'less');\n\n$kBpAll: map.get($at-rules-cfg, 'tokens', 'generation', 'all-breakpoints');\n$kArOl: map.get($at-rules-cfg, 'tokens', 'generation', 'at-rules-only');\n$kArSt: map.get($at-rules-cfg, 'tokens', 'generation', 'at-rules-states');\n$kArSO: map.get($at-rules-cfg, 'tokens', 'generation', 'at-rules-states-only');\n\n$cBpAllCp: $kBpAll + ' _';\n$cArOlBp: '#{$kBpAll} #{$kArOl} _';\n$cArStBp: '#{$kBpAll} #{$kArSt} _';\n\n$at-rules-cfg: map.merge(\n\t$at-rules-cfg,\n\t(\n\t\t'keywords': map.merge(\n\t\t\t(\n\t\t\t\t$kBpAll: 'breakpoints',\n\t\t\t\t$kArOl: null,\n\t\t\t\t$kArSO: null,\n\t\t\t\t$kArSt: null,\n\t\t\t),\n\t\t\tmap.get($at-rules-cfg, 'keywords') or ()\n\t\t),\n\t\t'abbr-separators': list.join(\n\t\t\t(\n\t\t\t\t$tAGte,\n\t\t\t\t$tALse,\n\t\t\t\t$tAGt,\n\t\t\t\t$tALs,\n\t\t\t),\n\t\t\tmap.get($at-rules-cfg, 'abbr-separators') or ()\n\t\t)\n\t)\n);\n\n$abbr-separators: ();\n\n@each $item in list.join(\n\tmap.get($at-rules-cfg, 'abbr-separators'),\n\tmap.get(ml.$utils-cfg, 'abbr-separators'),\n) {\n\t@if $item != '' {\n\t\t$abbr-separators: list.append($abbr-separators, $item);\n\t}\n}\n","http://localhost/sass/tools/settings/base/_index.scss":"@forward 'general';\n@forward 'utils';\n","http://localhost/sass/tools/settings/common/utils.scss":"@use 'sass:map';\n@use 'sass:list';\n@use 'sass:string';\n@use 'sass:meta';\n\n@use '../base' as ml;\n\n// Data\n//\n// The database of utilities is divided into 3 sections:\n// - utils \\- all utils that can be used to stylize\n// - media \\- [@media](https://developer.mozilla.org/en-US/docs/Web/CSS/@media) features\n// - common \\- common utils for both section\n//\n// Media features are here, because to work with them, the same code is used as for ordinary utilities.\n//\n// The sections have a similar structure and consist of subsections such as *registry* and *keywords*.\n//\n// Styleguide: settings.utils.data\n\n// Registry\n//\n// The registry stores data of all utilities. You can get these data with the following path:\n// ```scss\n// @use 'mlut/tools' as ml;\n// map.get(ml.$utils-db, 'utils', 'registry', '<utility-name>');\n// ```\n// The registry is a map, the keys in which are the names of the utility, and the value can be, both a string with 1 property and a map with options. Below will be examined in detail the utility options. You can familiarize yourself with the utility registry on [this](section-utils-reference.html) page, and the registry of media features is available [here](section-general_reference.html#kssref-general_reference-media).\n//\n// Weight: 0\n//\n// Styleguide: settings.utils.data.registry\n\n// Keywords\n//\n// In this subsection, keywords that are used in several utilities are stored. To use a set of keywords from here, specify the corresponding map key, in the `keywords` setting of utility.\n// ```scss\n//\t@use 'mlut/tools' as ml with (\n//\t\t$utils-data: (\n//\t\t\t'utils': (\n//\t\t\t\t'registry': (\n//\t\t\t\t\t'Mxw': (\n//\t\t\t\t\t\t'keywords': ('sizing', 'my-sizing'),\n//\t\t\t\t\t),\n//\t\t\t\t\t'Flb': (\n//\t\t\t\t\t\t'keywords': ('sizing', 'my-sizing'),\n//\t\t\t\t\t),\n//\t\t\t\t),\n//\t\t\t\t'keywords': (\n//\t\t\t\t\t// adds new keywords to the existing set\n//\t\t\t\t\t'box-alignment': (\n//\t\t\t\t\t\t'sf': safe,\n//\t\t\t\t\t\t'u': unsafe,\n//\t\t\t\t\t),\n//\t\t\t\t\t'my-sizing': (\n//\t\t\t\t\t\t'sm': 22rem,\n//\t\t\t\t\t\t'md': 44rem,\n//\t\t\t\t\t),\n//\t\t\t\t),\n//\t\t\t),\n//\t\t),\n//\t);\n//\n//\t@debug ml.uv('Mxw-sm'); // 22rem\n//\t@debug ml.uv('Flb-md'); // 44rem\n//\t@debug ml.uv('Jc-c;sf'); // center safe\n// ```\n// See the full list of keywords [here](section-general_reference.html#kssref-general_reference-kw).\n//\n// Weight: 1\n//\n// Styleguide: settings.utils.data.kw\n\n// Utilities options\n//\n// These options control how the utility works. You can find example of usage in the [reference](section-utils-reference.html). Later more examples will be added.\n//\n// properties - `string | list` <div>The list of CSS properties controlled by the utility. Properties are specified as strings without quotes. If you do not specify this option, then the name of the utility will be used as a property</div>\n// preset-properties - <div class=\"Mt3u\"> `map` </div> Map with CSS properties and values that will be substituted for any utility value. As a value, you can specify the Sass function in which the following arguments will be passed: the name of the utility, value, CSS-value and `important` boolean flag\n// keywords - <div class=\"Mt3u\"> `string | list | map` </div>Abbreviations that will expand in CSS-values during conversion. You can clearly specify map in format `('abbr': value)`. You can also specify one or more links to the existing set. Link - the key in map `keywords`, which is located in the same database. In this map there are already sets of frequently used CSS keywords. Please note that the keyword is an empty line `''` - the meaning of the default utility value\n// conversion = 'default' - <div class=\"Mt3u\">`string` </div> Type of conversion. It determines how the value of the utility in CSS value will convert. This means that for the `Txt-l` utility, CSS value will be `lowercase`, and for `Wlc-l` - `left`. See more details about the type of conversion in the description of the configure of utilities.\n// repeat-prop-values = true - <div class=\"Mt3u\"> `boolean` </div> The flag is relevant for utils that control several properties. If it is turned on and less values are specified for the utility than the properties, then the values will be repeated for incomplete properties. For example, a utility with the flag on will work approximately like `margin: 1px;`, and a utility without a flag, like `background: red`. *Please note* that an algorithm for repeating values differs from the repetition algorithm in CSS\n// range-generator = 'number' - <div class=\"Mt3u\"> `string` </div> [range syntax](section-how_to.html#kssref-how_to-mk_utils-range) processing method\n// selector - <div class=\"Mt3u\"> `string` </div> The modifier that will be added to the utility selector with any value and condition. It is a string-template in which the utility selector is indicated by `&`. For example: `&::after`\n// components - <div class=\"Mt3u\"> `string` </div> Here you can specify the components with which all utility values ​​will be generated. The components from this option will have a priority over those that are specified when creating a utility using [Generation Syntax](section-concepts.html#kssref-concepts-util-components-syntax). This syntax is also used here. *Please note* that along with the components, you need to specify the name of the utility and here it can be changed. If you need to change only the name, write it without components. The name can be left empty, then the value of the utility will be used instead. This can be relevant only for utilities, in which the values ​​are keywords. Also note that even when the name changes in the options, inside mlut, the utility will still be identified on the initial key in `$utils-db`\n// multi-list-separator - <div class=\"Mt3u\"> `string` </div> The separator of the nested lists in the value of the utility. The option is relevant for utilities, in the property of which, CSS-value can be a list of a list. For example, `border-radius: 2px 3px / 8px;`. It is important to clearly specify this separator so that the conversion of the values works correctly. Usually in CSS such a separator will be `,` or `/`.\n// transformer - <div class=\"Mt3u\"> `string` </div> A function that will process CSS value after conversion\n//\n// Weight: 2\n//\n// Styleguide: settings.utils.data.options\n\n$uv-css-var-prefix: ml.$css-var-prefix !default;\n$cv-pref: '--' + ml.$css-var-prefix;\n\n$utils-data: () !default;\n$utils-data-ext: () !default;\n$colors: () !default;\n$utils-map: ();\n\n$-css-wide-kw: (\n\t'ih': inherit,\n\t'ini': initial,\n\t'rvr': revert,\n\t'rvrl': revert-layer,\n\t'ust': unset,\n);\n$-sizing-kw: (\n\t'fc': fit-content,\n\t'mc': max-content,\n\t'mnc': min-content,\n);\n\n$-bd-kw-links: ('border', 'line-style', 'line-width');\n$-radial-grad-kw: (\n\t'position',\n\t'radial-shape',\n\t'ray-size',\n\t'color-space',\n\t'hue-interpolation',\n\t'gradients',\n);\n$-conic-grad-kw: (\n\t'position',\n\t'color-space',\n\t'hue-interpolation',\n\t'gradients',\n);\n\n//stylelint-disable\n$utils-db: (\n\t'utils': (\n\t\t'registry': (\n\t\t\t'-Gscc': (\n\t\t\t\t'properties': ml.$var-gscc,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'-Gsfd': ml.$var-gsfd,\n\t\t\t'-Gg': ml.$var-gg,\n\t\t\t'-Gsf': (\n\t\t\t\t'properties': (\n\t\t\t\t\t$cv-pref + 'gscf',\n\t\t\t\t\t$cv-pref + 'gsof',\n\t\t\t\t),\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': (\n\t\t\t\t\tcalc(var(#{$cv-pref}gsc) / var(ml.$var-gscc) * 100% - var(ml.$var-gsfd, var(ml.$var-gg)) * 2),\n\t\t\t\t\tcalc(var(#{$cv-pref}gso) / var(ml.$var-gscc) * 100% + var(ml.$var-gsfd, var(ml.$var-gg))),\n\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t// POSITION\n\t\t\t'Ps': (\n\t\t\t\t'properties': position,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': relative,\n\t\t\t\t\t'a': absolute,\n\t\t\t\t\t'f': fixed,\n\t\t\t\t\t'r': relative,\n\t\t\t\t\t's': static,\n\t\t\t\t\t'sk': sticky,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'T': top,\n\t\t\t'R': right,\n\t\t\t'B': bottom,\n\t\t\t'L': left,\n\t\t\t'-X': (\n\t\t\t\t'properties': (\n\t\t\t\t\tright, left,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Y': (\n\t\t\t\t'properties': (\n\t\t\t\t\ttop, bottom,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-I': (\n\t\t\t\t'properties': (\n\t\t\t\t\ttop, right, bottom, left\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Zi': (\n\t\t\t\t'properties': z-index,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\n\t\t\t// BOX-MODEL\n\t\t\t'D': (\n\t\t\t\t'properties': display,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': block,\n\t\t\t\t\t'b': block,\n\t\t\t\t\t'i': inline,\n\t\t\t\t\t'ib': inline-block,\n\t\t\t\t\t'f': flex,\n\t\t\t\t\t'if': inline-flex,\n\t\t\t\t\t'g': grid,\n\t\t\t\t\t'ig': inline-grid,\n\t\t\t\t\t'li': list-item,\n\t\t\t\t\t'ri': run-in,\n\t\t\t\t\t'flr': flow-root,\n\t\t\t\t\t'c': contents,\n\t\t\t\t\t't': table,\n\t\t\t\t\t'it': inline-table,\n\t\t\t\t\t'tr': table-row,\n\t\t\t\t\t'tc': table-cell,\n\t\t\t\t\t'tcl': table-column,\n\t\t\t\t\t'tclg': table-column-group,\n\t\t\t\t\t'thg': table-header-group,\n\t\t\t\t\t'tfg': table-footer-group,\n\t\t\t\t\t'trg': table-row-group,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-D': (\n\t\t\t\t'properties': (\n\t\t\t\t\tdisplay, flex-wrap, position, width, height,\n\t\t\t\t\tmargin, padding, overflow, white-space, border, clip,\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'mf': (flex, wrap),\n\t\t\t\t\t'mif': (inline-flex, wrap),\n\t\t\t\t\t'vh': (\n\t\t\t\t\t\tnull, null, absolute, 1px, 1px, -1px, 0, hidden, nowrap, 0, rect(0 0 0 0)\n\t\t\t\t\t),\n\t\t\t\t\t'v': (\n\t\t\t\t\t\tnull, null, static, auto, auto, 0, null, visible, normal, null, auto\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t'Fl': (\n\t\t\t\t'properties': flex,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Fld': (\n\t\t\t\t'properties': flex-direction,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'c': column,\n\t\t\t\t\t'cr': column-reverse,\n\t\t\t\t\t'r': row,\n\t\t\t\t\t'rr': row-reverse,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Flw': (\n\t\t\t\t'properties': flex-wrap,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': wrap,\n\t\t\t\t\t'n': nowrap,\n\t\t\t\t\t'w': wrap,\n\t\t\t\t\t'wr': wrap-reverse,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Flg': (\n\t\t\t\t'properties': flex-grow,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Fls': (\n\t\t\t\t'properties': flex-shrink,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Flb': (\n\t\t\t\t'properties': flex-basis,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\n\t\t\t'Ac': (\n\t\t\t\t'properties': align-content,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'As': (\n\t\t\t\t'properties': align-self,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Ai': (\n\t\t\t\t'properties': align-items,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Jc': (\n\t\t\t\t'properties': justify-content,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Ji': (\n\t\t\t\t'properties': justify-items,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Js': (\n\t\t\t\t'properties': justify-self,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Plcc': (\n\t\t\t\t'properties': place-content,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Plci': (\n\t\t\t\t'properties': place-items,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Plcs': (\n\t\t\t\t'properties': place-self,\n\t\t\t\t'keywords': 'box-alignment',\n\t\t\t),\n\t\t\t'Od': (\n\t\t\t\t'properties': order,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\n\t\t\t'G': (\n\t\t\t\t'properties': grid,\n\t\t\t\t'conversion': 'grid-tpl',\n\t\t\t\t'multi-list-separator': ml.$tULs2,\n\t\t\t\t'keywords': ('grid', 'sizing', 'grid-type'),\n\t\t\t),\n\t\t\t'Gt': (\n\t\t\t\t'properties': grid-template,\n\t\t\t\t'conversion': 'grid-tpl',\n\t\t\t\t'keywords': ('sizing', 'grid-type'),\n\t\t\t),\n\t\t\t'Gtc': (\n\t\t\t\t'properties': grid-template-columns,\n\t\t\t\t'conversion': 'grid-tpl',\n\t\t\t\t'keywords': ('sizing', 'grid-type'),\n\t\t\t),\n\t\t\t'Gc': (\n\t\t\t\t'properties': grid-column,\n\t\t\t\t'conversion': 'grid-span',\n\t\t\t\t'multi-list-separator': ml.$tULs2,\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Gcs': (\n\t\t\t\t'properties': grid-column-start,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Gce': (\n\t\t\t\t'properties': grid-column-end,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Gtr': (\n\t\t\t\t'properties': grid-template-rows,\n\t\t\t\t'conversion': 'grid-tpl',\n\t\t\t\t'keywords': ('sizing', 'grid-type'),\n\t\t\t),\n\t\t\t'Gr': (\n\t\t\t\t'properties': grid-row,\n\t\t\t\t'conversion': 'grid-span',\n\t\t\t\t'multi-list-separator': ml.$tULs2,\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Grs': (\n\t\t\t\t'properties': grid-row-start,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Gre': (\n\t\t\t\t'properties': grid-row-end,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Ga': (\n\t\t\t\t'properties': grid-area,\n\t\t\t\t'conversion': 'grid-span',\n\t\t\t\t'multi-list-separator': ml.$tULs2,\n\t\t\t\t'keywords': 'grid-area',\n\t\t\t),\n\t\t\t'Gatc': (\n\t\t\t\t'properties': grid-auto-columns,\n\t\t\t\t'keywords': ('grid-auto-track', 'sizing'),\n\t\t\t),\n\t\t\t'Gatr': (\n\t\t\t\t'properties': grid-auto-rows,\n\t\t\t\t'keywords': ('grid-auto-track', 'sizing'),\n\t\t\t),\n\t\t\t'Gatf': (\n\t\t\t\t'properties': grid-auto-flow,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'c': column,\n\t\t\t\t\t'd': dense,\n\t\t\t\t\t'r': row,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Gap': gap,\n\t\t\t'Rwg': row-gap,\n\t\t\t'Clmg': column-gap,\n\n\t\t\t'F': (\n\t\t\t\t'properties': float,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': left,\n\t\t\t\t\t'l': left,\n\t\t\t\t\t'r': right,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Cl': (\n\t\t\t\t'properties': clear,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': both,\n\t\t\t\t\t'b': both,\n\t\t\t\t\t'l': left,\n\t\t\t\t\t'r': right,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Cl': (\n\t\t\t\t'preset-properties': (\n\t\t\t\t\t'display': table,\n\t\t\t\t\t'content': '',\n\t\t\t\t),\n\t\t\t\t'properties': clear,\n\t\t\t\t'selector': '&::after',\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': both,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Bxs': (\n\t\t\t\t'properties': box-sizing,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': border-box,\n\t\t\t\t\t'bb': border-box,\n\t\t\t\t\t'cb': content-box,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Mnw': (\n\t\t\t\t'properties': min-width,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Mxw': (\n\t\t\t\t'properties': max-width,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Mnh': (\n\t\t\t\t'properties': min-height,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Mxh': (\n\t\t\t\t'properties': max-height,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'-Sz': (\n\t\t\t\t'properties': (width, height),\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Tbl': (\n\t\t\t\t'properties': table-layout,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'f': fixed,\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t'M': margin,\n\t\t\t'Mt': margin-top,\n\t\t\t'Mr': margin-right,\n\t\t\t'Mb': margin-bottom,\n\t\t\t'Ml': margin-left,\n\t\t\t'-Mx': (\n\t\t\t\t'properties': (\n\t\t\t\t\tmargin-right, margin-left\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-My': (\n\t\t\t\t'properties': (\n\t\t\t\t\tmargin-top, margin-bottom\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t'P': padding,\n\t\t\t'Pt': padding-top,\n\t\t\t'Pr': padding-right,\n\t\t\t'Pb': padding-bottom,\n\t\t\t'Pl': padding-left,\n\t\t\t'-Px': (\n\t\t\t\t'properties': (\n\t\t\t\t\tpadding-right, padding-left\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Py': (\n\t\t\t\t'properties': (\n\t\t\t\t\tpadding-top, padding-bottom\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t'Ov': (\n\t\t\t\t'properties': overflow,\n\t\t\t\t'keywords': 'overflow',\n\t\t\t),\n\t\t\t'Ovx': (\n\t\t\t\t'properties': overflow-x,\n\t\t\t\t'keywords': 'overflow',\n\t\t\t),\n\t\t\t'Ovy': (\n\t\t\t\t'properties': overflow-y,\n\t\t\t\t'keywords': 'overflow',\n\t\t\t),\n\n\t\t\t// TYPOGRAPHY\n\t\t\t'C': (\n\t\t\t\t'properties': color,\n\t\t\t\t'range-generator': 'color',\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Fn': font,\n\t\t\t'Fnw': (\n\t\t\t\t'properties': font-weight,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': (\n\t\t\t\t\t'b': bold,\n\t\t\t\t\t'bd': bolder,\n\t\t\t\t\t'l': lighter,\n\t\t\t\t\t'n': normal,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Fns': (\n\t\t\t\t'properties': font-size,\n\t\t\t\t'keywords': 'font-size',\n\t\t\t),\n\t\t\t'-Fns': (\n\t\t\t\t'properties': (\n\t\t\t\t\tfont-size,\n\t\t\t\t\tline-height,\n\t\t\t\t\tletter-spacing,\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': 'font-size',\n\t\t\t),\n\t\t\t'Fnf': (\n\t\t\t\t'properties': font-family,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'mUss': (ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'),\n\t\t\t\t\t'mUsr': (ui-serif, Georgia, Cambria, Times, 'Times New Roman', serif),\n\t\t\t\t\t'mUm': (ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Fnst': (\n\t\t\t\t'properties': font-style,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': italic,\n\t\t\t\t\t'i': italic,\n\t\t\t\t\t'n': normal,\n\t\t\t\t\t'o': oblique,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Lnh': (\n\t\t\t\t'properties': line-height,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'keywords': (\n\t\t\t\t\t'n': normal,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Lts': (\n\t\t\t\t'properties': letter-spacing,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'n': normal,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Whs': (\n\t\t\t\t'properties': white-space,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': nowrap,\n\t\t\t\t\t'n': nowrap,\n\t\t\t\t\t'nm': normal,\n\t\t\t\t\t'p': pre,\n\t\t\t\t\t'pw': pre-wrap,\n\t\t\t\t\t'pl': pre-line,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txa': (\n\t\t\t\t'properties': text-align,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': center,\n\t\t\t\t\t'c': center,\n\t\t\t\t\t'e': end,\n\t\t\t\t\t'j': justify,\n\t\t\t\t\t'l': left,\n\t\t\t\t\t'mp': match-parent,\n\t\t\t\t\t'r': right,\n\t\t\t\t\t's': start,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txt': (\n\t\t\t\t'properties': text-transform,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': uppercase,\n\t\t\t\t\t'c': capitalize,\n\t\t\t\t\t'l': lowercase,\n\t\t\t\t\t'u': uppercase,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txuo': text-underline-offset,\n\t\t\t'Txwm': (\n\t\t\t\t'properties': text-wrap-mode,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': nowrap,\n\t\t\t\t\t'w': wrap,\n\t\t\t\t\t'n': nowrap,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txws': (\n\t\t\t\t'properties': text-wrap-style,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'b': balance,\n\t\t\t\t\t's': stable,\n\t\t\t\t\t'p': pretty,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txw': (\n\t\t\t\t'properties': text-wrap,\n\t\t\t\t'keywords': (Txwm, Txws),\n\t\t\t),\n\n\t\t\t'Txi': (\n\t\t\t\t'properties': text-indent,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'h': hanging,\n\t\t\t\t\t'el': each-line,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txor': (\n\t\t\t\t'properties': text-orientation,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'm': mixed,\n\t\t\t\t\t'u': upright,\n\t\t\t\t\t's': sideways,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Wrb': (\n\t\t\t\t'properties': word-break,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'ba': break-all,\n\t\t\t\t\t'ka': keep-all,\n\t\t\t\t\t'n': normal,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ovw': (\n\t\t\t\t'properties': overflow-wrap,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'a': anywhere,\n\t\t\t\t\t'bw': break-word,\n\t\t\t\t\t'n': normal,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Wtm': (\n\t\t\t\t'properties': writing-mode,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'ht': horizontal-tb,\n\t\t\t\t\t'vr': vertical-rl,\n\t\t\t\t\t'vl': vertical-lr,\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t'Txd': (\n\t\t\t\t'properties': text-decoration,\n\t\t\t\t'keywords': ('text-decoration', 'line-style'),\n\t\t\t\t'conversion': 'outline',\n\t\t\t),\n\t\t\t'Txdc': (\n\t\t\t\t'properties': text-decoration-color,\n\t\t\t\t'range-generator': 'color',\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Txdl': (\n\t\t\t\t'properties': text-decoration-line,\n\t\t\t\t'keywords': 'text-decoration',\n\t\t\t),\n\t\t\t'Txdst': (\n\t\t\t\t'properties': text-decoration-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'Txdt': (\n\t\t\t\t'properties': text-decoration-thickness,\n\t\t\t\t'keywords': 'text-decoration',\n\t\t\t),\n\n\t\t\t'Txs': (\n\t\t\t\t'properties': text-shadow,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Va': (\n\t\t\t\t'properties': vertical-align,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': middle,\n\t\t\t\t\t'b': bottom,\n\t\t\t\t\t'bl': baseline,\n\t\t\t\t\t'm': middle,\n\t\t\t\t\t'sb': sub,\n\t\t\t\t\t'sp': super,\n\t\t\t\t\t't': top,\n\t\t\t\t\t'txb': text-bottom,\n\t\t\t\t\t'txt': text-top,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Txo': (\n\t\t\t\t'properties': text-overflow,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': ellipsis,\n\t\t\t\t\t'c': clip,\n\t\t\t\t\t'e': ellipsis,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Txo': (\n\t\t\t\t'properties': (\n\t\t\t\t\ttext-overflow, overflow, white-space,\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': (ellipsis, hidden, nowrap),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Hp': (\n\t\t\t\t'properties': hyphens,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'm': manual,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Tas': (\n\t\t\t\t'properties': tab-size,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Lss': (\n\t\t\t\t'properties': list-style,\n\t\t\t\t'keywords': (Lsst, Lssp),\n\t\t\t),\n\t\t\t'Lsst': (\n\t\t\t\t'properties': list-style-type,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'd': disc,\n\t\t\t\t\t'c': circle,\n\t\t\t\t\t's': square,\n\t\t\t\t\t'dc': decimal,\n\t\t\t\t\t'dclz': decimal-leading-zero,\n\t\t\t\t\t'la': lower-alpha,\n\t\t\t\t\t'lr': lower-roman,\n\t\t\t\t\t'lg': lower-greek,\n\t\t\t\t\t'll': lower-latin,\n\t\t\t\t\t'ua': upper-alpha,\n\t\t\t\t\t'ul': upper-latin,\n\t\t\t\t\t'ur': upper-roman,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Lssp': (\n\t\t\t\t'properties': list-style-position,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'i': inside,\n\t\t\t\t\t'o': outside,\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t// BACKGROUND\n\t\t\t'Bg': (\n\t\t\t\t'properties': background,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Bgc': (\n\t\t\t\t'properties': background-color,\n\t\t\t\t'range-generator': 'color',\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Bgr': (\n\t\t\t\t'properties': background-repeat,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'repeat-style',\n\t\t\t),\n\t\t\t'Bgp': (\n\t\t\t\t'properties': background-position,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'position'\n\t\t\t),\n\t\t\t'Bgs': (\n\t\t\t\t'properties': background-size,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'bg-size',\n\t\t\t),\n\t\t\t'Bga': (\n\t\t\t\t'properties': background-attachment,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'f': fixed,\n\t\t\t\t\t'l': local,\n\t\t\t\t\t's': scroll,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Bgbm': (\n\t\t\t\t'properties': background-blend-mode,\n\t\t\t\t'keywords': 'blend-mode',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Bgcl': (\n\t\t\t\t'properties': background-clip,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'box-ext',\n\t\t\t),\n\t\t\t'Bgo': (\n\t\t\t\t'properties': background-origin,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'box-ext',\n\t\t\t),\n\t\t\t'Bgi': (\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'properties': background-image,\n\t\t\t),\n\t\t\t'-Gdl': (\n\t\t\t\t'properties': background-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'linear-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': ('position', 'gradients'),\n\t\t\t),\n\t\t\t'-Gdrl': (\n\t\t\t\t'properties': background-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'css-function': 'repeating-linear-gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': ('position', 'gradients'),\n\t\t\t),\n\t\t\t'-Gdrd': (\n\t\t\t\t'properties': background-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'radial-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-radial-grad-kw,\n\t\t\t),\n\t\t\t'-Gdrr': (\n\t\t\t\t'properties': background-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'css-function': 'repeating-radial-gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-radial-grad-kw,\n\t\t\t),\n\t\t\t'-Gdc': (\n\t\t\t\t'properties': background-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'conic-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-conic-grad-kw,\n\t\t\t),\n\t\t\t'-Gdrc': (\n\t\t\t\t'properties': background-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'repeating-conic-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-conic-grad-kw,\n\t\t\t),\n\n\t\t\t// TRANSFORM\n\t\t\t'Tf': (\n\t\t\t\t'properties': (\n\t\t\t\t\ttransform,\n\t\t\t\t\t$cv-pref + 'trx',\n\t\t\t\t\t$cv-pref + 'try',\n\t\t\t\t\t$cv-pref + 'sx',\n\t\t\t\t\t$cv-pref + 'sy',\n\t\t\t\t\t$cv-pref + 'rt',\n\t\t\t\t\t$cv-pref + 'skx',\n\t\t\t\t\t$cv-pref + 'sky',\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\ttranslateX(var(#{$cv-pref}trx))\n\t\t\t\t\t\t\ttranslateY(var(#{$cv-pref}try))\n\t\t\t\t\t\t\tscaleX(var(#{$cv-pref}sx))\n\t\t\t\t\t\t\tscaleY(var(#{$cv-pref}sy))\n\t\t\t\t\t\t\trotate(var(#{$cv-pref}rt))\n\t\t\t\t\t\t\tskewX(var(#{$cv-pref}skx))\n\t\t\t\t\t\t\tskewY(var(#{$cv-pref}sky))\n\t\t\t\t\t\t),\n\t\t\t\t\t\t0, 0, 1, 1, 0, 0, 0,\n\t\t\t\t\t),\n\t\t\t\t\t'mGpu': (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\ttranslate3d(var(#{$cv-pref}trx), var(#{$cv-pref}try), 0)\n\t\t\t\t\t\t\tscaleX(var(#{$cv-pref}sx))\n\t\t\t\t\t\t\tscaleY(var(#{$cv-pref}sy))\n\t\t\t\t\t\t\trotate(var(#{$cv-pref}rt))\n\t\t\t\t\t\t\tskewX(var(#{$cv-pref}skx))\n\t\t\t\t\t\t\tskewY(var(#{$cv-pref}sky))\n\t\t\t\t\t\t),\n\t\t\t\t\t\t0, 0, 1, 1, 0, 0, 0,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Tfo': (\n\t\t\t\t'properties': transform-origin,\n\t\t\t\t'keywords': 'position'\n\t\t\t),\n\t\t\t'-Tr': (\n\t\t\t\t'properties': (\n\t\t\t\t\t$cv-pref + 'trx',\n\t\t\t\t\t$cv-pref + 'try',\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Trx': $cv-pref + 'trx',\n\t\t\t'-S': (\n\t\t\t\t'properties': (\n\t\t\t\t\t$cv-pref + 'sx',\n\t\t\t\t\t$cv-pref + 'sy',\n\t\t\t\t),\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Sx': (\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Sy': (\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Sk': (\n\t\t\t\t'properties': (\n\t\t\t\t\t$cv-pref + 'skx',\n\t\t\t\t\t$cv-pref + 'sky',\n\t\t\t\t),\n\t\t\t\t'conversion': 'angle',\n\t\t\t),\n\t\t\t'-Skx': (\n\t\t\t\t'conversion': 'angle',\n\t\t\t),\n\t\t\t'-Sky': (\n\t\t\t\t'conversion': 'angle',\n\t\t\t),\n\t\t\t'-Rt': (\n\t\t\t\t'conversion': 'angle',\n\t\t\t),\n\n\t\t\t// VISUAL\n\t\t\t'Ol': (\n\t\t\t\t'properties': outline,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': ('line-style', 'line-width'),\n\t\t\t),\n\t\t\t'Olw': (\n\t\t\t\t'properties': outline-width,\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'Olc': (\n\t\t\t\t'properties': outline-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Ols': (\n\t\t\t\t'properties': outline-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'Olo': outline-offset,\n\n\t\t\t'Bxsd': (\n\t\t\t\t'properties': box-shadow,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'i': inset,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Bxdb': (\n\t\t\t\t'properties': box-decoration-break,\n\t\t\t\t'keywords': (\n\t\t\t\t\t's': slice,\n\t\t\t\t\t'c': clone,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Vs': (\n\t\t\t\t'properties': visibility,\n\t\t\t\t'keywords': 'visibility',\n\t\t\t),\n\t\t\t'Cs': (\n\t\t\t\t'properties': cursor,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': pointer,\n\t\t\t\t\t'c': cell,\n\t\t\t\t\t'clr': col-resize,\n\t\t\t\t\t'cp': copy,\n\t\t\t\t\t'ch': crosshair,\n\t\t\t\t\t'd': default,\n\t\t\t\t\t'er': e-resize,\n\t\t\t\t\t'ewr': ew-resize,\n\t\t\t\t\t'g': grab,\n\t\t\t\t\t'gb': grabbing,\n\t\t\t\t\t'h': help,\n\t\t\t\t\t'm': move,\n\t\t\t\t\t'nr': n-resize,\n\t\t\t\t\t'nta': not-allowed,\n\t\t\t\t\t'ner': ne-resize,\n\t\t\t\t\t'neswr': nesw-resize,\n\t\t\t\t\t'nwser': nwse-resize,\n\t\t\t\t\t'nsr': ns-resize,\n\t\t\t\t\t'nwr': nw-resize,\n\t\t\t\t\t'p': pointer,\n\t\t\t\t\t'pr': progress,\n\t\t\t\t\t'rr': row-resize,\n\t\t\t\t\t'sr': s-resize,\n\t\t\t\t\t'ser': se-resize,\n\t\t\t\t\t'swr': sw-resize,\n\t\t\t\t\t't': text,\n\t\t\t\t\t'vt': vertical-text,\n\t\t\t\t\t'wr': w-resize,\n\t\t\t\t\t'wt': wait,\n\t\t\t\t\t'zi': zoom-in,\n\t\t\t\t\t'zo': zoom-out,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'O': (\n\t\t\t\t'properties': opacity,\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'Bfv': (\n\t\t\t\t'properties': backface-visibility,\n\t\t\t\t'keywords': 'visibility',\n\t\t\t),\n\t\t\t'Ojf': (\n\t\t\t\t'properties': object-fit,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': cover,\n\t\t\t\t\t'ct': contain,\n\t\t\t\t\t'cv': cover,\n\t\t\t\t\t'f': fill,\n\t\t\t\t\t'sd': scale-down,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ojp': (\n\t\t\t\t'properties': object-position,\n\t\t\t\t'keywords': 'position'\n\t\t\t),\n\t\t\t'Is': (\n\t\t\t\t'properties': isolation,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'i': isolate,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ft': (\n\t\t\t\t'properties': (\n\t\t\t\t\tfilter,\n\t\t\t\t\t$cv-pref + 'blr',\n\t\t\t\t\t$cv-pref + 'bn',\n\t\t\t\t\t$cv-pref + 'ctr',\n\t\t\t\t\t$cv-pref + 'drps',\n\t\t\t\t\t$cv-pref + 'gra',\n\t\t\t\t\t$cv-pref + 'hur',\n\t\t\t\t\t$cv-pref + 'iv',\n\t\t\t\t\t$cv-pref + 'sa',\n\t\t\t\t\t$cv-pref + 'sp',\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tvar(#{$cv-pref}blr)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bn)\n\t\t\t\t\t\t\tvar(#{$cv-pref}ctr)\n\t\t\t\t\t\t\tvar(#{$cv-pref}drps)\n\t\t\t\t\t\t\tvar(#{$cv-pref}gra)\n\t\t\t\t\t\t\tvar(#{$cv-pref}hur)\n\t\t\t\t\t\t\tvar(#{$cv-pref}iv)\n\t\t\t\t\t\t\tvar(#{$cv-pref}sa)\n\t\t\t\t\t\t\tvar(#{$cv-pref}sp)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Blr': (\n\t\t\t\t'css-function': 'blur',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t),\n\t\t\t'-Bn': (\n\t\t\t\t'css-function': 'brightness',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Ctr': (\n\t\t\t\t'css-function': 'contrast',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Drps': (\n\t\t\t\t'css-function': 'drop-shadow',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'conversion': 'outline',\n\t\t\t),\n\t\t\t'-Gra': (\n\t\t\t\t'css-function': 'grayscale',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Hur': (\n\t\t\t\t'css-function': 'hue-rotate',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'angle',\n\t\t\t),\n\t\t\t'-Iv': (\n\t\t\t\t'css-function': 'invert',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-O': (\n\t\t\t\t'css-function': 'opacity',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Sa': (\n\t\t\t\t'css-function': 'saturate',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Sp': (\n\t\t\t\t'css-function': 'sepia',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'Bcf': (\n\t\t\t\t'properties': (\n\t\t\t\t\tbackdrop-filter,\n\t\t\t\t\t$cv-pref + 'blr',\n\t\t\t\t\t$cv-pref + 'bn',\n\t\t\t\t\t$cv-pref + 'ctr',\n\t\t\t\t\t$cv-pref + 'gra',\n\t\t\t\t\t$cv-pref + 'hur',\n\t\t\t\t\t$cv-pref + 'iv',\n\t\t\t\t\t$cv-pref + 'o',\n\t\t\t\t\t$cv-pref + 'sa',\n\t\t\t\t\t$cv-pref + 'sp',\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tvar(#{$cv-pref}blr)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bn)\n\t\t\t\t\t\t\tvar(#{$cv-pref}ctr)\n\t\t\t\t\t\t\tvar(#{$cv-pref}gra)\n\t\t\t\t\t\t\tvar(#{$cv-pref}hur)\n\t\t\t\t\t\t\tvar(#{$cv-pref}iv)\n\t\t\t\t\t\t\tvar(#{$cv-pref}o)\n\t\t\t\t\t\t\tvar(#{$cv-pref}sa)\n\t\t\t\t\t\t\tvar(#{$cv-pref}sp)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Bcf': (\n\t\t\t\t'properties': (\n\t\t\t\t\tbackdrop-filter,\n\t\t\t\t\t$cv-pref + 'bcfb',\n\t\t\t\t\t$cv-pref + 'bcfbn',\n\t\t\t\t\t$cv-pref + 'bcfc',\n\t\t\t\t\t$cv-pref + 'bcfg',\n\t\t\t\t\t$cv-pref + 'bcfhr',\n\t\t\t\t\t$cv-pref + 'bcfi',\n\t\t\t\t\t$cv-pref + 'bcfo',\n\t\t\t\t\t$cv-pref + 'bcfs',\n\t\t\t\t\t$cv-pref + 'bcfsp',\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfb)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfbn)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfc)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfg)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfhr)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfi)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfo)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfs)\n\t\t\t\t\t\t\tvar(#{$cv-pref}bcfsp)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t\tvar(--ml-, string.unquote('/*!*/ ')),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Bcfb': (\n\t\t\t\t'css-function': 'blur',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t),\n\t\t\t'-Bcfbn': (\n\t\t\t\t'css-function': 'brightness',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Bcfc': (\n\t\t\t\t'css-function': 'contrast',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Bcfg': (\n\t\t\t\t'css-function': 'grayscale',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Bcfhr': (\n\t\t\t\t'css-function': 'hue-rotate',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'angle',\n\t\t\t),\n\t\t\t'-Bcfi': (\n\t\t\t\t'css-function': 'invert',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Bcfo': (\n\t\t\t\t'css-function': 'opacity',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Bcfs': (\n\t\t\t\t'css-function': 'saturate',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'-Bcfsp': (\n\t\t\t\t'css-function': 'sepia',\n\t\t\t\t'transformer': 'to-css-fn',\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\n\t\t\t// MASK\n\t\t\t'Ms': (\n\t\t\t\t'properties': mask,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Msi': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Mscl': (\n\t\t\t\t'properties': mask-clip,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': ('box-ext', 'mask-clip'),\n\t\t\t),\n\t\t\t'Mso': (\n\t\t\t\t'properties': mask-origin,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'box-ext',\n\t\t\t),\n\t\t\t'Msc': (\n\t\t\t\t'properties': mask-composite,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'a': add,\n\t\t\t\t\t's': subtract,\n\t\t\t\t\t'i': intersect,\n\t\t\t\t\t'e': exclude,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Msm': (\n\t\t\t\t'properties': mask-mode,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'a': alpha,\n\t\t\t\t\t'l': luminance,\n\t\t\t\t\t'ms': match-source,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Msp': (\n\t\t\t\t'properties': mask-position,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'position',\n\t\t\t),\n\t\t\t'Msr': (\n\t\t\t\t'properties': mask-repeat,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'repeat-style',\n\t\t\t),\n\t\t\t'Mss': (\n\t\t\t\t'properties': mask-size,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'bg-size',\n\t\t\t),\n\t\t\t'Mst': (\n\t\t\t\t'properties': mask-type,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'a': alpha,\n\t\t\t\t\t'l': luminance,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Msgl': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'linear-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': ('position', 'gradients'),\n\t\t\t),\n\t\t\t'-Msgrpl': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'css-function': 'repeating-linear-gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': ('position', 'gradients'),\n\t\t\t),\n\t\t\t'-Msgr': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'radial-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-radial-grad-kw,\n\t\t\t),\n\t\t\t'-Msgrpr': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'css-function': 'repeating-radial-gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-radial-grad-kw,\n\t\t\t),\n\t\t\t'-Msgc': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'conic-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-conic-grad-kw,\n\t\t\t),\n\t\t\t'-Msgrpc': (\n\t\t\t\t'properties': mask-image,\n\t\t\t\t'transformer': 'gradient',\n\t\t\t\t'css-function': 'repeating-conic-gradient',\n\t\t\t\t'conversion': 'gradient',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': $-conic-grad-kw,\n\t\t\t),\n\n\t\t\t// BORDER\n\t\t\t'Bd': (\n\t\t\t\t'properties': border,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\t\t\t'Bdt': (\n\t\t\t\t'properties': border-top,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\t\t\t'Bdr': (\n\t\t\t\t'properties': border-right,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\t\t\t'Bdb': (\n\t\t\t\t'properties': border-bottom,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\t\t\t'Bdl': (\n\t\t\t\t'properties': border-left,\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\t\t\t'-Bdx': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-right, border-left,\n\t\t\t\t),\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\t\t\t'-Bdy': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-top, border-bottom,\n\t\t\t\t),\n\t\t\t\t'conversion': 'outline',\n\t\t\t\t'keywords': $-bd-kw-links,\n\t\t\t),\n\n\t\t\t'Bdc': (\n\t\t\t\t'properties': border-color,\n\t\t\t\t'range-generator': 'color',\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Bdtc': (\n\t\t\t\t'properties': border-top-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Bdrc': (\n\t\t\t\t'properties': border-right-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Bdbc': (\n\t\t\t\t'properties': border-bottom-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Bdlc': (\n\t\t\t\t'properties': border-left-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'-Bdxc': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-right-color, border-left-color\n\t\t\t\t),\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'-Bdyc': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-top-color, border-bottom-color\n\t\t\t\t),\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\n\t\t\t'Bds': (\n\t\t\t\t'properties': border-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'Bdts': (\n\t\t\t\t'properties': border-top-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'Bdrs': (\n\t\t\t\t'properties': border-right-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'Bdbs': (\n\t\t\t\t'properties': border-bottom-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'Bdls': (\n\t\t\t\t'properties': border-left-style,\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'-Bdxs': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-right-style,\n\t\t\t\t\tborder-left-style,\n\t\t\t\t),\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\t\t\t'-Bdys': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-top-style,\n\t\t\t\t\tborder-bottom-style,\n\t\t\t\t),\n\t\t\t\t'keywords': 'line-style',\n\t\t\t),\n\n\t\t\t'Bdw': (\n\t\t\t\t'properties': border-width,\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'Bdtw': (\n\t\t\t\t'properties': border-top-width,\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'Bdrw': (\n\t\t\t\t'properties': border-right-width,\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'Bdbw': (\n\t\t\t\t'properties': border-bottom-width,\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'Bdlw': (\n\t\t\t\t'properties': border-left-width,\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'-Bdxw': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-right-width,\n\t\t\t\t\tborder-left-width,\n\t\t\t\t),\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\t\t\t'-Bdyw': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-top-width,\n\t\t\t\t\tborder-bottom-width,\n\t\t\t\t),\n\t\t\t\t'keywords': 'line-width',\n\t\t\t),\n\n\t\t\t'Bdcl': (\n\t\t\t\t'properties': border-collapse,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': collapse,\n\t\t\t\t\t'c': collapse,\n\t\t\t\t\t's': separate,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Bdrd': (\n\t\t\t\t'properties': border-radius,\n\t\t\t\t'multi-list-separator': ml.$tULs2,\n\t\t\t),\n\t\t\t'Bdtrr': border-top-right-radius,\n\t\t\t'Bdtlr': border-top-left-radius,\n\t\t\t'Bdbrr': border-bottom-right-radius,\n\t\t\t'Bdblr': border-bottom-left-radius,\n\t\t\t'-Bdtrd': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-top-right-radius,\n\t\t\t\t\tborder-top-left-radius,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-Bdbrd': (\n\t\t\t\t'properties': (\n\t\t\t\t\tborder-bottom-right-radius,\n\t\t\t\t\tborder-bottom-left-radius,\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t// TRANSITION AND ANIMATION\n\t\t\t'Ts': (\n\t\t\t\t'properties': transition,\n\t\t\t\t'conversion': 'abbr-kw',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'-Ts': (\n\t\t\t\t'preset-properties': (\n\t\t\t\t\t'transition-duration': ml.$css-transition-time,\n\t\t\t\t),\n\t\t\t\t'properties': transition-property,\n\t\t\t\t'conversion': 'abbr-kw',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'transition-props'\n\t\t\t),\n\t\t\t'Tsp': (\n\t\t\t\t'properties': transition-property,\n\t\t\t\t'conversion': 'abbr-kw',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'transition-props'\n\t\t\t),\n\t\t\t'Tsb':(\n\t\t\t\t'properties':'transition-behavior',\n\t\t\t\t'multi-list-separator':ml.$tULs1,\n 'keywords':(\n\t\t\t\t\t'': allow-discrete,\n 'n': normal,\n\t\t\t\t\t'ad': allow-discrete,\n\t\t\t\t),\n ),\n\t\t\t'Tsd': (\n\t\t\t\t'properties': transition-duration,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Tsdl': (\n\t\t\t\t'properties': transition-delay,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Tstf': (\n\t\t\t\t'properties': transition-timing-function,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'easing-function'\n\t\t\t),\n\n\t\t\t'An': (\n\t\t\t\t'properties': animation,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t// TODO: maybe try to optimize it and combine a part of keywords to one map\n\t\t\t\t\t'animation', 'easing-function', 'infinite', Andr, Anfm, Anps,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ann': (\n\t\t\t\t'properties': animation-name,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'animation',\n\t\t\t),\n\t\t\t'And': (\n\t\t\t\t'properties': animation-duration,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Andl': (\n\t\t\t\t'properties': animation-delay,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t),\n\t\t\t'Antf': (\n\t\t\t\t'properties': animation-timing-function,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'easing-function'\n\t\t\t),\n\t\t\t'Anic': (\n\t\t\t\t'properties': animation-iteration-count,\n\t\t\t\t'conversion': 'kw-num-length',\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': 'infinite',\n\t\t\t),\n\t\t\t'Andr': (\n\t\t\t\t'properties': animation-direction,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'a': alternate,\n\t\t\t\t\t'ar': alternate-reverse,\n\t\t\t\t\t'nm': normal,\n\t\t\t\t\t'r': reverse,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Anfm': (\n\t\t\t\t'properties': animation-fill-mode,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'b': backwards,\n\t\t\t\t\t'bt': both,\n\t\t\t\t\t'f': forwards,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Anps': (\n\t\t\t\t'properties': animation-play-state,\n\t\t\t\t'multi-list-separator': ml.$tULs1,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'p': paused,\n\t\t\t\t\t'r': running,\n\t\t\t\t\t'rn': running,\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t// OTHER\n\t\t\t'Ap': (\n\t\t\t\t'properties': appearance,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': none,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Acnc': (\n\t\t\t\t'properties': accent-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Crc': (\n\t\t\t\t'properties': caret-color,\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Pne': (\n\t\t\t\t'properties': pointer-events,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': none,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Mibm': (\n\t\t\t\t'properties': mix-blend-mode,\n\t\t\t\t'keywords': 'blend-mode'\n\t\t\t),\n\t\t\t'Us': (\n\t\t\t\t'properties': user-select,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': none,\n\t\t\t\t\t't': text,\n\t\t\t\t\t'c': contain,\n\t\t\t\t)\n\t\t\t),\n\t\t\t'Scb': (\n\t\t\t\t'properties': scroll-behavior,\n\t\t\t\t'keywords': (\n\t\t\t\t\t's': smooth,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ovsb': (\n\t\t\t\t'properties': overscroll-behavior,\n\t\t\t\t'keywords': 'overscroll',\n\t\t\t),\n\t\t\t'Ovsbx': (\n\t\t\t\t'properties': overscroll-behavior-x,\n\t\t\t\t'keywords': 'overscroll',\n\t\t\t),\n\t\t\t'Ovsby': (\n\t\t\t\t'properties': overscroll-behavior-y,\n\t\t\t\t'keywords': 'overscroll',\n\t\t\t),\n\t\t\t'Rs': (\n\t\t\t\t'properties': resize,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': none,\n\t\t\t\t\t'b': both,\n\t\t\t\t\t'h': horizontal,\n\t\t\t\t\t'v': vertical,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ct': (\n\t\t\t\t'properties': content,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'': string.unquote(\"''\"),\n\t\t\t\t\t'nm': normal,\n\t\t\t\t\t'oq': open-quote,\n\t\t\t\t\t'cq': close-quote,\n\t\t\t\t\t'noq': no-open-quote,\n\t\t\t\t\t'ncq': no-close-quote,\n\t\t\t\t\t'ct': contents,\n\t\t\t\t\t'mAtt': attr(data-#{ml.$css-var-prefix}ct),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'-All': (\n\t\t\t\t'properties': (\n\t\t\t\t\tmargin, padding, font, list-style, border,\n\t\t\t\t),\n\t\t\t\t'repeat-prop-values': false,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'sr': (0, 0, inherit, none, 0),\n\t\t\t\t),\n\t\t\t),\n\t\t\t'All': (\n\t\t\t\t'properties': all,\n\t\t\t\t'keywords': 'css',\n\t\t\t),\n\t\t\t'Ec': (\n\t\t\t\t'properties': empty-cells,\n\t\t\t\t'keywords': (\n\t\t\t\t\t's': show,\n\t\t\t\t\t'h': hide,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Cps': (\n\t\t\t\t'properties': caption-side,\n\t\t\t\t'keywords': 'position'\n\t\t\t),\n\t\t\t'Wlc': (\n\t\t\t\t'properties': will-change,\n\t\t\t\t'conversion': 'abbr-kw',\n\t\t\t\t'keywords': (\n\t\t\t\t\t'sps': scroll-position,\n\t\t\t\t\t'ctn': contents,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ctv': (\n\t\t\t\t'properties': content-visibility,\n\t\t\t\t'keywords': ('ct-visibility', 'visibility')\n\t\t\t),\n\t\t\t'Tca': (\n\t\t\t\t'properties': touch-action,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'm': manipulation,\n\t\t\t\t\t'pl': pan-left,\n\t\t\t\t\t'pr': pan-right,\n\t\t\t\t\t'pu': pan-up,\n\t\t\t\t\t'pd': pan-down,\n\t\t\t\t\t'px': pan-x,\n\t\t\t\t\t'py': pan-y,\n\t\t\t\t\t'pnz': pinch-zoom,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ctnt': (\n\t\t\t\t'properties': container-type,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'is': inline-size,\n\t\t\t\t\t's': size,\n\t\t\t\t\t'n': normal,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ctnn': (\n\t\t\t\t'properties': container-name,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'n': none,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Ctn': (\n\t\t\t\t'properties': container,\n\t\t\t\t'multi-list-separator': ml.$tULs2,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'is': inline-size,\n\t\t\t\t\t's': size,\n\t\t\t\t\t'n': normal,\n\t\t\t\t\t'nn': none,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Coi': (\n\t\t\t\t'properties': counter-increment,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Cor': (\n\t\t\t\t'properties': counter-reset,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Cos': (\n\t\t\t\t'properties': counter-set,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\n\t\t\t// SVG\n\t\t\t'Fi': (\n\t\t\t\t'properties': fill,\n\t\t\t\t'range-generator': 'color',\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Fio': (\n\t\t\t\t'properties': fill-opacity,\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\n\t\t\t'St': (\n\t\t\t\t'properties': stroke,\n\t\t\t\t'range-generator': 'color',\n\t\t\t\t'conversion': 'color',\n\t\t\t),\n\t\t\t'Sto': (\n\t\t\t\t'properties': stroke-opacity,\n\t\t\t\t'conversion': 'num-percent',\n\t\t\t),\n\t\t\t'Stda': (\n\t\t\t\t'properties': stroke-dasharray,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Stdo': (\n\t\t\t\t'properties': stroke-dashoffset,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Stlc': (\n\t\t\t\t'properties': stroke-linecap,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'b': butt,\n\t\t\t\t\t'r': round,\n\t\t\t\t\t's': square,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Stlj': (\n\t\t\t\t'properties': stroke-linejoin,\n\t\t\t\t'keywords': (\n\t\t\t\t\t'a': arcs,\n\t\t\t\t\t'b': bevel,\n\t\t\t\t\t'r': round,\n\t\t\t\t\t'm': miter,\n\t\t\t\t\t'mc': miter-clip,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'Stw': (\n\t\t\t\t'properties': stroke-width,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t),\n\t\t'keywords': (\n\t\t\t'border': (\n\t\t\t\t'': (1px solid,),\n\t\t\t),\n\t\t\t'position': map.set(\n\t\t\t\tml.$main-directions, 'c', center\n\t\t\t),\n\t\t\t'line-style': (\n\t\t\t\t'': none,\n\t\t\t\t'd': dotted,\n\t\t\t\t'dh': dashed,\n\t\t\t\t'db': double,\n\t\t\t\t'g': groove,\n\t\t\t\t'h': hidden,\n\t\t\t\t'i': inset,\n\t\t\t\t'o': outset,\n\t\t\t\t'r': ridge,\n\t\t\t\t's': solid,\n\t\t\t\t'w': wavy,\n\t\t\t),\n\t\t\t'text-decoration': (\n\t\t\t\t'ff': from-font,\n\t\t\t\t'lt': line-through,\n\t\t\t\t'o': overline,\n\t\t\t\t'u': underline,\n\t\t\t),\n\t\t\t'line-width': (\n\t\t\t\t'm': medium,\n\t\t\t\t't': thick,\n\t\t\t\t'th': thin,\n\t\t\t),\n\t\t\t'overflow': (\n\t\t\t\t'': hidden,\n\t\t\t\t'a': auto,\n\t\t\t\t'h': hidden,\n\t\t\t\t's': scroll,\n\t\t\t\t'v': visible\n\t\t\t),\n\t\t\t'box-alignment': (\n\t\t\t\t'b': baseline,\n\t\t\t\t'c': center,\n\t\t\t\t'e': end,\n\t\t\t\t'fs': flex-start,\n\t\t\t\t'fe': flex-end,\n\t\t\t\t'n': normal,\n\t\t\t\t'st': start,\n\t\t\t\t'str': stretch,\n\t\t\t\t'sb': space-between,\n\t\t\t\t'sa': space-around,\n\t\t\t\t'se': space-evenly,\n\t\t\t),\n\t\t\t'box-ext': (\n\t\t\t\t'bb': border-box,\n\t\t\t\t'cb': content-box,\n\t\t\t\t'pb': padding-box,\n\t\t\t\t'fb': fill-box,\n\t\t\t\t'sb': stroke-box,\n\t\t\t\t'vb': view-box,\n\t\t\t\t't': text,\n\t\t\t),\n\t\t\t'mask-clip': (\n\t\t\t\t'nc': no-clip,\n\t\t\t),\n\t\t\t'blend-mode': (\n\t\t\t\t'n': normal,\n\t\t\t\t'm': multiply,\n\t\t\t\t's': screen,\n\t\t\t\t'o': overlay,\n\t\t\t\t'd': darken,\n\t\t\t\t'l': lighten,\n\t\t\t\t'cd': color-dodge,\n\t\t\t\t'cb': color-burn,\n\t\t\t\t'hrl': hard-light,\n\t\t\t\t'sfl': soft-light,\n\t\t\t\t'e': exclusion,\n\t\t\t\t'h': hue,\n\t\t\t\t'st': saturation,\n\t\t\t\t'c': color,\n\t\t\t\t'lm': luminosity,\n\t\t\t\t'pl': plus-lighter,\n\t\t\t\t'pd': plus-darker,\n\n\t\t\t),\n\t\t\t'grid-area': (\n\t\t\t\t's': span,\n\t\t\t),\n\t\t\t'grid-type': (\n\t\t\t\t'sg': subgrid,\n\t\t\t),\n\t\t\t'grid': (\n\t\t\t\t'af': auto-flow,\n\t\t\t\t'd': dense,\n\t\t\t),\n\t\t\t'grid-auto-track': (\n\t\t\t\t't1': minmax(0, 1fr),\n\t\t\t),\n\t\t\t'easing-function': (\n\t\t\t\t'e': ease,\n\t\t\t\t'ei': ease-in,\n\t\t\t\t'eo': ease-out,\n\t\t\t\t'eio': ease-in-out,\n\t\t\t\t'l': linear,\n\t\t\t\t'se': step-end,\n\t\t\t\t'ss': step-start,\n\t\t\t),\n\t\t\t'infinite': (\n\t\t\t\t'i': infinite,\n\t\t\t),\n\t\t\t'font-size': (\n\t\t\t\t'sl': smaller,\n\t\t\t\t// so as not to occupy `lg`\n\t\t\t\t'lr': larger,\n\t\t\t),\n\t\t\t'overscroll': (\n\t\t\t\t'c': contain,\n\t\t\t),\n\t\t\t'visibility': (\n\t\t\t\t'': hidden,\n\t\t\t\t'c': collapse,\n\t\t\t\t'h': hidden,\n\t\t\t\t'v': visible,\n\t\t\t),\n\t\t\t'ct-visibility': (\n\t\t\t\t'': auto,\n\t\t\t),\n\t\t\t'transition-props': (\n\t\t\t\t'': (\n\t\t\t\t\tbackground-color, border-color, color,\n\t\t\t\t\tfill, stroke, backdrop-filter, box-shadow,\n\t\t\t\t\tfilter, opacity, transform,\n\t\t\t\t),\n\t\t\t\t'mClr': (\n\t\t\t\t\tbackground-color, border-color, color,\n\t\t\t\t\tfill, outline-color, stroke,\n\t\t\t\t),\n\t\t\t),\n\t\t\t'radial-shape': (\n\t\t\t\t// c - center, cc - currentColor\n\t\t\t\t'cr': circle,\n\t\t\t\t'el': ellipse,\n\t\t\t),\n\t\t\t'ray-size': (\n\t\t\t\t'css': closest-side,\n\t\t\t\t'csc': closest-corner,\n\t\t\t\t'fts': farthest-side,\n\t\t\t\t'ftc': farthest-corner,\n\t\t\t\t'sd': sides,\n\t\t\t),\n\t\t\t'color-space': (\n\t\t\t\t'dpp': display-p3,\n\t\t\t\t'dppl': display-p3-linear,\n\t\t\t\t'ppr': prophoto-rgb,\n\t\t\t),\n\t\t\t'hue-interpolation': (\n\t\t\t\t'sr': shorter,\n\t\t\t\t'lr': longer,\n\t\t\t\t'ic': increasing,\n\t\t\t\t'dc': decreasing,\n\t\t\t),\n\t\t\t'repeat-style': (\n\t\t\t\t'': no-repeat,\n\t\t\t\t'nr': no-repeat,\n\t\t\t\t'rx': repeat-x,\n\t\t\t\t'ry': repeat-y,\n\t\t\t\t'r': repeat,\n\t\t\t\t's': space,\n\t\t\t\t'rn': round,\n\t\t\t),\n\t\t\t'bg-size': (\n\t\t\t\t'ct': contain,\n\t\t\t\t'cv': cover,\n\t\t\t),\n\t\t\t'sizing': $-sizing-kw,\n\t\t),\n\t),\n\n\t'common': (\n\t\t'registry': (\n\t\t\t'H': (\n\t\t\t\t'properties': height,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'W': (\n\t\t\t\t'properties': width,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Apcr': (\n\t\t\t\t'properties': aspect-ratio,\n\t\t\t\t'conversion': 'num-length',\n\t\t\t),\n\t\t\t'Bls': (\n\t\t\t\t'properties': block-size,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t\t'Ils': (\n\t\t\t\t'properties': inline-size,\n\t\t\t\t'keywords': 'sizing',\n\t\t\t),\n\t\t),\n\t\t'keywords': (\n\t\t\t'css': $-css-wide-kw,\n\t\t\t'css-oft': map.merge(\n\t\t\t\t$-css-wide-kw,\n\t\t\t\t(\n\t\t\t\t\t'a': auto,\n\t\t\t\t\t'n': none,\n\t\t\t\t)\n\t\t\t),\n\t\t\t'colors': (\n\t\t\t\t'tp': transparent,\n\t\t\t\t'cc': currentColor,\n\t\t\t),\n\t\t\t'sizing': $-sizing-kw,\n\t\t),\n\t),\n) !default;\n\n$-common-registry: ();\n\n@each $key, $value in map.get($utils-db, 'common', 'registry') {\n\t$-common-registry: map.set(\n\t\t$-common-registry,\n\t\tstring.to-lower-case($key),\n\t\t$value\n\t);\n}\n\n$utils-db: map.set(\n\t$utils-db,\n\t'media',\n\t(\n\t\t'registry': map.deep-merge(\n\t\t\t$-common-registry,\n\t\t\t(\n\t\t\t\t'ah': any-hover,\n\t\t\t\t'ap': (\n\t\t\t\t\t'properties': any-pointer,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'c': coarse,\n\t\t\t\t\t\t'f': fine,\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\t'hv': hover,\n\t\t\t\t'p': (\n\t\t\t\t\t'properties': pointer,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'c': coarse,\n\t\t\t\t\t\t'f': fine,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t'dm': (\n\t\t\t\t\t'properties': display-mode,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'': fullscreen,\n\t\t\t\t\t\t'f': fullscreen,\n\t\t\t\t\t\t's': standalone,\n\t\t\t\t\t\t'mu': minimal-ui,\n\t\t\t\t\t\t'b': browser,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t'fc': forced-colors,\n\t\t\t\t'o': (\n\t\t\t\t\t'properties': orientation,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'': landscape,\n\t\t\t\t\t\t'l': landscape,\n\t\t\t\t\t\t'p': portrait,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t'pfcs': (\n\t\t\t\t\t'properties': prefers-color-scheme,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'': dark,\n\t\t\t\t\t\t'd': dark,\n\t\t\t\t\t\t'l': light,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t'pfrm': prefers-reduced-motion,\n\t\t\t\t'm': (\n\t\t\t\t\t'properties': monochrome,\n\t\t\t\t\t'conversion': 'num-length',\n\t\t\t\t),\n\t\t\t\t'g': (\n\t\t\t\t\t'properties': grid,\n\t\t\t\t\t'conversion': 'num-length',\n\t\t\t\t),\n\t\t\t\t'c': (\n\t\t\t\t\t'properties': color,\n\t\t\t\t\t'conversion': 'num-length',\n\t\t\t\t),\n\t\t\t\t'cg': (\n\t\t\t\t\t'properties': color-gamut,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'p': p3,\n\t\t\t\t\t\t's': 'srgb',\n\t\t\t\t\t\t'r': rec2020,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\t'ci': (\n\t\t\t\t\t'properties': color-index,\n\t\t\t\t\t'conversion': 'num-length',\n\t\t\t\t),\n\t\t\t\t'r': (\n\t\t\t\t\t'properties': resolution,\n\t\t\t\t\t'conversion': 'resolution',\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'i': infinite,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t),\n);\n\n$utils-db: map.set(\n\t$utils-db,\n\t'container',\n\t(\n\t\t'registry': map.deep-merge(\n\t\t\t$-common-registry,\n\t\t\t(\n\t\t\t\t'o': (\n\t\t\t\t\t'properties': orientation,\n\t\t\t\t\t'keywords': (\n\t\t\t\t\t\t'': landscape,\n\t\t\t\t\t\t'l': landscape,\n\t\t\t\t\t\t'p': portrait,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t),\n);\n\n$utils-db: map.deep-merge($utils-db, $utils-data);\n$utils-db: map.deep-merge($utils-db, $utils-data-ext);\n$utils-db: map.merge($utils-db, 'common', 'keywords', 'colors', $colors);\n$utils-db: map.merge(\n\t$utils-db,\n\t'utils',\n\t'registry',\n\tmap.get($utils-db, 'common', 'registry')\n);\n","http://localhost/sass/tools/settings/high/forward-tools.scss":"@forward '../base';\n@forward '../common';\n","http://localhost/sass/tools/settings/high/grid.scss":"@use 'sass:map';\n@use 'sass:list';\n@use 'forward-tools' as ml;\n\n// Grid system\n//\n// Settings that affect the work of grid system both modern and legacy.\n//\n// - **modern** grid is based on [CSS Grid](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout) and is built using common grid utilities, such as [Gtc](section-utils-reference.html#kssref-utils-reference-gtc), [Gap](section-utils-reference.html#kssref-utils-reference-gap) etc\n// - **legacy** grid system is based on flexbox and works with [helpers](section-css_lib.html#kssref-css_lib-helpers-row) and custom utilities, such as [-Gscc](section-utils-reference.html#kssref-utils-reference--gscc), [-Gsf](section-utils-reference.html#kssref-utils-reference--gsf) etc.\n//\n// $legacy-grid-system = false - enable legacy grid system and generate some CSS for it\n// $gs-default-gtr = 4u - default gutter on large width screen. Used as fallback for `--ml-gg`.\n// $gs-columns = 12 - columns count.\n// $gs-gutters - map with grid gutters on breakpoints.\n//\n// Styleguide: settings.gs\n\n// Gutters\n//\n// The gutters are stored in `$gs-gutters` map. The keys in it are the names of the breakpoints, and the values are gutter. It is automatically filled out based on breakpoints. If you want to supplement or change gutters, use `$gs-gutters-ext`. If you want to completely overwrite the initial values, specify them in `$gs-gutters` in the config. Pay attention that this behavior is different from all other settings like a [breakpoints](section-settings.html#kssref-settings-at_rules-breakpoints)\n//\n// Gutters value on breakpoints:\n//\n// Breakpoint | Gutter\n// :---: | :---:\n// <sm | 3u\n// sm | 3u\n// md | 3u\n// lg | 4u\n// xl | 4u\n// xxl | 4u\n//\n// Styleguide: settings.gs.gtr\n\n$legacy-grid-system: false !default;\n$gs-columns: 12 !default;\n$gs-default-gtr: (ml.$su * 4) !default;\n$gs-gutters: () !default;\n$gs-gutters-ext: () !default;\n$gtr-first: (ml.$su * 3);\n\n$gs-debug-col-color: #d15 !default;\n$gs-debug-gtr-color: #336 !default;\n\n@if $gs-gutters == () {\n\t@each $bp, $gtr in list.zip(\n\t\tml.$bp-keys, ($gtr-first, $gtr-first, $gs-default-gtr, $gs-default-gtr)\n\t) {\n\t\t$gs-gutters: map.set($gs-gutters, $bp, $gtr);\n\t}\n}\n\n$gs-gutters: map.merge($gs-gutters, $gs-gutters-ext);\n$gtr-first: list.nth(list.nth($gs-gutters, 1), 2);\n","http://localhost/sass/tools/settings/high/_index.scss":"@forward 'grid';\n@forward 'utils';\n","http://localhost/sass/tools/settings/high/utils.scss":"@use 'sass:map';\n@use 'forward-tools' as ml;\n\n$utils-groups: () !default;\n$utils-groups-ext: () !default;\n\n$utils-groups-db: (\n\t'Borders': (\n\t\t'members': (\n\t\t\tBd, Bdt, Bdr, '#{ml.$cArStBp}Bdb_-btc', '#{ml.$cArStBp}Bdl_-btc', -Bdx, -Bdy,\n\t\t),\n\t),\n\t'BdWidth': (\n\t\t'members': (\n\t\t\tBdw, Bdtw, Bdrw, '#{ml.$cArStBp}Bdbw_-btc', '#{ml.$cArStBp}Bdlw_-btc', -Bdxw, -Bdyw,\n\t\t),\n\t),\n\t'BdStyle': (\n\t\t'members': (\n\t\t\tBds, Bdts, Bdrs, '#{ml.$cArStBp}Bdbs_-btc', '#{ml.$cArStBp}Bdls_-btc', -Bdxs, -Bdys,\n\t\t),\n\t),\n\t'BdSidesColor': (\n\t\t'members': (\n\t\t\tBdtc, Bdrc, '#{ml.$cArStBp}Bdbc_-btc', '#{ml.$cArStBp}Bdlc_-btc', -Bdxc, -Bdyc,\n\t\t),\n\t),\n\t'BdRadius': (\n\t\t'members': (\n\t\t\tBdrd, Bdtrr, Bdtlr, Bdbrr, Bdblr, -Bdtrd, -Bdbrd,\n\t\t),\n\t),\n\t'Overflows': (\n\t\t'members': (\n\t\t\tOv, Ovx, Ovy,\n\t\t),\n\t),\n\t'Margins': (\n\t\t'members': (\n\t\t\tM, Mt, Mr, '#{ml.$cArStBp}Mb_-btc', '#{ml.$cArStBp}Ml_-btc', -Mx, -My,\n\t\t),\n\t),\n\t'MarginsNoR': (\n\t\t'members': (\n\t\t\tM, Mt, '#{ml.$cArStBp}Mb_-btc', '#{ml.$cArStBp}Ml_-btc', -Mx, -My,\n\t\t),\n\t),\n\t'Paddings': (\n\t\t'members': (\n\t\t\tP, Pt, Pr, Pb, Pl, -Px, -Py,\n\t\t),\n\t),\n\t'Spaces': (\n\t\t'members': (\n\t\t\tM, Mt, Mr, '#{ml.$cArStBp}Mb_-btc', '#{ml.$cArStBp}Ml_-btc', -Mx, -My,\n\t\t\tP, Pt, Pr, Pb, Pl, -Px, -Py,\n\t\t\t-I, -X, -Y, T, R, B, L,\n\t\t\tW, H, Gap, Clmg, Rwg\n\t\t),\n\t),\n\t'Offsets': (\n\t\t'members': (\n\t\t\t-I, -X, -Y, T, R, B, L,\n\t\t),\n\t),\n\t'Colors': (\n\t\t'members': (\n\t\t\tC, Bgc, Bdc,\n\t\t),\n\t),\n\t'ColorsExt': (\n\t\t'members': (\n\t\t\tC, Bgc, Bdc, Olc, Txdc\n\t\t),\n\t),\n\t'Translates': (\n\t\t'members': (\n\t\t\t-Tr, -Trx, -Try,\n\t\t),\n\t),\n\t'AllGaps': (\n\t\t'members': (\n\t\t\tGap, Clmg, Rwg,\n\t\t),\n\t),\n\t'Sizes': (\n\t\t'members': (\n\t\t\tW, H, Mxw, Mnh,\n\t\t),\n\t),\n\t'Overscrolls': (\n\t\t'members': (\n\t\t\tOvsb, Ovsbx, Ovsby\n\t\t),\n\t),\n\t'Periods': (\n\t\t'members': (\n\t\t\tTsd, Tsdl, And, Andl,\n\t\t),\n\t),\n) !default;\n\n$utils-groups-db: map.deep-merge($utils-groups-db, $utils-groups);\n$utils-groups-db: map.deep-merge($utils-groups-db, $utils-groups-ext);\n","http://localhost/sass/tools/settings/base/utils.scss":"@use 'sass:map';\n@use 'sass:list';\n\n// Utilities\n//\n// In the settings of utilities, there are both data and configs.\n//\n// Styleguide: settings.utils\n\n// Other\n//\n// Other settings that are not contained in main large maps\n//\n// Styleguide: settings.utils.other\n\n// $utils-up-specificity\n//\n// `boolean | string`<br>Increase the specificity of all utilities at once. When `true` - to each utility property will be added `!important`. A string with a CSS selector is also acceptable. It will be added before the utility selector. <br>Defaults to: `false`\n//\n// ```scss\n//\t@use 'mlut/tools' as ml with (\n//\t\t$utils-up-specificity: true,\n//\t);\n//\n//\t@include ml.apply('Mt2r');\n//\n//\t// CSS\n//\t.Mt2r {\n//\t\tmargin-top: 2rem !important;\n//\t}\n// ```\n//\n// Styleguide: settings.utils.other.up_specificity\n\n// Utils groups\n//\n// Groups are stored in a separate database `$utils-groups-db`. To modify or add groups, use `$utils-groups`. When specifying utilities in the group, you can use Generation Syntax. In this case, utilities with components will be generated for each value.\n//\n// ```scss\n//\t@use 'mlut' as ml with (\n//\t\t$utils-groups: (\n//\t\t\t'MPSpaces': (\n//\t\t\t\t'M_ frc', Mt, Mr, Mb, Ml, -Mx, -My,\n//\t\t\t\tP, Pt, Pr, Pb, Pl, -Px, -Py,\n//\t\t\t),\n//\t\t),\n//\t\t$utils: (\n//\t\t\t'MPSpaces': (\n//\t\t\t\t100, '$myOffset'\n//\t\t\t),\n//\t\t),\n//\t);\n//\n//\t// CSS\n//\t// some utils from standard library before\n//\n//\t.M100 {\n//\t margin: 100px;\n//\t}\n//\n//\t.M100_frc:first-child {\n//\t margin: 100px;\n//\t}\n//\n//\t.M-\\$myOffset {\n//\t margin: var(--ml-myOffset);\n//\t}\n//\n//\t.M-\\$myOffset_frc:first-child {\n//\t margin: var(--ml-myOffset);\n//\t}\n//\n//\t.Mt100 {\n//\t margin-top: 100px;\n//\t}\n//\n//\t// etc\n// ```\n//\n// Styleguide: settings.utils.other.groups\n\n// Config\n//\n// Most of the settings are stored here, on the basis of which utilities work. Below are some sections that may be useful during customization.\n//\n// Styleguide: settings.utils.config\n\n// States\n//\n// States are stored in the `states` section and grouped by type:\n// - `pseudo-cls` - pseudo classes\n// - `pseudo-elm` - pseudo elements\n// - `custom` - all the rest\n//\n// Below is a quick reference of states. Later it will be supplemented by comments and examples.\n//\n// If you want to add a state, it is recommended to do this in the `custom` section. *Please note* that in the code, all custom states begin with a hyphen. This prevents names collision with native states from CSS.\n// ```scss\n//\t@use 'mlut/tools' as ml with (\n//\t\t$utils-config: (\n//\t\t\t'states': (\n//\t\t\t\t'custom': (\n//\t\t\t\t\t'rtl': '[dir=“rtl”]',\n//\t\t\t\t),\n//\t\t\t),\n//\t\t),\n//\t);\n//\n//\t@include ml.apply(('-rtl _Mr2r'), (), true);\n//\n//\t// CSS\n//\t[dir=“rtl”] .-rtl_Mr2r {\n//\t\tmargin-right: 2rem;\n//\t}\n// ```\n//\n// Styleguide: settings.utils.config.states\n\n// Conversion type\n//\n// Available on the key `conversion-types`. This is a map, the keys in which are names of types that are used in utility options. The values in a map are a list of converters through which the value of utilities passes.\n// ```scss\n//\t$utils-cfg: (\n//\t\t'conversion-types': (\n//\t\t\t'angle': ('angle', 'global-kw', 'cust-prop'),\n//\t\t\t'grid-span': ('grid-span', 'num-length', 'global-kw', 'cust-prop'),\n//\t\t),\n//\t);\n// ```\n// Each converter is a function that returns, either an converted or initial value. By default, if the value was converted, then the process stops, else the value passes to the next converter from the list. If not a single converter has no worked, then at the result we get the initial value. But this behavior can be changed when adding a keyword `Pl`(pipeline) to the list. The converters specified after it will be applied regardless of whether the value was converted in one of them. The list of all converters can be viewed in the code, but later they will be added here\n//\n// Below you can find all available types of conversion. In the description of each type there will be a schema: a list of converters and keywords on which the conversion depends. For DRY reason, in the schema used Sass variables containing frequently used converters. They will be presented in the documentation as meta-types. You can use these variables when adding new types of conversion. In addition, the description of the type will have examples of its work.\n//\n// Styleguide: settings.utils.config.conversion\n\n// $uv-type-base\n//\n// The basic meta type on which all other types are based. Schema:\n// ```scss\n//\t$uv-type-base: ('global-kw', 'cust-prop');\n// ```\n// Usage:\n// ```scss\n//\t// global keywords\n//\t@debug ml.uv('C-ih'); // inherit\n//\t@debug ml.uv('W-gSm'); // 520px - sm breakpoints\n//\n//\t// custom properties\n//\t@debug ml.uv('W-$myCard?200'); // var(--ml-myCard, 200px)\n// ```\n//\n// Styleguide: settings.utils.config.conversion.meta_base\n\n// $uv-type-default\n//\n// Meta type that corresponds to the default conversion type. If the type of conversion is not specified for the utility, then this will be used. Schema:\n// ```scss\n//\t$uv-type-default: list.join(('keyword', 'number'), $uv-type-base);\n//\n//\t// and below in the conversion types\n//\t'conversion-types': (\n//\t\t'default': $uv-type-default,\n// ```\n// Usage:\n// ```scss\n//\t// keyword\n//\t@debug ml.uv('Ai-c'); // center\n//\t@debug ml.uv('Bd'); // 1px solid\n//\n//\t// number\n//\t@debug ml.uv('W200'); // 200px\n//\t@debug ml.uv('Ml-0.7'); // -0.7rem\n//\t@debug ml.uv('P1r;2e;5p'); // 1rem 2em 5%\n//\t@debug ml.uv('Ml-2.5gg'); // calc(var(--ml-gg) * -2.5)\n//\t@debug ml.uv('W1/3'); // 33.3333333333%\n//\t@debug ml.uv('W2/$div'); // calc(2 / var(--ml-div) * 100%)\n// ```\n//\n// Styleguide: settings.utils.config.conversion.meta_default\n\n// num-length\n//\n// This type converts numbers almost as a default type, except that it does not convert numbers without units of measurement in a pixels. Schema:\n// ```scss\n//\t('num-length': list.join('num-length', $uv-type-base))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('Zi5'); // 5\n//\t@debug ml.uv('Tas2e'); // 2em\n// ```\n//\n// Styleguide: settings.utils.config.conversion.num-length\n\n// kw-num-length\n//\n// Type works almost as a default type, with the exception of that it does not convert numbers without units of measurement in a pixels. Schema:\n// ```scss\n//\t('kw-num-length': list.set-nth($uv-type-default, 2, 'num-length'))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('Fnw300'); // 300\n//\t@debug ml.uv('Fnw-bd'); // bolder\n//\t@debug ml.uv('Lnh4.5u'); // 1.125rem\n// ```\n//\n// Styleguide: settings.utils.config.conversion.kw-num-length\n\n// num-percent\n//\n// Converts percent to decimal fractions. Schema:\n// ```scss\n//\t('num-percent': list.join('num-percent', $uv-type-base))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('O70p'); // 0.7\n//\t@debug ml.uv('-S-50p'); // -0.5\n// ```\n//\n// Styleguide: settings.utils.config.conversion.num-percent\n\n// angle\n//\n// Converts angles. Schema:\n// ```scss\n//\t('angle': list.join('angle', $uv-type-base))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('-Rt45d'); // 45deg\n//\t@debug ml.uv('-Rt-50g'); // -50grad\n//\t@debug ml.uv('-Sk3.14r;2r'); // 3.14rad 2rad\n//\t@debug ml.uv('-Hur-1.5t'); // -1.5turn\n// ```\n//\n// Styleguide: settings.utils.config.conversion.angle\n\n// color\n//\n// Converts colors. Schema:\n// ```scss\n//\t('color': list.join('color', $uv-type-base))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('C-tp'); // transparent\n//\t@debug ml.uv('Bgc#c06*$bgAlpha'); // rgba(204, 0, 102, var(--ml-bgAlpha, 1))\n//\n//\t// you can use custom color keyword that you added in the database\n//\t@debug ml.uv('Bgc-purple50*20p'); // rgba(102, 0, 204, 0.2)\n// ```\n//\n// Styleguide: settings.utils.config.conversion.color\n\n// abbr-kw\n//\n// Expand abbreaviations of utilities. Schema:\n// ```scss\n//\t('abbr-kw': list.join('abbr', $uv-type-default))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('Wlc-tf'); // transform\n//\t@debug ml.uv('Ts-bdc;2s,c;1s'); // border-color 2s, color 1s\n// ```\n//\n// Styleguide: settings.utils.config.conversion.abbr-kw\n\n// grid-tpl\n//\n// Adds converting of special keywords for grid templates to the default type. Schema:\n// ```scss\n//\t('grid-tpl': list.join('grid-tracks', $uv-type-default))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('Gtc-t4'); // repeat(4, minmax(0, 1fr))\n//\t@debug ml.uv('G-t3/af;d;15r'); // repeat(3, minmax(0, 1fr)) / auto-flow dense 15rem\n// ```\n//\n// Styleguide: settings.utils.config.conversion.grid-tpl\n\n// grid-span\n//\n// Converts special keywords, to specify the sizes of the grid items in spans. Schema:\n// ```scss\n//\t('grid-span': list.join(('grid-span', 'num-length'), $uv-type-base))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('Gc-s3'); // span 3 / span 3\n// ```\n//\n// Styleguide: settings.utils.config.conversion.grid-span\n\n// outline\n//\n// Adds colors conversion to a default converters chain. Schema:\n// ```scss\n//\t('outline': list.join(\n//\t\t('keyword', 'color', 'number'), $uv-type-base\n//\t))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('Bd3;tp;d'); // 3px transparent dotted\n// ```\n//\n// Styleguide: settings.utils.config.conversion.outline\n\n// gradient\n//\n// Converts values in the gradient functions. Schema:\n// ```scss\n//\t('gradient': (\n//\t\t'keyword', 'color', 'cust-prop', 'Pl', 'number', 'angle', 'global-kw'\n//\t))\n// ```\n// Usage:\n// ```scss\n//\t@debug ml.uv('-Gdrl-b;r,black,#ff0'); // repeating-linear-gradient(to bottom right, black, #ff0)\n//\t@debug ml.uv('-Msgl-50d,blue;3r,cc;80p'); // linear-gradient(-50deg, blue 3rem, currentColor 80%)\n//\t@debug ml.uv('-Gdc45d,#000;0.5g,yellow'); // conic-gradient(from 45deg, #000 0.5grad, yellow)\n// ```\n//\n// Styleguide: settings.utils.config.conversion.gradient\n\n$cCtx: '-Ctx' !default;\n$kSsVCP: 'Pl' !default; // pipeline\n$kSsUMCS: 'core' !default;\n$uv-type-base: ('global-kw', 'cust-prop',) !default;\n$uv-type-default: list.join(('keyword', 'number'), $uv-type-base);\n$uv-kw-alias-behavior: 0 !default;\n$utils-up-specificity: false !default;\n$utils-config: () !default;\n$utils-config-ext: () !default;\n$jit: () !default;\n\n//stylelint-disable\n$utils-cfg: (\n\t'gg-fallback-list': (\n\t\tT, R, B, L, -X, -Y, -I,\n\t\tP, Pt, Pr, Pb, Pl, -Px, -Py,\n\t\tM, Mt, Mr, Mb, Ml, -Mx, -My,\n\t\tBdw, Bdtw, Bdrw, Bdbw, Bdlw, -Bdxw, -Bdyw,\n\t\tBd, Bdt, Bdr, Bdb, Bdl, -Bdx, -Bdy,\n\t\tMxw, Mnw, Mxh, Mnh,\n\t\tFns, -Fns, Txi, Lnh, Lts, Txs, Va, Txd, Fn,\n\t\tBxsd, Bdrd, Bgs, Bgp, Ol, Olw, Olo,\n\t\tStw, Fl, Flb, Tfo, -Gdl, -Gdrl,\n\t),\n\n\t'conversion-types': (\n\t\t'default': $uv-type-default,\n\t\t'num-length': list.join('num-length', $uv-type-base),\n\t\t'kw-num-length': list.set-nth($uv-type-default, 2, 'num-length'),\n\t\t'num-percent': list.join('num-percent', $uv-type-base),\n\t\t'angle': list.join('angle', $uv-type-base),\n\t\t'color': list.join('color', $uv-type-base),\n\t\t'abbr-kw': list.join('abbr', $uv-type-default),\n\t\t'grid-tpl': list.join('grid-tracks', $uv-type-default),\n\t\t'grid-span': list.join(('grid-span', 'num-length'), $uv-type-base),\n\t\t'resolution': list.set-nth($uv-type-default, 2, 'resolution'),\n\t\t'outline': list.join(\n\t\t\t('keyword', 'color', 'number'), $uv-type-base\n\t\t),\n\t\t'gradient': (\n\t\t\t'keyword', 'color', 'cust-prop', $kSsVCP, 'number', 'angle', 'global-kw'\n\t\t)\n\t),\n\n\t'abbr-separators': (),\n\n\t'converters': (),\n\n\t'transformers': (),\n\n\t'range-generators': (),\n\n\t'units': (\n\t\t'default': (\n\t\t\t'': 1px,\n\t\t\t'e': 1em,\n\t\t\t'p': 1%,\n\t\t\t'r': 1rem,\n\t\t),\n\t\t'num-length': (\n\t\t\t'e': 1em,\n\t\t\t'p': 1%,\n\t\t\t'r': 1rem,\n\t\t),\n\t\t'resolution': (\n\t\t\t'i': 1dpi,\n\t\t\t'c': 1dpcm,\n\t\t\t'x': 1dppx,\n\t\t),\n\t\t'num-percent': (\n\t\t\t'p': 0.01,\n\t\t),\n\t\t'angle': (\n\t\t\t'd': 1deg,\n\t\t\t'g': 1grad,\n\t\t\t'r': 1rad,\n\t\t\t'ra': 1rad,\n\t\t\t't': 1turn,\n\t\t),\n\t),\n\n\t'tokens': (\n\t\t'util': (\n\t\t\t'str-value': '-',\n\t\t\t'raw-value': '=',\n\t\t\t'num-value': '',\n\t\t\t'hash-value': '',\n\t\t\t'fallback-value': '?',\n\t\t\t'color-alpha': '*',\n\t\t\t'space': ';',\n\t\t\t'custom-property': '$',\n\t\t\t'global-keyword': 'g',\n\t\t\t'keyword-chain': '.',\n\t\t\t'important': '!',\n\t\t\t'no-list-separator': ' ',\n\t\t\t'list-separator1': ',',\n\t\t\t'list-separator2': '/',\n\t\t\t'component': '_',\n\t\t),\n\t\t'states': (\n\t\t\t'or': ',',\n\t\t\t'and': ':',\n\t\t\t'not': '!',\n\t\t\t'custom': '-',\n\t\t\t'this-util': '&',\n\t\t\t'context': '^',\n\t\t\t'raw': '=',\n\t\t),\n\t\t'generation': (\n\t\t\t'states-pseudo-classes': 'StPC',\n\t\t\t'states-pseudo-elements': 'StPE',\n\t\t\t'states-only': 'StOl',\n\t\t\t'states-combine': 'StCb',\n\t\t\t'uv-keywords-alias': 'KW',\n\t\t),\n\t),\n\n\t'states': (\n\t\t'pseudo-cls': (\n\t\t\t'a': ':active',\n\t\t\t'c': ':checked',\n\t\t\t'd': ':disabled',\n\t\t\t'df': ':default',\n\t\t\t'de': ':defined',\n\t\t\t'e': ':empty',\n\t\t\t'en': ':enabled',\n\t\t\t'f': ':focus',\n\t\t\t'fw': ':focus-within',\n\t\t\t'fv': ':focus-visible',\n\t\t\t'frc': ':first-child',\n\t\t\t'frot': ':first-of-type',\n\t\t\t'h': ':hover',\n\t\t\t'i': ':invalid',\n\t\t\t'id': ':indeterminate',\n\t\t\t'inr': ':in-range',\n\t\t\t'lc': ':last-child',\n\t\t\t'lot': ':last-of-type',\n\t\t\t'ln': ':link',\n\t\t\t'oc': ':only-child',\n\t\t\t'oot': ':only-of-type',\n\t\t\t'ot': ':optional',\n\t\t\t'ouor': ':out-of-range',\n\t\t\t'phs': ':placeholder-shown',\n\t\t\t'r': ':required',\n\t\t\t'rt': ':root',\n\t\t\t'rdo': ':read-only',\n\t\t\t'rdw': ':read-write',\n\t\t\t't': ':target',\n\t\t\t'ui': ':user-invalid',\n\t\t\t'uv': ':user-valid',\n\t\t\t'v': ':visited',\n\t\t\t'vl': ':valid',\n\t\t),\n\t\t'pseudo-elm': (\n\t\t\t'af': '::after',\n\t\t\t'b': '::before',\n\t\t\t'frl': '::first-line',\n\t\t\t'frlt': '::first-letter',\n\t\t\t'flsb': '::file-selector-button',\n\t\t\t'm': '::marker',\n\t\t\t'ph': '::placeholder',\n\t\t\t's': '::selection',\n\t\t),\n\t\t'custom': (\n\t\t\t'btc': '>*+*', // between children\n\t\t\t'evc': ':nth-child(2n)', // even child\n\t\t\t'evot': ':nth-of-type(2n)', // even of type\n\t\t\t'odc': ':nth-child(odd)', // odd child\n\t\t\t'odot': ':nth-of-type(odd)',\n\t\t\t'op': '[open]',\n\t\t\t'tif': '[tabindex=\"0\"]', // tabindex focus\n\t\t\t'nojs': '.no-js',\n\t\t),\n\t),\n) !default;\n\n$utils-cfg: map.deep-merge($utils-cfg, $utils-config);\n$utils-cfg: map.deep-merge($utils-cfg, $utils-config-ext);\n\n$tUSv: map.get($utils-cfg, 'tokens', 'util', 'str-value');\n$tUNv: map.get($utils-cfg, 'tokens', 'util', 'num-value');\n$tURv: map.get($utils-cfg, 'tokens', 'util', 'raw-value');\n$tUHv: map.get($utils-cfg, 'tokens', 'util', 'hash-value');\n$tUFv: map.get($utils-cfg, 'tokens', 'util', 'fallback-value');\n$tUCla: map.get($utils-cfg, 'tokens', 'util', 'color-alpha');\n$tUGkw: map.get($utils-cfg, 'tokens', 'util', 'global-keyword');\n$tUCp: map.get($utils-cfg, 'tokens', 'util', 'custom-property');\n$tUIm: map.get($utils-cfg, 'tokens', 'util', 'important');\n$tUCm: map.get($utils-cfg, 'tokens', 'util', 'component');\n$tUSp: map.get($utils-cfg, 'tokens', 'util', 'space');\n$tUKwc: map.get($utils-cfg, 'tokens', 'util', 'keyword-chain');\n$tUNls: map.get($utils-cfg, 'tokens', 'util', 'no-list-separator');\n$tULs1: map.get($utils-cfg, 'tokens', 'util', 'list-separator1');\n$tULs2: map.get($utils-cfg, 'tokens', 'util', 'list-separator2');\n\n$tSOr: map.get($utils-cfg, 'tokens', 'states', 'or');\n$tSAnd: map.get($utils-cfg, 'tokens', 'states', 'and');\n$tSNot: map.get($utils-cfg, 'tokens', 'states', 'not');\n$tSCs: map.get($utils-cfg, 'tokens', 'states', 'custom');\n$tSTu: map.get($utils-cfg, 'tokens', 'states', 'this-util');\n$tSCn: map.get($utils-cfg, 'tokens', 'states', 'context');\n$tSRaw: map.get($utils-cfg, 'tokens', 'states', 'raw');\n$tSTudv: $tSTu + $tUSv;\n\n$kUvKA: map.get($utils-cfg, 'tokens', 'generation', 'uv-keywords-alias');\n$kStPC: map.get($utils-cfg, 'tokens', 'generation', 'states-pseudo-classes');\n$kStPE: map.get($utils-cfg, 'tokens', 'generation', 'states-pseudo-elements');\n$kStCb: map.get($utils-cfg, 'tokens', 'generation', 'states-combine');\n$kStOl: map.get($utils-cfg, 'tokens', 'generation', 'states-only');\n$kCfOv: '/override' !default;\n$kCfBan: '/ban' !default;\n$kCfAl: '/allow' !default;\n\n$utils-cfg: map.set(\n\t$utils-cfg,\n\t'states',\n\t'keywords',\n\tmap.merge(\n\t\t(\n\t\t\t$kStPC: 'pseudo-cls',\n\t\t\t$kStPE: 'pseudo-elm',\n\t\t\t$kStCb: null,\n\t\t\t$kStOl: null,\n\t\t),\n\t\tmap.get($utils-cfg, 'states', 'keywords') or ()\n\t)\n);\n\n$utils-cfg: map.merge(\n\t$utils-cfg,\n\t(\n\t\t'tokens-values': (\n\t\t\t$tUNls: space,\n\t\t\t$tULs1: comma,\n\t\t\t$tULs2: slash,\n\t\t),\n\t\t'abbr-separators': list.join(\n\t\t\t(\n\t\t\t\t$tUSv,\n\t\t\t\t$tUNv,\n\t\t\t\t$tURv,\n\t\t\t\t$tUHv,\n\t\t\t),\n\t\t\tmap.get($utils-cfg, 'abbr-separators') or ()\n\t\t)\n\t)\n);\n\n$utils-states: map.merge(\n\tmap.get($utils-cfg, 'states', 'pseudo-cls'),\n\tmap.get($utils-cfg, 'states', 'pseudo-elm'),\n);\n","http://localhost/sass/tools/functions/high/utils/_index.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:math';\n@use 'sass:string';\n@use 'sass:selector';\n@use 'sass:color';\n\n@forward 'value-converters';\n@forward 'parse-util';\n@forward 'util-apply-selector';\n@forward 'range-generators' as generate-uv-*;\n@forward 'value-transformers' as transform-uv-*;\n\n@use '../forward-tools' as ml;\n@use 'value-converters' as converters;\n@use 'value-transformers' as transformers;\n@use 'range-generators';\n@use 'parse-util' as pu;\n\n// Utilities\n//\n// Functions for working with utilities.\n//\n// Styleguide: sass-tools.functions.utils\n\n/// Styleguide: sass-tools.functions.high.utils\n\n@function convert-util-states($states, $this-util: null, $pre: false) {\n\t$prefix: '&';\n\t$suffix: '';\n\n\t@if $pre {\n\t\t$prefix: '';\n\n\t\t@if string.slice($states, -1) == '.' {\n\t\t\t$states: string.slice($states, 1, -2);\n\t\t} @else {\n\t\t\t$suffix: ' ';\n\t\t}\n\t}\n\n\t$result: $prefix;\n\t$or: ', ';\n\n\t@each $state in ml.str-split($states, ml.$tSOr) {\n\t\t@each $item in ml.str-split($state, ml.$tSAnd) {\n\t\t\t$converted: '';\n\t\t\t$not: string.slice($item, 1, 1) == ml.$tSNot;\n\n\t\t\t@if $not {\n\t\t\t\t$item: string.slice($item, 2);\n\t\t\t}\n\n\t\t\t@if map.has-key(ml.$utils-states, $item) {\n\t\t\t\t$converted: map.get(ml.$utils-states, $item);\n\t\t\t} @else if ml.str-starts($item, ml.$tSCs) {\n\t\t\t\t$item-name: string.slice($item, string.length(ml.$tSCs) + 1);\n\n\t\t\t\t@if map.has-key(ml.$utils-cfg, 'states', 'custom', $item-name) {\n\t\t\t\t\t$converted: map.get(ml.$utils-cfg, 'states', 'custom', $item-name);\n\t\t\t\t} @else {\n\t\t\t\t\t@return ml.error('Undefined custom state: `#{$item}`');\n\t\t\t\t}\n\t\t\t} @else if ml.str-starts($item, ml.$tSCn) {\n\t\t\t\t$ctx-value: string.slice($item, 2);\n\t\t\t\t$converted: '.' + ml.str-escape(\n\t\t\t\t\tml.$cCtx + util-separated-value($ctx-value)\n\t\t\t\t);\n\t\t\t} @else if ml.str-starts($item, ml.$tSRaw) {\n\t\t\t\t$converted: string.slice($item, 2);\n\t\t\t} @else if ml.str-starts($item, ml.$tSTu) {\n\t\t\t\t@if not $this-util {\n\t\t\t\t\t@return ml.error('`#{ml.$tSTu}` cannot be used because $this-util is not passed');\n\t\t\t\t}\n\n\t\t\t\t@if $item == ml.$tSTu {\n\t\t\t\t\t$converted: ml.str-escape(ml.$tSTu);\n\t\t\t\t} @else if $item == ml.$tSTudv {\n\t\t\t\t\t$converted: ml.css-class($this-util);\n\t\t\t\t} @else {\n\t\t\t\t\t$converted: ml.css-class($this-util + ml.str-escape(string.slice($item, 2)));\n\t\t\t\t}\n\t\t\t} @else if $item == '' {\n\t\t\t\t$converted: ' ';\n\t\t\t} @else {\n\t\t\t\t$converted: $item;\n\t\t\t}\n\n\t\t\t@if $not {\n\t\t\t\t$converted: ':not(#{$converted})';\n\t\t\t}\n\n\t\t\t$result: $result + $converted;\n\t\t}\n\n\t\t$result: $result + $suffix + $or + $prefix;\n\t}\n\n\t@return string.slice($result, 1, -(1 + string.length($or) + string.length($prefix)));\n}\n\n@function util-separated-value($value) {\n\t@if $value == '' {\n\t\t@return '';\n\t}\n\n\t@if ml.str2n($value) {\n\t\t@return ml.$tUNv + $value;\n\t}\n\n\t$str-value: if(\n\t\tmeta.type-of($value) == 'string',\n\t\t$value,\n\t\t$value + ''\n\t);\n\n\t$first-char: string.slice($str-value, 1, 1);\n\n\t@if $first-char == '#' {\n\t\t@return ml.$tUHv + $str-value;\n\t}\n\n\t@return if(\n\t\t$first-char == ml.$tURv,\n\t\t$str-value,\n\t\tml.$tUSv + $str-value\n\t);\n}\n\n@function expand-util-kw-alias($raw-alias, $util) {\n\t$alias-data: pu.parse-util($raw-alias);\n\t$alias-list: ml.str-split(map.get($alias-data, 'value'), ml.$tUKwc);\n\t$length: list.length($alias-list);\n\t$values: ();\n\n\t$result: if(\n\t\tlist.length($alias-data) > 1,\n\t\t('components': map.remove($alias-data, 'value')),\n\t\t()\n\t);\n\n\t@if $length == 1 {\n\t\t$keywords: map.get(ml.$utils-db, 'utils', 'registry', $util, 'keywords');\n\n\t\t@if meta.type-of($keywords) == 'map' {\n\t\t\t$values: $keywords;\n\t\t} @else {\n\t\t\t@each $link in $keywords {\n\t\t\t\t@if map.has-key(ml.$utils-db, 'utils', 'keywords', $link) {\n\t\t\t\t\t$values: map.merge($values, map.get(ml.$utils-db, 'utils', 'keywords', $link));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@if $values == () {\n\t\t\t\t$values: map.get(ml.$utils-db, 'common', 'keywords', 'css');\n\t\t\t}\n\t\t}\n\t} @else if $length == 2 {\n\t\t$group: list.nth($alias-list, 2);\n\n\t\t@if map.has-key(ml.$utils-db, 'common', 'keywords', $group) {\n\t\t\t$values: map.get(ml.$utils-db, 'common', 'keywords', $group);\n\t\t} @else if $group == 'General' {\n\t\t\t$values: map.merge(\n\t\t\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'css'),\n\t\t\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'global'),\n\t\t\t);\n\t\t} @else if $group == 'All' {\n\t\t\t$values: map.merge(\n\t\t\t\tmap.merge(\n\t\t\t\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'css'),\n\t\t\t\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'global'),\n\t\t\t\t),\n\t\t\t\tmap.get(ml.$utils-db, 'utils', 'registry', $util, 'keywords') or ()\n\t\t\t);\n\t\t} @else {\n\t\t\t@return ml.error('Invalid keyword group alias: `#{$group}`');\n\t\t}\n\t} @else {\n\t\t$section: list.nth($alias-list, 2);\n\t\t$group: list.nth($alias-list, 3);\n\n\t\t@if not map.has-key(ml.$utils-db, $section, 'keywords', $group) {\n\t\t\t@return ml.error('Not found keywords on this path: `#{$section}.#{$group}`');\n\t\t}\n\n\t\t$values: map.get(ml.$utils-db, $section, 'keywords', $group);\n\t}\n\n\t@if map.has-key($values, '') {\n\t\t@if ml.$uv-kw-alias-behavior == 1 {\n\t\t\t$def-value: map.get($values, '');\n\t\t\t$kw-def-value-index: list.index(\n\t\t\t\tmap.values(map.set($values, '', null)), $def-value\n\t\t\t);\n\n\t\t\t@if $kw-def-value-index {\n\t\t\t\t$values: map.remove(\n\t\t\t\t\t$values, list.nth(list.nth($values, $kw-def-value-index), 1)\n\t\t\t\t);\n\t\t\t}\n\t\t} @else if ml.$uv-kw-alias-behavior == 2 {\n\t\t\t$values: map.remove($values, '');\n\t\t}\n\t}\n\n\t@return map.set($result, 'values', $values);\n}\n\n// uv\n//\n// Get CSS value of utility.\n// ```scss\n//@debug ml.uv('D'); // 'block'\n//@debug ml.uv('C#c06*80'); // rgba(204, 0, 102, 0.8)\n//@debug ml.uv('M3gg;a;gSm'); // calc(var(--ml-gg) * 3) auto 520px\n//```\n//\n// $util - `string` <div> Any utility </div>\n//\n// Styleguide: sass-tools.functions.utils.uv\n\n/// Styleguide: sass-tools.functions.high.utils.uv\n\n@function uv($util) {\n\t@if $util == '' {\n\t\t@return ml.error('Empty string passed');\n\t}\n\n\t$util-data: ml.parse-abbr($util);\n\n\t@return ml.convert-util-value(\n\t\tmap.get($util-data, 'value'),\n\t\tmap.get($util-data, 'name'),\n\t);\n}\n\n// TODO: replace several `map.set()` to one `map.merge`\n$-util-value-converters: ();\n\n$-fn-prefix-length: string.length('convert-uv-');\n\n@each $key, $value in meta.module-functions(converters) {\n\t$-util-value-converters: map.set(\n\t\t$-util-value-converters, string.slice($key, $-fn-prefix-length + 1), $value\n\t);\n}\n\nml.$utils-cfg: map.set(\n\tml.$utils-cfg,\n\t'converters',\n\tmap.merge(\n\t\t$-util-value-converters, map.get(ml.$utils-cfg, 'converters')\n\t)\n);\n\n$-util-range-generators: ();\n\n@each $key, $value in meta.module-functions(range-generators) {\n\t$-util-range-generators: map.set(\n\t\t$-util-range-generators, ml.str-replace($key, '-range'), $value\n\t);\n}\n\nml.$utils-cfg: map.set(\n\tml.$utils-cfg,\n\t'range-generators',\n\tmap.merge(\n\t\t$-util-range-generators, map.get(ml.$utils-cfg, 'range-generators')\n\t)\n);\n\n$-util-value-transformers: ();\n\n@each $key, $value in meta.module-functions(transformers) {\n\t$-util-value-transformers: map.set(\n\t\t$-util-value-transformers, $key, $value\n\t);\n}\n\nml.$utils-cfg: map.set(\n\tml.$utils-cfg,\n\t'transformers',\n\tmap.merge(\n\t\t$-util-value-transformers, map.get(ml.$utils-cfg, 'transformers')\n\t)\n);\n","http://localhost/sass/tools/functions/high/utils/range-generators.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:math';\n@use 'sass:string';\n@use 'sass:color';\n\n@use '../forward-tools' as ml;\n@use 'value-converters' as converters;\n@use 'parse-util' as mpu;\n\n@function number-range($range, $util) {\n\t$range-args-count: list.length($range);\n\n\t@if $range-args-count < 2 {\n\t\t@return ml.error('Invalid range syntax: `#{$range}`. Expected 2 or 3 arguments');\n\t}\n\n\t$value-data: mpu.parse-util(list.nth($range, 1));\n\t$start: map.get($value-data, 'value');\n\t$start-number: ml.str2n($start, true);\n\t$end: list.nth($range, 2);\n\n\t@if meta.type-of($start-number) != 'number' {\n\t\t@if ml.str2n($start) {\n\t\t\t@return ml.error('Unknown unit in $start value in range: `#{$start}`');\n\t\t}\n\n\t\t@return ml.error('Invalid $start value in range: `#{$start}`');\n\t}\n\n\t$result: if(\n\t\tlist.length($value-data) > 1,\n\t\t('components': map.remove($value-data, 'value')),\n\t\t()\n\t);\n\n\t$unit-name: math.unit($start-number);\n\t$unit: map.get(ml.$units-all, $unit-name);\n\t$converted-start: ml.convert-util-value($start-number, $util);\n\t$css-unit-name: null;\n\t$css-unit: null;\n\n\t@if meta.type-of($converted-start) == 'number' {\n\t\t$css-unit-name: math.unit($converted-start);\n\t\t$css-unit: (\n\t\t\tmap.get(\n\t\t\t\tml.$utils-cfg,\n\t\t\t\t'units',\n\t\t\t\tmap.get(ml.$utils-db, 'utils', 'registry', $util, 'conversion'),\n\t\t\t\t$unit-name\n\t\t\t) or\n\t\t\tmap.get(ml.$units-all, $css-unit-name)\n\t\t);\n\t}\n\n\t@if map.has-key(ml.$general-cfg, 'custom-unit-values', $unit-name) {\n\t\t$css-unit: map.get(ml.$general-cfg, 'custom-unit-values', $unit-name);\n\t}\n\n\t$step: if(($range-args-count > 2), list.nth($range, 3), 1);\n\t$values: ();\n\t$is-css-unit-fn: meta.type-of($css-unit) == 'function';\n\t$i: math.div($start-number, $unit);\n\n\t@while $i <= $end {\n\t\t$css-value: if(\n\t\t\t$is-css-unit-fn,\n\t\t\tmeta.call($css-unit, $i, ('util': $util)),\n\t\t\t$i * $css-unit\n\t\t);\n\n\t\t$values: map.set($values, $i * $unit, $css-value);\n\t\t$i: $i + $step;\n\t}\n\n\t@return map.set($result, 'values', $values);\n}\n\n$-color-adjust-fn: meta.get-function('adjust', false, color);\n$-color-scale-fn: meta.get-function('scale', false, color);\n\n@function -shade-name($item, $i, $step) {\n\t@return $step <= $item;\n}\n\n@function color-range($range, $util) {\n\t$range-args-count: list.length($range);\n\n\t@if $range-args-count < 3 {\n\t\t@return ml.error('invalid range syntax: `#{$range}`. Expected 3 or 4 arguments');\n\t}\n\n\t$numbers-list: list.nth($range, 2);\n\t$shades-num-data: mpu.parse-util(list.nth($numbers-list, 1));\n\t$shades-number: ml.str2n(map.get($shades-num-data, 'value'));\n\n\t$alpha-number: if(\n\t\tlist.length($numbers-list) > 1,\n\t\tlist.nth($numbers-list, 2),\n\t\t$shades-number\n\t);\n\n\t$step-map: list.nth($range, 3);\n\t$step-fn: $-color-adjust-fn;\n\t$is-alpha: map.has-key($step-map, 'alpha');\n\t$only-alpha: list.length($step-map) == 1 and $is-alpha;\n\t$util-data: (\n\t\t'name': $util,\n\t\t'section': 'utils',\n\t);\n\n\t$result: if(\n\t\tlist.length($shades-num-data) > 1,\n\t\t('components': map.remove($shades-num-data, 'value')),\n\t\t()\n\t);\n\n\t@if $range-args-count >= 4 {\n\t\t$fn-link: list.nth($range, 4);\n\n\t\t$step-fn: if(\n\t\t\tmeta.type-of($fn-link) == 'function',\n\t\t\t$fn-link,\n\t\t\tmeta.get-function($fn-link, false, color)\n\t\t);\n\t}\n\n\t$shades-map: if(\n\t\t$only-alpha,\n\t\tlist.nth($range, 1),\n\t\t-generate-color-shades(\n\t\t\tlist.nth($range, 1),\n\t\t\t$shades-number,\n\t\t\tmap.remove($step-map, 'alpha'),\n\t\t\t$step-fn,\n\t\t\t$util-data\n\t\t)\n\t);\n\n\t$shades-list: if(\n\t\tmeta.type-of($shades-map) == 'map',\n\t\tmap.keys($shades-map),\n\t\t$shades-map\n\t);\n\n\t$values: if(\n\t\t$is-alpha,\n\t\t-generate-color-alpha(\n\t\t\t$shades-list, $alpha-number, map.get($step-map, 'alpha'), $step-fn, $util-data\n\t\t),\n\t\t$shades-map\n\t);\n\n\t@return map.set($result, 'values', $values);\n}\n\n@function -generate-color-shades(\n\t$colors, $count, $step-map, $step-fn, $util-data\n) {\n\t$values: ();\n\t$new-shades: ();\n\t$shade-step: 50;\n\t$max-step: 0;\n\n\t@if map.has-key($step-map, 'rgb') {\n\t\t$max-step: map.get($step-map, 'rgb');\n\t\t$step-map: map.merge(\n\t\t\tmap.remove($step-map, 'rgb'),\n\t\t\t(\n\t\t\t\t'red': $max-step,\n\t\t\t\t'green': $max-step,\n\t\t\t\t'blue': $max-step,\n\t\t\t)\n\t\t);\n\t} @else {\n\t\t//stylelint-disable\n\t\t$max-step: math.max(map.values($step-map)...);\n\t\t//stylelint-enable\n\t}\n\n\t$max-step: math.abs($max-step);\n\n\t@if $step-fn == $-color-adjust-fn {\n\t\t$shade-step: ml.ls-find(\n\t\t\t(5, 10, 50), meta.get-function('-shade-name'), $max-step\n\t\t) or 100;\n\t} @else if $step-fn == $-color-scale-fn {\n\t\t$shade-step: if($max-step <= 20%, 50, 100);\n\t}\n\n\t@each $item in $colors {\n\t\t$color: ml.apply-value-converter(\n\t\t\t$item, $util-data...\n\t\t);\n\t\t$is-css-var: ml.is-css-var($color, true);\n\n\t\t@if meta.type-of($color) != 'color' and not $is-css-var {\n\t\t\t@return ml.error(\n\t\t\t\t'invalid value in range: `#{$color}`. Expected color or CSS variable'\n\t\t\t);\n\t\t}\n\n\t\t$str-color: $item + '';\n\t\t$color-values: (\n\t\t\t$item: $color\n\t\t);\n\n\t\t@if not $is-css-var and not (\n\t\t\tstring.slice($str-color, 1, 1) == '#' or\n\t\t\tstring.index($str-color, ml.$tUCla)\n\t\t) {\n\t\t\t$cur-shade: 0;\n\t\t\t$i: 1;\n\n\t\t\t@if string.slice($str-color, -1) == '0' {\n\t\t\t\t$str-color: string.slice($str-color, 1, -2);\n\t\t\t}\n\n\t\t\t@while $i < $count {\n\t\t\t\t$color: meta.call($step-fn, $color, $step-map...);\n\t\t\t\t$cur-shade: $cur-shade + $shade-step;\n\t\t\t\t$key: $str-color + $cur-shade;\n\n\t\t\t\t@if not map.has-key(ml.$utils-db, 'common', 'keywords', 'colors', $key) {\n\t\t\t\t\t$new-shades: map.set($new-shades, $key, $color);\n\t\t\t\t}\n\n\t\t\t\t$color-values: map.set($color-values, $key, $color);\n\t\t\t\t$i: $i + 1;\n\t\t\t}\n\t\t}\n\n\t\t$values: map.merge($values, $color-values);\n\t}\n\n\t// questionable solution because the generator has a hidden side effect\n\t// TODO: move saving new shades from here\n\t@if list.length($new-shades) > 0 {\n\t\tml.$utils-db: map.merge(\n\t\t\tml.$utils-db, 'common', 'keywords', 'colors', $new-shades\n\t\t);\n\t}\n\n\t@return $values;\n}\n\n@function -generate-color-alpha(\n\t$colors, $count, $step-value, $step-fn, $util-data\n) {\n\t$values: ();\n\t$step: if(\n\t\tml.str-starts($step-value, ml.$tUCp), null, 0\n\t);\n\t$is-percent-step: false;\n\n\t@if $step {\n\t\t$is-percent-step: math.unit($step-value) == '%';\n\n\t\t$step: if(\n\t\t\t$is-percent-step,\n\t\t\tmath.div($step-value, 1%) * 1p,\n\t\t\t$step-value * 100p\n\t\t);\n\n\t\t$step-value: -$step-value;\n\t}\n\n\t@each $item in $colors {\n\t\t$color: ml.apply-value-converter(\n\t\t\t$item, $util-data...\n\t\t);\n\t\t$is-css-var: ml.is-css-var($color, true);\n\n\t\t@if meta.type-of($color) != 'color' and not $is-css-var {\n\t\t\t@return ml.error(\n\t\t\t\t'invalid value in range: `#{$color}`. Expected color or CSS variable'\n\t\t\t);\n\t\t}\n\n\t\t$color-values: (\n\t\t\t$item: $color\n\t\t);\n\n\t\t@if not $step {\n\t\t\t$color-values: map.set(\n\t\t\t\t$color-values,\n\t\t\t\t($item + ml.$tUCla + $step-value),\n\t\t\t\trgba(\n\t\t\t\t\t$color,\n\t\t\t\t\tstring.insert(\n\t\t\t\t\t\tconverters.convert-uv-cust-prop($step-value), ', 1', -2\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t} @else {\n\t\t\t@if meta.type-of($item) == 'string' {\n\t\t\t\t$token-pos: string.index($item, ml.$tUCla);\n\n\t\t\t\t@if $token-pos {\n\t\t\t\t\t$item: string.slice($item, 1, $token-pos - 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$cur-alpha: 100p;\n\t\t\t$cur-alpha-val: 1;\n\t\t\t$prev-alpha-val: 1;\n\t\t\t$i: 1;\n\n\t\t\t@if $is-css-var {\n\t\t\t\t$space-pos: string.index($color, '), ');\n\n\t\t\t\t@if $is-percent-step {\n\t\t\t\t\t$step-value: math.div($step-value, 100%);\n\t\t\t\t}\n\n\t\t\t\t@if $space-pos {\n\t\t\t\t\t$cur-alpha-val: ml.str2n(string.slice($color, $space-pos + 3));\n\t\t\t\t\t$cur-alpha: $cur-alpha-val * 100p;\n\t\t\t\t\t$prev-alpha-val: $cur-alpha-val;\n\t\t\t\t} @else {\n\t\t\t\t\t$color: rgba($color, 1);\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t$cur-alpha: color.alpha($color) * 100p;\n\t\t\t}\n\n\t\t\t@while $i < $count {\n\t\t\t\t@if $is-css-var {\n\t\t\t\t\t$cur-alpha: $cur-alpha - $step;\n\t\t\t\t\t$cur-alpha-val: $cur-alpha-val + $step-value;\n\t\t\t\t\t$color: ml.str-replace($color, $prev-alpha-val + '', $cur-alpha-val);\n\t\t\t\t\t$prev-alpha-val: $cur-alpha-val;\n\t\t\t\t} @else {\n\t\t\t\t\t$color: meta.call($step-fn, $color, $alpha: $step-value);\n\n\t\t\t\t\t$cur-alpha: if(\n\t\t\t\t\t\t$is-percent-step,\n\t\t\t\t\t\tcolor.alpha($color) * 100p,\n\t\t\t\t\t\t$cur-alpha - $step\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t$color-values: map.set(\n\t\t\t\t\t$color-values, ($item + ml.$tUCla + $cur-alpha), $color\n\t\t\t\t);\n\t\t\t\t$i: $i + 1;\n\t\t\t}\n\t\t}\n\n\t\t$values: map.merge($values, $color-values);\n\t}\n\n\t@return $values;\n}\n","http://localhost/sass/tools/functions/high/utils/parse-util.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:string';\n\n@use '../forward-tools' as ml;\n\n$-ar-keywords: list.join(\n\tmap.keys(ml.$bp-map),\n\tmap.keys(map.get(ml.$at-rules-cfg, 'keywords')),\n);\n$-states-tokens: (ml.$tSCn, ml.$tSAnd, ml.$tSTu);\n\n// parse-util\n//\n// Parse utility value or name. Return map with passed value components:\n// - `value` - pure value or name\n// - `mq` - breakpoint or any mediaquery\n// ```scss\n//parse-util('1u_md') => ('value': '1u', 'mq': 'md')\n// ```\n//\n// $raw-value - utility value or name. Type string.\n//\n/// Styleguide: sass-tools.functions.high.utils.parse_util\n\n@function parse-util($raw-value) {\n\t$raw-value-parts: ml.str-split($raw-value + '', ml.$tUCm);\n\t$result: ();\n\t$at-rules: null;\n\t$value: null;\n\t$states: ();\n\t$comp-indexes: ();\n\t$i: 1;\n\n\t@if list.length($raw-value-parts) > 1 {\n\t\t@each $component in $raw-value-parts {\n\t\t\t$component-trimmed: ml.str-trim($component);\n\t\t\t$component-item: list.nth(ml.str-split($component-trimmed, ' '), 1);\n\n\t\t\t@if string.slice($component-item, 1, 1) == ml.$tSNot {\n\t\t\t\t$component-item: string.slice($component-item, 2);\n\t\t\t}\n\n\t\t\t$part: list.nth(ml.str-split(\n\t\t\t\tlist.nth(ml.str-split($component-item, ml.$tSOr), 1),\n\t\t\t\tml.$tSAnd\n\t\t\t), 1);\n\n\t\t\t@if not $at-rules and (\n\t\t\t\tstring.index($part, ml.$tAAr) or\n\t\t\t\tlist.index($-ar-keywords, $part) or\n\t\t\t\tml.str-starts($part, ml.$tALs)\n\t\t\t) {\n\t\t\t\t$at-rules: $component-trimmed;\n\t\t\t\t$comp-indexes: map.set($comp-indexes, 'ar', $i);\n\t\t\t} @else if (\n\t\t\t\tnot $value and not string.index($component, ' ') and\n\t\t\t\tnot list.index($-states-tokens, string.slice($component-item, 1, 1))\n\t\t\t) {\n\t\t\t\t$value: $component-trimmed;\n\t\t\t\t$comp-indexes: map.set($comp-indexes, 'value', $i);\n\t\t\t} @else {\n\t\t\t\t$states: list.append($states, $component-trimmed);\n\t\t\t\t$comp-indexes: map.set(\n\t\t\t\t\t$comp-indexes, 'state' + list.length($states), $i\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t$i: $i + 1;\n\t\t}\n\t} @else {\n\t\t$value: $raw-value;\n\t}\n\n\t@if not $value {\n\t\t$value: $at-rules;\n\t\t$comp-indexes: map.set($comp-indexes, 'value', map.get($comp-indexes, 'ar'));\n\t} @else if $at-rules {\n\t\t$result: map.set($result, 'at-rules', $at-rules);\n\t}\n\n\t@if not $value {\n\t\t@return ml.error('Not specified value or name in string `#{$raw-value}`');\n\t}\n\n\t$i: 1;\n\n\t@each $item in $states {\n\t\t@if map.get($comp-indexes, 'state' + $i) < map.get($comp-indexes, 'value') {\n\t\t\t$result: map.set($result, 'pre-states', $item);\n\t\t} @else {\n\t\t\t$result: map.set($result, 'post-states', $item);\n\t\t}\n\n\t\t$i: $i + 1;\n\t}\n\n\t@if meta.type-of($value) == 'string' and (\n\t\tstring.slice($value, -(string.length(ml.$tUIm))) == ml.$tUIm\n\t) {\n\t\t$value: string.slice($value, 1, -(1 + string.length(ml.$tUIm)));\n\t\t$result: map.set($result, 'important', true);\n\t}\n\n\t@return map.set($result, 'value', $value);\n}\n","http://localhost/sass/tools/functions/high/utils/value-transformers.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:math';\n@use 'sass:string';\n\n@use '../forward-tools' as ml;\n\n// Value transformers\n//\n// Available transformers:\n// ```scss\n//@debug ml.transform-uv-gradiend();\n// ```\n//\n// $value - value for transforming\n// $data = () - map with data required for transforming\n//\n/// Styleguide: sass-tools.functions.high.utils.value_transformers\n\n$-directions: map.values(ml.$main-directions);\n\n@function gradient($values, $data: ()) {\n\t$first-list: list.nth($values, 1);\n\t$first-item: list.nth($first-list, 1);\n\t$css-fn-name: map.get(\n\t\tml.$utils-db, 'utils', 'registry', map.get($data, 'name'), 'css-function'\n\t);\n\n\t@if (\n\t\tlist.index($-directions, $first-item) and\n\t\tstring.index($css-fn-name, 'linear')\n\t) {\n\t\t$first-list: list.join(to, $first-list);\n\t} @else if string.index($css-fn-name, 'conic') {\n\t\t$is-first-item-calc:\n\t\t\tmeta.type-of($first-item) == 'string' and string.index($first-item, 'calc(');\n\n\t\t@if (meta.type-of($first-item) == 'number' or $is-first-item-calc) {\n\t\t\t$first-list: list.join(from, $first-list);\n\t\t}\n\t}\n\n\t@return meta.call(\n\t\t// TODO: add cache with frequently used CSS functions\n\t\tmeta.get-function($css-fn-name, true),\n\t\tlist.set-nth($values, 1, $first-list),\n\t);\n}\n\n@function to-css-fn($values, $data: ()) {\n\t$result: ();\n\n\t@each $item in if(\n\t\tlist.separator($values) == comma,\n\t\t$values, ($values,)\n\t) {\n\t\t// maybe worth doing it more readable\n\t\t$result: list.append(\n\t\t\t$result,\n\t\t\tmeta.call(\n\t\t\t\tmeta.get-function(\n\t\t\t\t\tmap.get(\n\t\t\t\t\t\tml.$utils-db, 'utils', 'registry', map.get($data, 'name'), 'css-function'\n\t\t\t\t\t),\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\t$item\n\t\t\t)\n\t\t);\n\t}\n\n\t@return $result;\n}\n","http://localhost/sass/tools/functions/high/utils/util-apply-selector.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:string';\n@use 'sass:selector';\n\n@use '../forward-tools' as ml;\n\n@function util-apply-selector($selector, $util-sel-list) {\n\t@if not $selector {\n\t\t@return if(\n\t\t\tmeta.type-of(ml.$utils-up-specificity) == 'string',\n\t\t\tselector.nest(ml.$utils-up-specificity, $util-sel-list),\n\t\t\t$util-sel-list\n\t\t);\n\t}\n\n\t$result: if(\n\t\tstring.index(meta.inspect($selector), ml.$tSTu),\n\t\t-apply-custom($selector, $util-sel-list),\n\t\t-apply-external($selector, $util-sel-list)\n\t);\n\n\t@if meta.type-of(ml.$utils-up-specificity) == 'string' {\n\t\t$result: selector.nest(ml.$utils-up-specificity, $result);\n\t}\n\n\t@return if(\n\t\tlist.length($result) > 1,\n\t\t$result,\n\t\tlist.nth($result, 1)\n\t);\n}\n\n@function -str-item-index($item, $i, $str) {\n\t@return string.index($item, $str);\n}\n\n@function -apply-external($external-sel-list, $util-sel-list) {\n\t$result: ();\n\n\t@each $external-sel in $external-sel-list {\n\t\t@each $util-selector in $util-sel-list {\n\t\t\t$util-sel-str: if(\n\t\t\t\tmeta.type-of($util-selector) == 'list',\n\t\t\t\tmeta.inspect($util-selector),\n\t\t\t\t$util-selector\n\t\t\t);\n\n\t\t\t$util-simple-sel: -util-simple-selector($util-sel-str);\n\t\t\t$result: list.append(\n\t\t\t\t$result,\n\t\t\t\tif(\n\t\t\t\t\t$util-simple-sel == $util-sel-str,\n\t\t\t\t\t$external-sel,\n\t\t\t\t\tml.str-replace-all($util-sel-str, $util-simple-sel, $external-sel)\n\t\t\t\t),\n\t\t\t\tcomma\n\t\t\t);\n\t\t}\n\t}\n\n\t@return $result;\n}\n\n@function -apply-custom($custom-sel, $util-sel-list) {\n\t$result: ();\n\n\t@each $util-selector in $util-sel-list {\n\t\t$selector: $custom-sel;\n\t\t$complex-sel-list: ml.str-split($selector, ' ');\n\n\t\t$compound-sel: if(\n\t\t\tlist.length($complex-sel-list) > 1,\n\t\t\tml.ls-find($complex-sel-list, meta.get-function('-str-item-index'), ml.$tSTu),\n\t\t\t$selector\n\t\t);\n\n\t\t$compound-sel-prefix: list.nth(ml.str-split($compound-sel, ml.$tSTu), 1);\n\t\t$new-util-compd-sel: null;\n\n\t\t$util-sel-str: if(\n\t\t\tmeta.type-of($util-selector) == 'list',\n\t\t\tmeta.inspect($util-selector),\n\t\t\t$util-selector\n\t\t);\n\n\t\t@if $compound-sel-prefix != '' {\n\t\t\t$util-simple-sel: -util-simple-selector($util-sel-str);\n\t\t\t$new-util-compd-sel: $compound-sel-prefix + string.slice($util-simple-sel, 2);\n\n\t\t\t$util-sel-str: ml.str-replace(\n\t\t\t\t$util-sel-str, $util-simple-sel, $new-util-compd-sel\n\t\t\t);\n\n\t\t\t$selector: ml.str-replace(\n\t\t\t\t$selector, $compound-sel-prefix + ml.$tSTu, $util-sel-str\n\t\t\t);\n\t\t} @else {\n\t\t\t$selector: ml.str-replace($selector, ml.$tSTu, $util-sel-str);\n\t\t}\n\n\t\t@if string.index($selector, ml.$tSTu) {\n\t\t\t$selector: ml.str-replace-all(\n\t\t\t\t$selector,\n\t\t\t\tml.$tSTu,\n\t\t\t\t$new-util-compd-sel or -util-simple-selector($util-sel-str)\n\t\t\t);\n\t\t}\n\n\t\t$result: list.append($result, $selector, comma);\n\t}\n\n\t@return $result;\n}\n\n@function -util-simple-selector($util-selector) {\n\t// A bad solution, because a simple selector can be obtained in `mk-state` mixin, but now it seems too difficult to do it. Maybe this will be refactored in future\n\t$complex-sel: list.nth(selector.parse($util-selector), 1);\n\n\t$compound-sel: if(\n\t\tlist.length($complex-sel) > 1,\n\t\tml.ls-find($complex-sel, meta.get-function('-str-item-index'), ml.$tUCm),\n\t\tlist.nth($complex-sel, 1)\n\t);\n\n\t$simple-sel-list: selector.simple-selectors($compound-sel);\n\n\t@return if(\n\t\tlist.length($simple-sel-list) > 1,\n\t\tml.ls-find($simple-sel-list, meta.get-function('-str-item-index'), ml.$tUCm),\n\t\t$compound-sel\n\t);\n}\n","http://localhost/sass/tools/functions/high/utils/value-converters.scss":"@use 'sass:list';\n@use 'sass:map';\n@use 'sass:meta';\n@use 'sass:math';\n@use 'sass:string';\n\n@use '../forward-tools' as ml;\n\n// Value converters\n//\n// Simple converters are listed here, and more complex ones are made in separate sections on this page. Available converters:\n// ```scss\n//@debug ml.unitless(10); // 10\n//@debug ml.resolution(2x); // 2dppx\n//@debug ml.global-kw('a'); // auto\n//@debug ml.abbr('bgc'); // background-color\n// ```\n//\n// $value - value for converting\n// $data = () - map with data required for converting\n//\n/// Styleguide: sass-tools.functions.utils.value_converters\n\n\n@function convert-uv-number($value, $data: ()) {\n\t$val-number: ml.str2n($value, true);\n\t$units-key: map.get($data, 'units-key');\n\n\t@if meta.type-of($val-number) == 'number' {\n\t\t$unit-number: 0;\n\t\t$unit: math.unit($val-number);\n\n\t\t@if (\n\t\t\tnot $units-key and $unit == '' and\n\t\t\t($val-number - math.floor($val-number)) != 0\n\t\t) {\n\t\t\t// TODO: add setting for changing unit\n\t\t\t$unit-number: 1rem;\n\t\t} @else {\n\t\t\t$unit-number: map.get(\n\t\t\t\tml.$utils-cfg, 'units', $units-key or 'default', $unit\n\t\t\t);\n\t\t}\n\n\t\t@if $unit-number {\n\t\t\t@return math.div($val-number, map.get(ml.$units-all, $unit)) * $unit-number;\n\t\t}\n\n\t\t@if map.has-key(ml.$general-cfg, 'custom-unit-values', $unit) {\n\t\t\t$custom-unit-value: map.get(ml.$general-cfg, 'custom-unit-values', $unit);\n\t\t\t$custom-unit-val-type: meta.type-of($custom-unit-value);\n\n\t\t\t@if $custom-unit-val-type == 'function' {\n\t\t\t\t@return meta.call(\n\t\t\t\t\t$custom-unit-value,\n\t\t\t\t\t$val-number,\n\t\t\t\t\t('util': map.get($data, 'name'))\n\t\t\t\t);\n\t\t\t} @else if $custom-unit-val-type == 'number' {\n\t\t\t\t@return (\n\t\t\t\t\tmath.div($val-number, map.get(ml.$units-all, $unit)) * $custom-unit-value\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t@return $val-number;\n\t}\n\n\t@if not $units-key and meta.type-of($value) == 'string' {\n\t\t$fraction: ml.str-split($value, '/');\n\n\t\t@if list.length($fraction) > 1 {\n\t\t\t$dividend: list.nth($fraction, 1);\n\t\t\t$is-css-function: string.index($value, '(') and string.slice($value, -1) == ')';\n\n\t\t\t@if $is-css-function {\n\t\t\t\t@return $value;\n\t\t\t}\n\n\t\t\t@if map.get($data, 'negative') {\n\t\t\t\t$dividend: '-' + $dividend;\n\t\t\t}\n\n\t\t\t@return calc(\n\t\t\t\tml.apply-value-converter($dividend, 'O')\n\t\t\t\t/ ml.apply-value-converter(list.nth($fraction, 2), 'O')\n\t\t\t\t* 100%\n\t\t\t);\n\t\t}\n\t}\n\n\t@return $value;\n}\n\n@function convert-uv-keyword($value, $data: ()) {\n\t$name: map.get($data, 'name');\n\t$section: map.get($data, 'section');\n\n\t@if not map.has-key(ml.$utils-db, $section, 'registry', $name, 'keywords') {\n\t\t@return $value;\n\t}\n\n\t@if map.has-key(\n\t\tml.$utils-db, $section, 'registry', $name, 'keywords', $value\n\t) {\n\t\t@return map.get(\n\t\t\tml.$utils-db, $section, 'registry', $name, 'keywords', $value\n\t\t);\n\t}\n\n\t@if map.has-key(\n\t\tml.$utils-db, $section, 'registry', $name, 'custom-keywords', $value\n\t) {\n\t\t@return map.get(\n\t\t\tml.$utils-db, $section, 'registry', $name, 'custom-keywords', $value\n\t\t);\n\t}\n\n\t$links: map.get(\n\t\tml.$utils-db, $section, 'registry', $name, 'keywords'\n\t);\n\n\t@each $item in $links {\n\t\t@if map.has-key(ml.$utils-db, $section, 'keywords', $item, $value) {\n\t\t\t@return map.get(ml.$utils-db, $section, 'keywords', $item, $value);\n\t\t} @else if map.has-key(\n\t\t\tml.$utils-db, $section, 'registry', $item, 'keywords', $value\n\t\t) {\n\t\t\t@return map.get(\n\t\t\t\tml.$utils-db, $section, 'registry', $item, 'keywords', $value\n\t\t\t);\n\t\t}\n\t}\n\n\t@return (\n\t\tmap.get(ml.$utils-db, 'common', 'keywords', $links, $value) or\n\t\t$value\n\t);\n}\n\n@function convert-uv-resolution($value, $data: ()) {\n\t@return convert-uv-number(\n\t\t$value, ('units-key': 'resolution')\n\t);\n}\n\n@function convert-uv-num-percent($value, $data: ()) {\n\t@return convert-uv-number(\n\t\t$value, map.set($data, 'units-key', 'num-percent')\n\t);\n}\n\n@function convert-uv-angle($value, $data: ()) {\n\t@return convert-uv-number(\n\t\t$value, map.set($data, 'units-key', 'angle')\n\t);\n}\n\n@function convert-uv-num-length($value, $data: ()) {\n\t@return convert-uv-number(\n\t\t$value, map.set($data, 'units-key', 'num-length')\n\t);\n}\n\n@function convert-uv-global-kw($value, $data: ()) {\n\t@if map.has-key(\n\t\tml.$utils-db, 'common', 'keywords', 'css-oft', $value\n\t) {\n\t\t@return map.get(\n\t\t\tml.$utils-db, 'common', 'keywords', 'css-oft', $value\n\t\t);\n\t}\n\n\t@return (\n\t\tmap.get(ml.$utils-db, 'common', 'keywords', 'global', $value) or $value\n\t);\n}\n\n@function convert-uv-abbr($value, $data: ()) {\n\t@return (\n\t\tml.util-prop(\n\t\t\tml.str-ucfirst($value), map.get($data, 'section'), false, true\n\t\t) or\n\t\t// maybe in the future, the keys of utils in the registry will be unified\n\t\tml.util-prop($value, map.get($data, 'section'), false, true) or\n\t\t$value\n\t);\n}\n\n$-tUCp-length: string.length(ml.$tUCp);\n\n@function convert-uv-cust-prop($value, $data: ()) {\n\t@if (\n\t\tmeta.type-of($value) != 'string' or\n\t\tstring.slice($value, 1, $-tUCp-length) != ml.$tUCp\n\t) {\n\t\t@return $value;\n\t}\n\n\t$fallback-pos: string.index($value, ml.$tUFv);\n\t$result: '';\n\n\t// TODO: change stylelint rules to allow this code\n\t//stylelint-disable\n\t@if $fallback-pos {\n\t\t$result: var(\n\t\t\t#{\n\t\t\t\t'--' + ml.$uv-css-var-prefix + string.slice(\n\t\t\t\t\t$value, $-tUCp-length + 1, $fallback-pos - 1\n\t\t\t\t)\n\t\t\t},\n\t\t\t#{\n\t\t\t\tml.apply-value-converter(\n\t\t\t\t\tstring.slice($value, $fallback-pos + 1),\n\t\t\t\t\tmap.remove($data, 'negative')...\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\t} @else {\n\t\t$result: var(#{\n\t\t\t'--' + ml.$uv-css-var-prefix + string.slice(\n\t\t\t\t$value, $-tUCp-length + 1\n\t\t\t)\n\t\t});\n\t}\n\t//stylelint-enable\n\n\t@return if(\n\t\tmap.get($data, 'negative'),\n\t\tcalc($result * -1),\n\t\t$result\n\t);\n}\n\n@function convert-uv-color($value, $data: ()) {\n\t@if map.has-key(\n\t\tml.$utils-db, 'common', 'keywords', 'colors', $value\n\t) {\n\t\t@return map.get(\n\t\t\tml.$utils-db, 'common', 'keywords', 'colors', $value\n\t\t);\n\t}\n\n\t@if meta.type-of($value) == 'string' {\n\t\t$mod-color-list: ml.str-split($value, ml.$tUCla);\n\n\t\t@if list.length($mod-color-list) > 1 {\n\t\t\t//stylelint-disable\n\t\t\t$part-color: list.nth($mod-color-list, 1);\n\t\t\t$converted-part: ml.apply-value-converter(\n\t\t\t\t$part-color, map.remove($data, 'negative')...\n\t\t\t);\n\t\t\t$color: ml.str-hex2color($converted-part);\n\t\t\t//stylelint-enable\n\n\t\t\t@if $color or ml.is-css-var($converted-part) {\n\t\t\t\t$part-alpha: list.nth($mod-color-list, 2);\n\t\t\t\t$alpha: ml.apply-value-converter($part-alpha, 'O');\n\n\t\t\t\t@if ml.is-css-var($alpha) and not string.index($part-alpha, ml.$tUFv) {\n\t\t\t\t\t$alpha: string.insert($alpha, ', 1', -2);\n\t\t\t\t}\n\n\t\t\t\t@return rgba($color or $converted-part, $alpha);\n\t\t\t}\n\t\t}\n\t}\n\n\t@return $value;\n}\n\n@function -is-kw-with-num($value, $str-part, $str-length: 1) {\n\t@return (\n\t\tmeta.type-of($value) == 'string' and\n\t\tstring.slice($value, 1, $str-length) == $str-part and\n\t\tml.str-digit-index($value) == $str-length + 1\n\t);\n}\n\n@function convert-uv-grid-tracks($value, $data: ()) {\n\t@return if(\n\t\t-is-kw-with-num($value, 't'),\n\t\trepeat(\n\t\t\tstring.unquote(string.slice($value, 2)), minmax(0, 1fr)\n\t\t),\n\t\t$value\n\t);\n}\n\n@function convert-uv-grid-span($value, $data: ()) {\n\t@if not -is-kw-with-num($value, 's') {\n\t\t@return $value;\n\t}\n\n\t// string is not converted to the number because it is unlikely to use this value in the future\n\t$number: string.unquote(string.slice($value, 2));\n\n\t@return span $number / span $number;\n}\n","http://localhost/sass/tools/mixins/high/utils/_index.scss":"@use 'sass:meta';\n@use 'sass:list';\n@use 'sass:map';\n@use 'sass:math';\n@use 'sass:string';\n\n@forward 'mk-util';\n\n@use '../forward-tools' as ml;\n@use 'mk-util' as mu;\n\n// Utilities\n//\n// Mixins for creating utilities and working with them.\n//\n// Styleguide: sass-tools.mixins.utils\n\n// mk-utils-group\n//\n// Creates utilities group based on a map or a list with values. Works similarly that [mk-util](section-sass-tools.html#kssref-sass-tools-mixins-utils-mk_util) mixin. You can find existing groups [here](section-general_reference.html#kssref-general_reference-groups).\n//\n// ```scss\n//\t@include ml.mk-utils-group(\n//\t\t'Margins', (\n//\t\t\t'xs0': 100px,\n//\t\t\t150: null\n//\t));\n//\n//\t// CSS\n//\t.M-xs0 {\n//\t\tmargin: 100px;\n//\t}\n//\n//\t.M150 {\n//\t\tmargin: 150px;\n//\t}\n//\n//\t.Mt-xs0 {\n//\t\tmargin-top: 100px;\n//\t}\n//\n//\t// etc\n// ```\n//\n// $raw-name - `string` <div> name of the group. You can use [generation syntax](section-concepts.html#kssref-concepts-util-components-syntax) here </div>\n// $values - <div class=\"Mt3u\"> `list | map` </div> You can specify a map with utility values and CSS properties values. Or you can pass a list with only utility values. It will be converted to CSS values depends on conversion type of utility\n// $components = () - <div class=\"Mt3u\"> `map` </div> Contains utility [components](section-concepts.html#kssref-concepts-util-components) in longhand format\n//\n// Styleguide: sass-tools.mixins.utils.mk_utils_group\n\n@mixin mk-utils-group(\n\t$raw-name, $values, $components: (), $bound-components: true\n) {\n\t$group-data: ml.parse-util($raw-name);\n\t$name: map.get($group-data, 'value');\n\n\t@if not map.has-key(ml.$utils-groups-db, $name) {\n\t\t@error 'Group `#{$name}` not defined in registry';\n\t}\n\n\t$bound-comp-map: (\n\t\t$bound-components and\n\t\tmap.has-key(ml.$utils-groups-db, $name, 'components') and\n\t\tml.parse-util(\n\t\t\tmap.get(ml.$utils-groups-db, $name, 'components')\n\t\t)\n\t);\n\t$is-bound-comp: list.length($bound-comp-map) > 1;\n\n\t@if $is-bound-comp {\n\t\t$group-data: $bound-comp-map;\n\t} @else if list.length($components) > 0 {\n\t\t$group-data: $components;\n\t}\n\n\t$i: 1;\n\t$members: (\n\t\tmap.get(ml.$utils-groups-db, $name, 'members') or\n\t\tmap.get(ml.$utils-groups-db, $name)\n\t);\n\n\t@each $util in $members {\n\t\t@include mu.mk-util(\n\t\t\t$util,\n\t\t\t$values,\n\t\t\tif(\n\t\t\t\tnot $is-bound-comp and string.index($util, ml.$tUCm), (), $group-data\n\t\t\t),\n\t\t\t('groupItemIndex': $i, 'groupBoundComp': $is-bound-comp)\n\t\t);\n\n\t\t$i: $i + 1;\n\t}\n}\n\n// apply\n//\n// Applies a list of utilities in the form of styles to CSS rule:\n// ```scss\n//\t.card {\n//\t\tdisplay: block;\n//\n//\t\t@include ml.apply('P2u Fns1r xl_P5u');\n//\t}\n//\n//\t// CSS\n//\t.card {\n//\t\tdisplay: block;\n//\t\tpadding: 0.5rem;\n//\t\tfont-size: 1rem;\n//\t}\n//\n//\t@media (min-width: 1200px) {\n//\t\t.card {\n//\t\t\tpadding: 1.25rem;\n//\t\t}\n//\t}\n// ```\n//\n// If a mixin is called outside CSS rule, then creates utilities from the list. See examples [here](section-how_to.html#kssref-how_to-config).\n//\n// Apply has some restrictions. If you try to use a utility with `pre-state` in it without a clear indication that this is a state, you will get an error. This happens because the Parser cannot distinguish `pre-state` from the utility itself. To create such utilities, pass a list of utilities as a list of strings, separating the components of the utility by spaces, as well as in Generation Syntax. Next, pass `true` in the third argument:\n// ```scss\n//\t@include ml.apply(('.js:h:>* _D', 'Lnh2r!_af'), (), true);\n//\n//\t// CSS\n//\t.js:hover > * .\\.js\\:h\\:\\>\\*_D {\n//\t\tdisplay: block;\n//\t}\n//\n//\t.Lnh2r\\!_af::after {\n//\t\tline-height: 2rem !important;\n//\t}\n// ```\n//\n// $utils - `string | list` <div> string with space-separated utilities or a list of utils as strings </div>\n// $components = () - <div class=\"Mt3u\"> `map` </div> Contains utility [components](section-concepts.html#kssref-concepts-util-components) in longhand format\n// $ready-list = false - <div class=\"Mt3u\"> `boolean` </div> if `true` than you can pass any utilities as a list\n//\n// Styleguide: sass-tools.mixins.utils.apply\n\n@mixin apply($utils, $components: (), $ready-list: false) {\n\t$utils-list: if(\n\t\t$ready-list, $utils, ml.str-split($utils, ' ')\n\t);\n\t$util-options: ('components': null);\n\n\t@if & != null {\n\t\t$util-options: map.set($util-options, 'selector', &);\n\t}\n\n\t// TODO: optimize the applying several values of one utility\n\t@each $item in $utils-list {\n\t\t$util-data: ml.parse-util($item);\n\t\t$abbr-data: ml.parse-abbr(map.get($util-data, 'value'));\n\t\t$util-data: map.merge($util-data, $components);\n\t\t$keyword: ml.$kStOl;\n\t\t$pre-states: map.get($util-data, 'pre-states');\n\t\t$post-states: map.get($util-data, 'post-states');\n\n\t\t@if map.get($util-data, 'at-rules') {\n\t\t\t$keyword: ml.$kArSO;\n\t\t\t// It's a bit dangerous to use non-standard fields in map, but it is unlikely that a way to check keywords in the `mk-util` will change\n\t\t\t$util-data: map.set($util-data, 'applyArKw', ml.$kArOl);\n\t\t}\n\n\t\t@if $pre-states or $post-states {\n\t\t\t@if $pre-states and $post-states {\n\t\t\t\t$util-data: map.merge(\n\t\t\t\t\t$util-data,\n\t\t\t\t\t(\n\t\t\t\t\t\t'pre-states': '#{ml.$kStCb} ' + $pre-states,\n\t\t\t\t\t\t'post-states':'#{ml.$kStCb} ' + $post-states,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t$util-data: map.set($util-data, 'applyStKw', $keyword);\n\t\t}\n\n\t\t@include mu.mk-util(\n\t\t\tmap.get($abbr-data, 'name'),\n\t\t\tmap.get($abbr-data, 'value'),\n\t\t\tmap.remove($util-data, 'value'),\n\t\t\t$util-options\n\t\t);\n\t}\n}\n","http://localhost/sass/tools/mixins/high/utils/mk-util.scss":"@use 'sass:meta';\n@use 'sass:list';\n@use 'sass:map';\n@use 'sass:math';\n@use 'sass:string';\n@use 'sass:selector';\n\n@use '../forward-tools' as ml;\n\n// mk-util\n//\n// Creates utilities based on a map or a list with values. Simple examples you can see [here](section-how_to.html#kssref-how_to-mk_utils).\n//\n// Even if you started using a map, you can still use the conversion of values. To do this, specify `null` instead of CSS values. And if you want that CSS value corresponds to the value of the utility, use `false`:\n// ```scss\n//\t@include ml.mk-util(\n//\t\t'Mxw', (\n//\t\t500: false,\n//\t\t'sm0': 560px,\n//\t\t'n': null,\n//\t\t[5e, 7]: null,\n//\t));\n//\n//\t// CSS\n//\t.Mxw500 {\n//\t\tmax-width: 500;\n//\t}\n//\n//\t.Mxw-sm0 {\n//\t\tmax-width: 560px;\n//\t}\n//\n//\t.Mxw-n {\n//\t\tmax-width: none;\n//\t}\n//\n//\t.Mxw5e {\n//\t\tmax-width: 5em;\n//\t}\n//\n//\t// etc\n// ```\n// Do not forget that you can use Generation Syntax for any utility value. This is available, both in a map of values and in the list.\n// ```scss\n//\t@include ml.mk-util(\n//\t\t'Mxw', (\n//\t\t'sm0_ af bf': 560px,\n//\t));\n//\n//\t@include ml.mk-util(\n//\t\t'Mxw', (\n//\t\t':f _100_ +:h',\n//\t\t'@:pr _10p',\n//\t));\n// ```\n//\n// $raw-name - `string` <div> name of the utility. You can use [generation syntax](section-concepts.html#kssref-concepts-util-components-syntax) here </div>\n// $values - <div class=\"Mt3u\"> `list | map` </div> You can specify a map with utility values and CSS properties values. Or you can pass a list with only utility values. It will be converted to CSS values depends on conversion type of utility\n// $components = () - <div class=\"Mt3u\"> `map` </div> Contains utility [components](section-concepts.html#kssref-concepts-util-components) in longhand format\n// $options = () - <div class=\"Mt3u\"> `map` </div> Options of utilities, similarly to [those](section-settings.html#kssref-settings-utils-data-options) that are in the utility registry. Here you can change the options for a specific set of values without changing the main utility options. Also, you can create a new utility in-place, without registration ~~and SMS~~\n//\n// Styleguide: sass-tools.mixins.utils.mk_util\n\n@mixin mk-util($raw-name, $values, $components: (), $options: ()) {\n\t$util-data: ml.parse-util($raw-name);\n\t$util-name: map.get($util-data, 'value');\n\t$is-range: map.has-key($options, 'isRange');\n\n\t$main-options: if(\n\t\t$is-range,\n\t\t$options,\n\t\t-util-main-options($util-name, $options),\n\t);\n\n\t$props: map.get($main-options, 'properties');\n\t$custom-selector: map.get($main-options, 'selector');\n\t$bound-comp-str: map.get($main-options, 'components');\n\t$bound-components: $bound-comp-str and ml.parse-util($bound-comp-str);\n\t$is-bound-comp: list.length($bound-components) > 1;\n\t$range-generator: map.get(\n\t\tml.$utils-cfg,\n\t\t'range-generators',\n\t\t(\n\t\t\tmap.get($main-options, 'range-generator')\n\t\t\tor 'number'\n\t\t)\n\t);\n\n\t$class-name: if(\n\t\t$bound-components,\n\t\tmap.get($bound-components, 'value'),\n\t\t$util-name\n\t);\n\n\t@if not map.has-key(ml.$utils-db, 'utils', 'registry', $util-name) {\n\t\tml.$utils-db: map.set(\n\t\t\tml.$utils-db, 'utils', 'registry', $util-name, if($options, $options, $props)\n\t\t);\n\t}\n\n\t@if $is-bound-comp {\n\t\t$util-data: $bound-components;\n\t} @else if list.length($components) > 0 {\n\t\t$util-data: $components;\n\t}\n\n\t$is-values-map: meta.type-of($values) == 'map';\n\t$is-bound-comp: $is-bound-comp or map.get($main-options, 'groupBoundComp');\n\t$new-keywords: ();\n\t$i: 1;\n\n\t@each $key, $value in $values {\n\t\t$range-list: if($is-values-map, $key, list.nth($values, $i));\n\t\t$range-data: null;\n\n\t\t@if list.is-bracketed($range-list) {\n\t\t\t$range-data: meta.call($range-generator, $range-list, $util-name);\n\t\t} @else if meta.type-of($key) == 'string' and string.index($key, ml.$kUvKA) {\n\t\t\t$range-data: ml.expand-util-kw-alias($key, $util-name);\n\t\t}\n\n\t\t@if $range-data {\n\t\t\t@if not map.has-key($range-data, 'components') {\n\t\t\t\t$range-data: map.set($range-data, 'components', $util-data);\n\t\t\t}\n\n\t\t\t@include mk-util(\n\t\t\t\t$util-name,\n\t\t\t\t$options: map.set($main-options, 'isRange', true),\n\t\t\t\t$range-data...\n\t\t\t);\n\t\t} @else {\n\t\t\t$util-val-data: ml.parse-util($key);\n\t\t\t$util-parsed-val: map.get($util-val-data, 'value');\n\n\t\t\t@if $is-bound-comp or list.length($util-val-data) < 2 {\n\t\t\t\t$util-val-data: $util-data;\n\t\t\t}\n\n\t\t\t$at-rules: map.get($util-val-data, 'at-rules');\n\t\t\t$post-states: map.get($util-val-data, 'post-states');\n\t\t\t$pre-states: map.get($util-val-data, 'pre-states');\n\t\t\t$is-important: map.get($util-val-data, 'important');\n\t\t\t$css-values: $value;\n\n\t\t\t@if $css-values == null {\n\t\t\t\t$css-values: ml.convert-util-value($util-parsed-val, $util-name);\n\t\t\t} @else if $css-values == false {\n\t\t\t\t$css-values: $util-parsed-val;\n\t\t\t} @else if not $is-range {\n\t\t\t\t$new-keywords: map.set($new-keywords, $util-parsed-val + '', $value);\n\t\t\t}\n\n\t\t\t$separated-value: ml.util-separated-value($util-parsed-val);\n\t\t\t$this-util: (\n\t\t\t\t'name': $util-name,\n\t\t\t\t'value': $separated-value\n\t\t\t);\n\n\t\t\t@if $class-name == '' {\n\t\t\t\t$separated-value: $util-parsed-val;\n\t\t\t}\n\n\t\t\t@if $is-important {\n\t\t\t\t$separated-value: $separated-value + ml.$tUIm;\n\t\t\t}\n\n\t\t\t$selector: ml.str-escape(\n\t\t\t\tml.$class-prefix + $class-name + $separated-value\n\t\t\t);\n\n\t\t\t$val-feat-str: meta.inspect(\n\t\t\t\tmap.values(map.remove($util-val-data, 'value'))\n\t\t\t);\n\t\t\t$st-only: string.index($val-feat-str, ml.$kStOl);\n\t\t\t$ar-st-only: string.index($val-feat-str, ml.$kArSO);\n\t\t\t$ar-st: string.index($val-feat-str, ml.$kArSt);\n\t\t\t$args: (\n\t\t\t\t$props,\n\t\t\t\t$css-values,\n\t\t\t\t$is-important,\n\t\t\t\tmap.get($main-options, 'repeat-prop-values'),\n\t\t\t\tmap.get($main-options, 'preset-properties'),\n\t\t\t\t$util-name,\n\t\t\t\t$util-parsed-val,\n\t\t\t);\n\n\t\t\t@if not string.index($val-feat-str, ml.$kArOl) and not $ar-st-only {\n\t\t\t\t@include ml.mk-state(\n\t\t\t\t\t$post-states,\n\t\t\t\t\t$pre-states,\n\t\t\t\t\tnot $st-only,\n\t\t\t\t\t$selector,\n\t\t\t\t\t$class-name,\n\t\t\t\t\t$custom-selector,\n\t\t\t\t) {\n\t\t\t\t\t@include -generate-props($args...);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@if $at-rules {\n\t\t\t\t@include ml.mk-ar($at-rules, $this-util) using ($ar) {\n\t\t\t\t\t$util-selector: '.' + ml.str-escape($ar + ml.$tUCm) + $selector;\n\n\t\t\t\t\t@if not $ar-st-only {\n\t\t\t\t\t\t@at-root {\n\t\t\t\t\t\t\t#{ml.util-apply-selector($custom-selector, $util-selector)} {\n\t\t\t\t\t\t\t\t@include -generate-props($args...);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t@if $ar-st or $ar-st-only {\n\t\t\t\t\t\t@include ml.mk-state(\n\t\t\t\t\t\t\t$post-states,\n\t\t\t\t\t\t\t$pre-states,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t$util-selector,\n\t\t\t\t\t\t\t$class-name,\n\t\t\t\t\t\t\t$custom-selector,\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t@include -generate-props($args...);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$i: $i + 1;\n\t}\n\n\t@if list.length($new-keywords) > 0 {\n\t\t@include -save-new-keywords(\n\t\t\t$new-keywords, $util-name, $props, map.get($main-options, 'groupItemIndex')\n\t\t);\n\t}\n}\n\n@mixin -save-new-keywords($new-keywords, $util-name, $props, $group-item-index) {\n\t$conversion: (\n\t\tmap.get(ml.$utils-db, 'utils', 'registry', $util-name, 'conversion') or\n\t\t'default'\n\t);\n\t$converters-list: map.get(ml.$utils-cfg, 'conversion-types', $conversion);\n\n\t@if list.nth($converters-list, 1) != 'color' {\n\t\t$util-keywords: map.get(\n\t\t\tml.$utils-db, 'utils', 'registry', $util-name, 'keywords'\n\t\t);\n\n\t\t$util-map: (\n\t\t\t'properties': $props,\n\t\t);\n\n\t\t@if not list.index($converters-list, 'keyword') {\n\t\t\t$conversion: 'kw_' + $conversion;\n\t\t\t$util-map: map.set($util-map, 'conversion', $conversion);\n\n\t\t\t@if not map.has-key(ml.$utils-cfg, 'conversion-types', $conversion) {\n\t\t\t\t$converters-list: list.join('keyword', $converters-list);\n\t\t\t\tml.$utils-cfg: map.set(\n\t\t\t\t\tml.$utils-cfg,\n\t\t\t\t\t'conversion-types',\n\t\t\t\t\t$conversion,\n\t\t\t\t\t$converters-list\n\t\t\t\t);\n\t\t\t} @else {\n\t\t\t\t$converters-list: map.get(ml.$utils-cfg, 'conversion-types', $conversion);\n\t\t\t}\n\t\t}\n\n\t\t@if meta.type-of($util-keywords) == 'map' or not $util-keywords {\n\t\t\t$util-map: map.set($util-map, 'keywords', $new-keywords);\n\t\t} @else {\n\t\t\t$util-map: map.set($util-map, 'custom-keywords', $new-keywords);\n\t\t}\n\n\t\tml.$utils-db: map.deep-merge(\n\t\t\tml.$utils-db,\n\t\t\t('utils': ('registry': ($util-name: $util-map)))\n\t\t);\n\t} @else if not $group-item-index or $group-item-index < 2 {\n\t\tml.$utils-db: map.merge(\n\t\t\tml.$utils-db, 'common', 'keywords', 'colors', $new-keywords\n\t\t);\n\t}\n}\n\n@mixin -generate-props(\n\t$props, $values, $is-important, $repeat-values, $preset-props, $util, $util-value\n) {\n\t$i: if($repeat-values == null, 0, 1);\n\t$values-count: list.length($values);\n\t$important: (\n\t\t(ml.$utils-up-specificity == true) or $is-important\n\t) and string.unquote('!important');\n\n\t$css-values: if(\n\t\tlist.length($props) < 2 and $values-count > 1,\n\t\t($values,),\n\t\t$values\n\t);\n\n\t@if $preset-props {\n\t\t@each $key, $value in $preset-props {\n\t\t\t@if meta.type-of($value) == 'function' {\n\t\t\t\t$final-value: meta.call($value, $util, $util-value, $values, $important);\n\n\t\t\t\t// temporary fix, because Sass does not allow `null` value for hiding custom properties\n\t\t\t\t@if $final-value {\n\t\t\t\t\t#{$key}: $final-value;\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t#{$key}: $value $important;\n\t\t\t}\n\t\t}\n\t}\n\n\t@each $item in $props {\n\t\t@if $repeat-values == null {\n\t\t\t#{$item}: list.nth($css-values, ($i % $values-count) + 1) $important;\n\t\t} @else if $i <= $values-count {\n\t\t\t#{$item}: list.nth($css-values, $i) $important;\n\t\t}\n\n\t\t$i: $i + 1;\n\t}\n}\n\n@function -util-main-options($name, $options) {\n\t$prop: null;\n\t$result: ();\n\t$needed-options: (\n\t\t'repeat-prop-values', 'preset-properties',\n\t\t'selector', 'range-generator', 'components'\n\t);\n\n\t@each $item in $needed-options {\n\t\t$result: map.set(\n\t\t\t$result,\n\t\t\t$item,\n\t\t\tmap.get(ml.$utils-db, 'utils', 'registry', $name, $item),\n\t\t);\n\t}\n\n\t$prop: map.get($options, 'properties');\n\t$external-selector: map.get($options, 'selector');\n\n\t@if (\n\t\t$external-selector and\n\t\tmap.has-key(ml.$utils-db, 'utils', 'registry', $name, 'selector') and\n\t\tnot string.index(meta.inspect($external-selector), ml.$tSTu)\n\t) {\n\t\t$options: map.set(\n\t\t\t$options,\n\t\t\t'selector',\n\t\t\tselector.nest($external-selector, map.get($result, 'selector'))\n\t\t);\n\t}\n\n\t$result: map.merge($result, $options);\n\n\t@return map.set(\n\t\t$result, 'properties', $prop or ml.util-prop($name, 'utils', true)\n\t);\n}\n"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlut/core",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "Tailwind CSS alternative for custom websites and creative coding",
5
5
  "author": "mr150",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  }
33
33
  },
34
34
  "scripts": {
35
- "build": "rm -rf dist && tsc && cp src/sass dist/ -r"
35
+ "build": "rm -rf dist && ts-node --esm script/bundle-sass.ts && tsc && cp src/sass dist/ -r"
36
36
  },
37
37
  "files": [
38
38
  "_index.scss",
@@ -40,10 +40,7 @@
40
40
  "dist"
41
41
  ],
42
42
  "devDependencies": {
43
- "@octokit/plugin-retry": "^8.0.1",
44
- "@octokit/rest": "^22.0.0",
45
43
  "@types/node": "^20.10.5",
46
- "path-browserify-esm": "^1.0.6",
47
44
  "sass": "^1.93.0",
48
45
  "sass-embedded": "^1.93.0",
49
46
  "typescript": "^5.8.0"
@@ -1,17 +0,0 @@
1
- declare global {
2
- var mlut: {
3
- githubToken?: string;
4
- };
5
- }
6
- export declare class SassSourcesLoader {
7
- private readonly kit;
8
- private readonly owner;
9
- private readonly repo;
10
- private readonly unusedPath;
11
- private readonly dirs;
12
- readonly initPath = "packages/core/src/sass";
13
- loadDir(dirPath: string): Promise<string[]>;
14
- isDir(dirPath: string): boolean;
15
- loadFile(filePath: string): Promise<string>;
16
- }
17
- export declare const sassSourcesLoader: SassSourcesLoader;
@@ -1,58 +0,0 @@
1
- const retryPromise = import('@octokit/plugin-retry')
2
- .catch(() => import('https://esm.sh/@octokit/plugin-retry'))
3
- .then((r) => r.retry);
4
- const octokit = await import('@octokit/rest')
5
- .catch(() => import('https://esm.sh/@octokit/rest'))
6
- .then(async (r) => {
7
- const retry = await retryPromise;
8
- const ctr = r.Octokit.plugin(retry);
9
- return new ctr({
10
- auth: globalThis.mlut?.githubToken ?? process.env.GITHUB_TOKEN,
11
- });
12
- });
13
- export class SassSourcesLoader {
14
- kit = octokit;
15
- owner = 'mlutcss';
16
- repo = 'mlut';
17
- unusedPath = 'packages/core/src/sass/css/utils';
18
- dirs = new Set();
19
- initPath = 'packages/core/src/sass';
20
- async loadDir(dirPath) {
21
- if (dirPath.includes(this.unusedPath)) {
22
- return [];
23
- }
24
- return this.kit.repos.getContent({
25
- owner: this.owner,
26
- repo: this.repo,
27
- path: dirPath,
28
- }).then((r) => {
29
- if (!Array.isArray(r.data)) {
30
- return [];
31
- }
32
- const result = [];
33
- for (const item of r.data) {
34
- if (item.type === 'dir') {
35
- this.dirs.add(item.path);
36
- }
37
- result.push(item.name);
38
- }
39
- return result;
40
- });
41
- }
42
- isDir(dirPath) {
43
- return this.dirs.has(dirPath);
44
- }
45
- async loadFile(filePath) {
46
- return this.kit.repos.getContent({
47
- owner: this.owner,
48
- repo: this.repo,
49
- path: filePath,
50
- }).then((r) => {
51
- if (Array.isArray(r.data) || r.data.type !== 'file') {
52
- return '';
53
- }
54
- return globalThis.atob(r.data.content);
55
- });
56
- }
57
- }
58
- export const sassSourcesLoader = new SassSourcesLoader();