{"id":19475475,"url":"https://github.com/artdecocode/closure-stylesheets","last_synced_at":"2025-07-08T01:31:47.256Z","repository":{"id":57200651,"uuid":"206878437","full_name":"artdecocode/closure-stylesheets","owner":"artdecocode","description":"A Node API to Closure Stylesheets.","archived":false,"fork":false,"pushed_at":"2020-03-16T09:43:42.000Z","size":69,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-04T20:16:14.604Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.artd.eco","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/artdecocode.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-06T21:44:37.000Z","updated_at":"2020-03-16T09:43:44.000Z","dependencies_parsed_at":"2022-09-16T15:11:56.124Z","dependency_job_id":null,"html_url":"https://github.com/artdecocode/closure-stylesheets","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/artdecocode/closure-stylesheets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdecocode%2Fclosure-stylesheets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdecocode%2Fclosure-stylesheets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdecocode%2Fclosure-stylesheets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdecocode%2Fclosure-stylesheets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artdecocode","download_url":"https://codeload.github.com/artdecocode/closure-stylesheets/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdecocode%2Fclosure-stylesheets/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263837376,"owners_count":23517938,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T19:33:05.341Z","updated_at":"2025-07-08T01:31:47.242Z","avatar_url":"https://github.com/artdecocode.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# closure-stylesheets\n\n[![npm version](https://badge.fury.io/js/closure-stylesheets.svg)](https://www.npmjs.com/package/closure-stylesheets)\n\n`closure-stylesheets` is A Node API to Closure Stylesheets.\n\n```sh\nyarn add closure-stylesheets\n```\n\n## Table Of Contents\n\n- [Table Of Contents](#table-of-contents)\n- [API](#api)\n- [`async compileStylesheets(css, config, log=): ClosureReturn`](#async-compilestylesheetscss-stringarraystringconfig-closurestylesheetsconfiglog-function-closurereturn)\n  * [`ClosureStylesheetsConfig`](#type-closurestylesheetsconfig)\n  * [`ClosureReturn`](#type-closurereturn)\n- [`compileStylesheetsSync(css, config, log=): ClosureReturn`](#compilestylesheetssynccss-stringarraystringconfig-closurestylesheetsconfiglog-function-closurereturn)\n- [Copyright](#copyright)\n\n\u003cp align=\"center\"\u003e\u003ca href=\"#table-of-contents\"\u003e\n  \u003cimg src=\"/.documentary/section-breaks/0.svg?sanitize=true\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\n## API\n\nThe package is available by importing its default function:\n\n```js\nimport closureStylesheets, { closureStylesheetsSync } from 'closure-stylesheets'\n```\n\n\u003cp align=\"center\"\u003e\u003ca href=\"#table-of-contents\"\u003e\n  \u003cimg src=\"/.documentary/section-breaks/1.svg?sanitize=true\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\n## \u003ccode\u003easync \u003cins\u003ecompileStylesheets\u003c/ins\u003e(\u003c/code\u003e\u003csub\u003e\u003cbr/\u003e\u0026nbsp;\u0026nbsp;`css: (string|!Array\u003cstring\u003e),`\u003cbr/\u003e\u0026nbsp;\u0026nbsp;`config: !ClosureStylesheetsConfig,`\u003cbr/\u003e\u0026nbsp;\u0026nbsp;`log=: !Function,`\u003cbr/\u003e\u003c/sub\u003e\u003ccode\u003e): \u003ci\u003eClosureReturn\u003c/i\u003e\u003c/code\u003e\nCompiles stylesheets asynchronously.\n\n - \u003ckbd\u003e\u003cstrong\u003ecss*\u003c/strong\u003e\u003c/kbd\u003e \u003cem\u003e\u003ccode\u003e(string \\| !Array\u0026lt;string\u0026gt;)\u003c/code\u003e\u003c/em\u003e: The resolved path to the CSS file to compile.\n - \u003ckbd\u003e\u003cstrong\u003econfig*\u003c/strong\u003e\u003c/kbd\u003e \u003cem\u003e\u003ccode\u003e\u003ca href=\"#type-closurestylesheetsconfig\" title=\"Configuration options.\"\u003e!ClosureStylesheetsConfig\u003c/a\u003e\u003c/code\u003e\u003c/em\u003e: Additional configuration to transform into arguments to Java.\nRequires at list path to the JAR file.\n - \u003ckbd\u003elog\u003c/kbd\u003e \u003cem\u003e`!Function`\u003c/em\u003e (optional): The logging function.\n\n__\u003ca name=\"type-closurestylesheetsconfig\"\u003e`ClosureStylesheetsConfig`\u003c/a\u003e__: Configuration options.\n\u003ctable\u003e\n \u003cthead\u003e\u003ctr\u003e\n  \u003cth\u003eName\u003c/th\u003e\n  \u003cth\u003eType \u0026amp; Description\u003c/th\u003e\n  \u003cth\u003eDefault\u003c/th\u003e\n \u003c/tr\u003e\u003c/thead\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003e\u003cstrong\u003epath*\u003c/strong\u003e\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   The path to the closure JAR. You can use \u003ccode\u003eclosure-stylesheets-java\u003c/code\u003e package\n   to install it via Node.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eskipHTMLEscaping\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003eboolean\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   By default, the compiler will escape \u003ccode\u003e[\u0026lt;\u0026gt;\\\"\u0026']\u003c/code\u003e from output\n   to make it suitable for safe embedding in HTML tags and attributes.\n   When standalone CSS is generated, this is not necessary and can be skipped.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eexpandBrowserPrefix\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003eboolean\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Expand CSS rules to include vendor-prefixed declarations.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eoutputBrowserPrefix\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   The location of the file where to output the prefixed version of the CSS.\n   Works only when \u003ccode\u003eexpandBrowserPrefix\u003c/code\u003e is set.\n   The filename should end with \u003ccode\u003e.css\u003c/code\u003e and the compiler will also create a \u003ccode\u003e.json\u003c/code\u003e file\n   at the same location with the map to check for support.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eprefixes\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003e!Array\u0026lt;string\u0026gt;\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   CSS rule prefixes (\u003ccode\u003eposition:sticky\u003c/code\u003e, \u003ccode\u003e-ms-hyphens\u003c/code\u003e.) to include in the main output CSS rather than browser prefix file.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eprettyPrint\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003eboolean\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Whether to format the output with newlines and indents so that it is more readable.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003esourceMap\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Provides a mapping from the generated output to their original source code location.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003erootSelector\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   The string to prepend to selectors of each ruleset.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eallowUnrecognizedProperties\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003eboolean\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Allow unrecognized properties.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003epreserveImportantComments\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003eboolean\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Preserve important comments from sources into minified output css. Important comments are marked with \u003ccode\u003e/＊! ＊/\u003c/code\u003e, \u003ccode\u003e＠license\u003c/code\u003e, or \u003ccode\u003e＠preserve\u003c/code\u003e.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003ecssRenamingPrefix\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Add a prefix to all renamed css class names.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003ewhitelist\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003e!Array\u0026lt;string\u0026gt;\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Excluded classes from renaming.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eoutputRenamingMap\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   How to format the output from the CSS class renaming.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003einputRenamingMap\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   The input filename for the CSS class renaming. The file must provide a map of class names that will be used for renaming. If a class name is not found in file, a new name will be generated.\n   \u003ccode\u003e--input-renaming-map\u003c/code\u003e\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003erename\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   How CSS classes should be renamed. Defaults to NONE.\n   Can be \u003ccode\u003eCLOSURE\u003c/code\u003e, \u003ccode\u003eSIMPLE\u003c/code\u003e, \u003ccode\u003eDEBUG\u003c/code\u003e.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eexcludedClassesFromRenaming\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003e!Array\u0026lt;string\u0026gt;\u003c/em\u003e\u003c/td\u003e\n  \u003ctd rowSpan=\"3\"\u003e-\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Pass the compiler a list of CSS class names that shouldn't be renamed.\n  \u003c/td\u003e\n \u003c/tr\u003e\n\u003c/table\u003e\n\n\n__\u003ca name=\"type-closurereturn\"\u003e`ClosureReturn`\u003c/a\u003e__: Returns stylesheet and rename map if successful, or parsed info, stderr and status otherwise.\n\u003ctable\u003e\n \u003cthead\u003e\u003ctr\u003e\n  \u003cth\u003eName\u003c/th\u003e\n  \u003cth\u003eType \u0026amp; Description\u003c/th\u003e\n \u003c/tr\u003e\u003c/thead\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003eblock\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Parsed error information with CLI colour.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003estderr\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Full stderr output in case of error.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003estatus\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003enumber\u003c/em\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   Exit error code.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003erenameMap\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003eObject\u003c/em\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   If renaming was on, this is the generated map parsed into an object.\n  \u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd rowSpan=\"3\" align=\"center\"\u003estylesheet\u003c/td\u003e\n  \u003ctd\u003e\u003cem\u003estring\u003c/em\u003e\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\u003c/tr\u003e\n \u003ctr\u003e\n  \u003ctd\u003e\n   The actual compiled stylesheet in case of success.\n  \u003c/td\u003e\n \u003c/tr\u003e\n\u003c/table\u003e\n\n_For example, we can compile this simple stylesheet:_\n\n```css\n.MyElement {\n  color: green;\n}\n```\n\n```js\nimport compileStylesheets from 'closure-stylesheets'\nimport path from 'closure-stylesheets-java'\n\n(async () =\u003e {\n  const res = await compileStylesheets('example/style.css', {\n    path,\n    rootSelector: '.Example',\n  }, console.error)\n  console.log(res)\n})()\n```\n```js\n{\n  renameMap: { MyElement: 'a' },\n  stylesheet: '.Example .a{color:green}'\n}\n```\n\nLogging of the executed command will be done into `console.error` since it was passed as the third argument.\n\n```\njava -jar /Users/zavr/node_modules/closure-stylesheets-java/target/closure-stylesheets-1.12.1-SNAPSHOT-jar-with-dependencies.jar \"example/style.css\" --root-selector .Example --output-renaming-map temp-rename-map.json --output-renaming-map-format JSON --rename SIMPLE\n```\n\nThe sync version with the same API is also available.\n\n\u003cp align=\"center\"\u003e\u003ca href=\"#table-of-contents\"\u003e\n  \u003cimg src=\"/.documentary/section-breaks/2.svg?sanitize=true\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\n## \u003ccode\u003e\u003cins\u003ecompileStylesheetsSync\u003c/ins\u003e(\u003c/code\u003e\u003csub\u003e\u003cbr/\u003e\u0026nbsp;\u0026nbsp;`css: (string|!Array\u003cstring\u003e),`\u003cbr/\u003e\u0026nbsp;\u0026nbsp;`config: !ClosureStylesheetsConfig,`\u003cbr/\u003e\u0026nbsp;\u0026nbsp;`log=: !Function,`\u003cbr/\u003e\u003c/sub\u003e\u003ccode\u003e): \u003ci\u003eClosureReturn\u003c/i\u003e\u003c/code\u003e\nCompiles stylesheets in a sync manner.\n\n - \u003ckbd\u003e\u003cstrong\u003ecss*\u003c/strong\u003e\u003c/kbd\u003e \u003cem\u003e\u003ccode\u003e(string \\| !Array\u0026lt;string\u0026gt;)\u003c/code\u003e\u003c/em\u003e: The resolved path to the CSS file to compile.\n - \u003ckbd\u003e\u003cstrong\u003econfig*\u003c/strong\u003e\u003c/kbd\u003e \u003cem\u003e\u003ccode\u003e\u003ca href=\"#type-closurestylesheetsconfig\" title=\"Configuration options.\"\u003e!ClosureStylesheetsConfig\u003c/a\u003e\u003c/code\u003e\u003c/em\u003e: Additional configuration to transform into arguments to Java.\nRequires at list path to the JAR file.\n - \u003ckbd\u003elog\u003c/kbd\u003e \u003cem\u003e`!Function`\u003c/em\u003e (optional): The logging function.\n\n```js\nimport { compileStylesheetsSync } from 'closure-stylesheets'\nimport path from 'closure-stylesheets-java'\n\nconst resSync = compileStylesheetsSync('example/style.css', {\n  path,\n  rootSelector: '.HelloWorld',\n  whitelist: ['MyElement'],\n}, console.error)\nconsole.log(resSync)\n```\n```js\n{ renameMap: {}, stylesheet: '.HelloWorld .MyElement{color:green}' }\n```\n\n\u003cp align=\"center\"\u003e\u003ca href=\"#table-of-contents\"\u003e\n  \u003cimg src=\"/.documentary/section-breaks/3.svg?sanitize=true\"\u003e\n\u003c/a\u003e\u003c/p\u003e\n\n## Copyright\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003e\n      \u003ca href=\"https://www.artd.eco\"\u003e\n        \u003cimg width=\"100\" src=\"https://raw.githubusercontent.com/wrote/wrote/master/images/artdeco.png\"\n          alt=\"Art Deco\"\u003e\n      \u003c/a\u003e\n    \u003c/th\u003e\n    \u003cth\u003e© \u003ca href=\"https://www.artd.eco\"\u003eArt Deco™\u003c/a\u003e   2020\u003c/th\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"#table-of-contents\"\u003e\n  \u003cimg src=\"/.documentary/section-breaks/-1.svg?sanitize=true\"\u003e\n\u003c/a\u003e\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartdecocode%2Fclosure-stylesheets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartdecocode%2Fclosure-stylesheets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartdecocode%2Fclosure-stylesheets/lists"}