From b70724e6201f053ee197244c852b2271c277485a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=B8=9B=E8=BE=B0?= <10956606+zou-bochen@user.noreply.gitee.com> Date: Sun, 13 Nov 2022 05:11:07 +0000 Subject: [PATCH 1/7] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邹帛辰 <10956606+zou-bochen@user.noreply.gitee.com> --- develop_doc.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 develop_doc.md diff --git a/develop_doc.md b/develop_doc.md new file mode 100644 index 0000000..58dc384 --- /dev/null +++ b/develop_doc.md @@ -0,0 +1,34 @@ +# PHP助手开发文档**(务必仔细阅读)** # +## 开发工具 ## +### 定义积木 ### +#### 使用Blockly Developer Tools #### +#### 链接:[http://blockly.daobanmojie.com/demos/blockfactory/](http://blockly.daobanmojie.com/demos/blockfactory/) #### +### 代码编辑器 ### +建议使用Web IDE或Visual Studio Code(需安装Git)。 +## 文件介绍 ## +### kzhzbcphp.php ### +用来更新ide.html。当修改了积木,工作箱,代码转换器时,就需要运行kzhzbcphp.php来更新ide.html +### index.php ### +官网 +### index.html ### +使用文档 +### blockly ### +包含了原生blockly的代码 +### blockly/media ### +存放blockly工作区媒体文件 +### blockly/ini ### +定制blockly的地方。里面有三个文件夹,分别是workspace,block和site +### blockly/ini/workspace ### +存放工作区定义(workspace.xml workspace.js),工作箱定义(toolbox.xml),块库(library.xml) +### blockly/ini/block ### +存放积木定义(get.js)和积木转换器(get.js.js) +### blockly/ini/site ### +存放网站的一些图片 +### blockly/colored_egg ### +存放彩蛋 +## 注意事项 ## +1. 提交时**一定要提交到Dev分支!一定要提交到Dev分支! 一定要提交到Dev分支!** +2. 如果提示存在**冲突**,请在讨论群中说明情况,说清文件名。**千万不要擅自建立分支!** +## 文档编写人员 ## +### CodeKpy ### +### ZouBochen ### \ No newline at end of file -- Gitee From aae7c2b66e34fe19c78a72615058cbcbaddc8705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=B8=9B=E8=BE=B0?= <10956606+zou-bochen@user.noreply.gitee.com> Date: Sun, 13 Nov 2022 05:30:51 +0000 Subject: [PATCH 2/7] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/.keep diff --git a/doc/.keep b/doc/.keep new file mode 100644 index 0000000..e69de29 -- Gitee From e725689bc485dc037dedff28145221875901b741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=B8=9B=E8=BE=B0?= <10956606+zou-bochen@user.noreply.gitee.com> Date: Sun, 13 Nov 2022 05:32:22 +0000 Subject: [PATCH 3/7] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邹帛辰 <10956606+zou-bochen@user.noreply.gitee.com> --- doc/develop_doc.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 doc/develop_doc.md diff --git a/doc/develop_doc.md b/doc/develop_doc.md new file mode 100644 index 0000000..22f02ae --- /dev/null +++ b/doc/develop_doc.md @@ -0,0 +1,35 @@ +# PHP助手开发文档 # +开发人员务必仔细阅读 +## 开发工具 ## +### 定义积木 ### +#### 使用Blockly Developer Tools #### +#### 链接:[http://blockly.daobanmojie.com/demos/blockfactory/](http://blockly.daobanmojie.com/demos/blockfactory/) #### +### 代码编辑器 ### +建议使用Web IDE或Visual Studio Code(需安装Git)。 +## 文件介绍 ## +### kzhzbcphp.php ### +用来更新ide.html。当修改了积木,工作箱,代码转换器时,就需要运行kzhzbcphp.php来更新ide.html +### index.php ### +官网 +### index.html ### +使用文档 +### blockly ### +包含了原生blockly的代码 +### blockly/media ### +存放blockly工作区媒体文件 +### blockly/ini ### +定制blockly的地方。里面有三个文件夹,分别是workspace,block和site +### blockly/ini/workspace ### +存放工作区定义(workspace.xml workspace.js),工作箱定义(toolbox.xml),块库(library.xml) +### blockly/ini/block ### +存放积木定义(get.js)和积木转换器(get.js.js) +### blockly/ini/site ### +存放网站的一些图片 +### blockly/colored_egg ### +存放彩蛋 +## 注意事项 ## +1. 提交时**一定要提交到Dev分支!一定要提交到Dev分支! 一定要提交到Dev分支!** +2. 如果提示存在**冲突**,请在讨论群中说明情况,说清文件名。**千万不要擅自建立分支!** +## 文档编写人员 ## +### CodeKpy ### +### ZouBochen ### \ No newline at end of file -- Gitee From eb18bee6bc6ae8baac983fb147853e9a1116799d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=B8=9B=E8=BE=B0?= <10956606+zou-bochen@user.noreply.gitee.com> Date: Sun, 13 Nov 2022 05:32:29 +0000 Subject: [PATCH 4/7] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20doc/?= =?UTF-8?q?.keep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/.keep diff --git a/doc/.keep b/doc/.keep deleted file mode 100644 index e69de29..0000000 -- Gitee From c89afd98c8e891f9ee8f1847ecffdc6b87507427 Mon Sep 17 00:00:00 2001 From: Wangs_official <10999119+wangs_official@user.noreply.gitee.com> Date: Sun, 13 Nov 2022 13:44:47 +0000 Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E5=8F=8A=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Wangs_official <10999119+wangs_official@user.noreply.gitee.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d9f0e46..51d30a5 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,9 @@ index.php 把积木定义,工作区,工作箱的定义代码写入index.html 运营于[PHP助手官网](http://www.codekpy.site/php-helper-master/index.php), 借鉴[微信](https://weixin.qq.com/)的设计风格。 -在不违反法律的前提下,该源代码**(限于学习、公益用途)** , +在不违反法律的前提下,该源代码 **(限于学习、公益用途)** , 在使用中,**不强制要求注明制作方**。 产生的法律问题,PHP助手贡献人员**不负连带责任**。 -![图片](.\blockly\ini\site\ico.jpg) +![图片](blockly/ini/site/ico.jpg) 特此声明 \ No newline at end of file -- Gitee From 8a99065537a830e30bd2ed80a7043cc71588dd3c Mon Sep 17 00:00:00 2001 From: Wangs_official <35361565@qq.com> Date: Sun, 13 Nov 2022 22:19:06 +0800 Subject: [PATCH 6/7] =?UTF-8?q?css=E5=A4=A7=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 冲突很好解决,至少吧 --- css/pico.css | 2796 +++++++++++++++++++++++++++++++++++++++++++++++++ css/style.css | 135 +++ ide.html | 2245 ++++++++++++--------------------------- js/main.js | 880 ++++++++++++++++ kzhzbcphp.php | 681 ++++++++++++ 5 files changed, 5141 insertions(+), 1596 deletions(-) create mode 100644 css/pico.css create mode 100644 css/style.css create mode 100644 js/main.js diff --git a/css/pico.css b/css/pico.css new file mode 100644 index 0000000..21e81a3 --- /dev/null +++ b/css/pico.css @@ -0,0 +1,2796 @@ +@charset "UTF-8"; + +/*! + * Pico.css v1.5.6 (https://picocss.com) + * Copyright 2019-2022 - Licensed under MIT + */ +:root { + --font-family: system-ui, -apple-system, "Segoe UI", "Roboto", "Ubuntu", "Cantarell", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --line-height: 1.5; + --font-weight: 400; + --font-size: 16px; + --border-radius: 0.25rem; + --border-width: 1px; + --outline-width: 3px; + --spacing: 1rem; + --typography-spacing-vertical: 1.5rem; + --block-spacing-vertical: calc(var(--spacing) * 2); + --block-spacing-horizontal: var(--spacing); + --grid-spacing-vertical: 0; + --grid-spacing-horizontal: var(--spacing); + --form-element-spacing-vertical: 0.75rem; + --form-element-spacing-horizontal: 1rem; + --nav-element-spacing-vertical: 1rem; + --nav-element-spacing-horizontal: 0.5rem; + --nav-link-spacing-vertical: 0.5rem; + --nav-link-spacing-horizontal: 0.5rem; + --form-label-font-weight: var(--font-weight); + --transition: 0.2s ease-in-out; + --modal-overlay-backdrop-filter: blur(0.25rem) +} + +@media (min-width:576px) { + :root { + --font-size: 17px + } +} + +@media (min-width:768px) { + :root { + --font-size: 18px + } +} + +@media (min-width:992px) { + :root { + --font-size: 19px + } +} + +@media (min-width:1200px) { + :root { + --font-size: 20px + } +} + +@media (min-width:576px) { + + body>footer, + body>header, + body>main, + section { + --block-spacing-vertical: calc(var(--spacing) * 2.5) + } +} + +@media (min-width:768px) { + + body>footer, + body>header, + body>main, + section { + --block-spacing-vertical: calc(var(--spacing) * 3) + } +} + +@media (min-width:992px) { + + body>footer, + body>header, + body>main, + section { + --block-spacing-vertical: calc(var(--spacing) * 3.5) + } +} + +@media (min-width:1200px) { + + body>footer, + body>header, + body>main, + section { + --block-spacing-vertical: calc(var(--spacing) * 4) + } +} + +@media (min-width:576px) { + article { + --block-spacing-horizontal: calc(var(--spacing) * 1.25) + } +} + +@media (min-width:768px) { + article { + --block-spacing-horizontal: calc(var(--spacing) * 1.5) + } +} + +@media (min-width:992px) { + article { + --block-spacing-horizontal: calc(var(--spacing) * 1.75) + } +} + +@media (min-width:1200px) { + article { + --block-spacing-horizontal: calc(var(--spacing) * 2) + } +} + +dialog>article { + --block-spacing-vertical: calc(var(--spacing) * 2); + --block-spacing-horizontal: var(--spacing) +} + +@media (min-width:576px) { + dialog>article { + --block-spacing-vertical: calc(var(--spacing) * 2.5); + --block-spacing-horizontal: calc(var(--spacing) * 1.25) + } +} + +@media (min-width:768px) { + dialog>article { + --block-spacing-vertical: calc(var(--spacing) * 3); + --block-spacing-horizontal: calc(var(--spacing) * 1.5) + } +} + +a { + --text-decoration: none +} + +a.contrast, +a.secondary { + --text-decoration: underline +} + +small { + --font-size: 0.875em +} + +h1, +h2, +h3, +h4, +h5, +h6 { + --font-weight: 700 +} + +h1 { + --font-size: 2rem; + --typography-spacing-vertical: 3rem +} + +h2 { + --font-size: 1.75rem; + --typography-spacing-vertical: 2.625rem +} + +h3 { + --font-size: 1.5rem; + --typography-spacing-vertical: 2.25rem +} + +h4 { + --font-size: 1.25rem; + --typography-spacing-vertical: 1.874rem +} + +h5 { + --font-size: 1.125rem; + --typography-spacing-vertical: 1.6875rem +} + +[type=checkbox], +[type=radio] { + --border-width: 2px +} + +[type=checkbox][role=switch] { + --border-width: 3px +} + +tfoot td, +tfoot th, +thead td, +thead th { + --border-width: 3px +} + +:not(thead, tfoot)>*>td { + --font-size: 0.875em +} + +code, +kbd, +pre, +samp { + --font-family: "Menlo", "Consolas", "Roboto Mono", "Ubuntu Monospace", "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" +} + +kbd { + --font-weight: bolder +} + +:root:not([data-theme=dark]), +[data-theme=light] { + --background-color: #fff; + --color: hsl(205deg, 20%, 32%); + --h1-color: hsl(205deg, 30%, 15%); + --h2-color: #24333e; + --h3-color: hsl(205deg, 25%, 23%); + --h4-color: #374956; + --h5-color: hsl(205deg, 20%, 32%); + --h6-color: #4d606d; + --muted-color: hsl(205deg, 10%, 50%); + --muted-border-color: hsl(205deg, 20%, 94%); + --primary: hsl(195deg, 85%, 41%); + --primary-hover: hsl(195deg, 90%, 32%); + --primary-focus: rgba(16, 149, 193, 0.125); + --primary-inverse: #fff; + --secondary: hsl(205deg, 15%, 41%); + --secondary-hover: hsl(205deg, 20%, 32%); + --secondary-focus: rgba(89, 107, 120, 0.125); + --secondary-inverse: #fff; + --contrast: hsl(205deg, 30%, 15%); + --contrast-hover: #000; + --contrast-focus: rgba(89, 107, 120, 0.125); + --contrast-inverse: #fff; + --mark-background-color: #fff2ca; + --mark-color: #543a26; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: transparent; + --form-element-border-color: hsl(205deg, 14%, 68%); + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: transparent; + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205deg, 18%, 86%); + --form-element-disabled-border-color: hsl(205deg, 14%, 68%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #c62828; + --form-element-invalid-active-border-color: #d32f2f; + --form-element-invalid-focus-color: rgba(211, 47, 47, 0.125); + --form-element-valid-border-color: #388e3c; + --form-element-valid-active-border-color: #43a047; + --form-element-valid-focus-color: rgba(67, 160, 71, 0.125); + --switch-background-color: hsl(205deg, 16%, 77%); + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: hsl(205deg, 18%, 86%); + --range-active-border-color: hsl(205deg, 16%, 77%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: #f6f8f9; + --code-background-color: hsl(205deg, 20%, 94%); + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330deg, 40%, 50%); + --code-property-color: hsl(185deg, 40%, 40%); + --code-value-color: hsl(40deg, 20%, 50%); + --code-comment-color: hsl(205deg, 14%, 68%); + --accordion-border-color: var(--muted-border-color); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: var(--background-color); + --card-border-color: var(--muted-border-color); + --card-box-shadow: 0.0145rem 0.029rem 0.174rem rgba(27, 40, 50, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(27, 40, 50, 0.024), 0.0625rem 0.125rem 0.75rem rgba(27, 40, 50, 0.03), 0.1125rem 0.225rem 1.35rem rgba(27, 40, 50, 0.036), 0.2085rem 0.417rem 2.502rem rgba(27, 40, 50, 0.04302), 0.5rem 1rem 6rem rgba(27, 40, 50, 0.06), 0 0 0 0.0625rem rgba(27, 40, 50, 0.015); + --card-sectionning-background-color: #fbfbfc; + --dropdown-background-color: #fbfbfc; + --dropdown-border-color: #e1e6eb; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: hsl(205deg, 20%, 94%); + --modal-overlay-background-color: rgba(213, 220, 226, 0.7); + --progress-background-color: hsl(205deg, 18%, 86%); + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + color-scheme: light +} + +@media only screen and (prefers-color-scheme:dark) { + :root:not([data-theme=light]) { + --background-color: #11191f; + --color: hsl(205deg, 16%, 77%); + --h1-color: hsl(205deg, 20%, 94%); + --h2-color: #e1e6eb; + --h3-color: hsl(205deg, 18%, 86%); + --h4-color: #c8d1d8; + --h5-color: hsl(205deg, 16%, 77%); + --h6-color: #afbbc4; + --muted-color: hsl(205deg, 10%, 50%); + --muted-border-color: #1f2d38; + --primary: hsl(195deg, 85%, 41%); + --primary-hover: hsl(195deg, 80%, 50%); + --primary-focus: rgba(16, 149, 193, 0.25); + --primary-inverse: #fff; + --secondary: hsl(205deg, 15%, 41%); + --secondary-hover: hsl(205deg, 10%, 50%); + --secondary-focus: rgba(115, 130, 140, 0.25); + --secondary-inverse: #fff; + --contrast: hsl(205deg, 20%, 94%); + --contrast-hover: #fff; + --contrast-focus: rgba(115, 130, 140, 0.25); + --contrast-inverse: #000; + --mark-background-color: #d1c284; + --mark-color: #11191f; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: #11191f; + --form-element-border-color: #374956; + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: var(--form-element-background-color); + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205deg, 25%, 23%); + --form-element-disabled-border-color: hsl(205deg, 20%, 32%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #b71c1c; + --form-element-invalid-active-border-color: #c62828; + --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); + --form-element-valid-border-color: #2e7d32; + --form-element-valid-active-border-color: #388e3c; + --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); + --switch-background-color: #374956; + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: #24333e; + --range-active-border-color: hsl(205deg, 25%, 23%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); + --code-background-color: #18232c; + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330deg, 30%, 50%); + --code-property-color: hsl(185deg, 30%, 50%); + --code-value-color: hsl(40deg, 10%, 50%); + --code-comment-color: #4d606d; + --accordion-border-color: var(--muted-border-color); + --accordion-active-summary-color: var(--primary); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: #141e26; + --card-border-color: var(--card-background-color); + --card-box-shadow: 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); + --card-sectionning-background-color: #18232c; + --dropdown-background-color: hsl(205deg, 30%, 15%); + --dropdown-border-color: #24333e; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); + --modal-overlay-background-color: rgba(36, 51, 62, 0.8); + --progress-background-color: #24333e; + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + color-scheme: dark + } +} + +[data-theme=dark] { + --background-color: #11191f; + --color: hsl(205deg, 16%, 77%); + --h1-color: hsl(205deg, 20%, 94%); + --h2-color: #e1e6eb; + --h3-color: hsl(205deg, 18%, 86%); + --h4-color: #c8d1d8; + --h5-color: hsl(205deg, 16%, 77%); + --h6-color: #afbbc4; + --muted-color: hsl(205deg, 10%, 50%); + --muted-border-color: #1f2d38; + --primary: hsl(195deg, 85%, 41%); + --primary-hover: hsl(195deg, 80%, 50%); + --primary-focus: rgba(16, 149, 193, 0.25); + --primary-inverse: #fff; + --secondary: hsl(205deg, 15%, 41%); + --secondary-hover: hsl(205deg, 10%, 50%); + --secondary-focus: rgba(115, 130, 140, 0.25); + --secondary-inverse: #fff; + --contrast: hsl(205deg, 20%, 94%); + --contrast-hover: #fff; + --contrast-focus: rgba(115, 130, 140, 0.25); + --contrast-inverse: #000; + --mark-background-color: #d1c284; + --mark-color: #11191f; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: #11191f; + --form-element-border-color: #374956; + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: var(--form-element-background-color); + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205deg, 25%, 23%); + --form-element-disabled-border-color: hsl(205deg, 20%, 32%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #b71c1c; + --form-element-invalid-active-border-color: #c62828; + --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); + --form-element-valid-border-color: #2e7d32; + --form-element-valid-active-border-color: #388e3c; + --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); + --switch-background-color: #374956; + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: #24333e; + --range-active-border-color: hsl(205deg, 25%, 23%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); + --code-background-color: #18232c; + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330deg, 30%, 50%); + --code-property-color: hsl(185deg, 30%, 50%); + --code-value-color: hsl(40deg, 10%, 50%); + --code-comment-color: #4d606d; + --accordion-border-color: var(--muted-border-color); + --accordion-active-summary-color: var(--primary); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: #141e26; + --card-border-color: var(--card-background-color); + --card-box-shadow: 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); + --card-sectionning-background-color: #18232c; + --dropdown-background-color: hsl(205deg, 30%, 15%); + --dropdown-border-color: #24333e; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); + --modal-overlay-background-color: rgba(36, 51, 62, 0.8); + --progress-background-color: #24333e; + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + color-scheme: dark +} + +[type=checkbox], +[type=radio], +[type=range], +progress { + accent-color: var(--primary) +} + +*, +::after, +::before { + box-sizing: border-box; + background-repeat: no-repeat +} + +::after, +::before { + text-decoration: inherit; + vertical-align: inherit +} + +:where(:root) { + -webkit-tap-highlight-color: transparent; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + text-size-adjust: 100%; + background-color: var(--background-color); + color: var(--color); + font-weight: var(--font-weight); + font-size: var(--font-size); + line-height: var(--line-height); + font-family: var(--font-family); + text-rendering: optimizeLegibility; + overflow-wrap: break-word; + cursor: default; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4 +} + +main { + display: block +} + +body { + width: 100%; + margin: 0 +} + +body>footer, +body>header, +body>main { + width: 100%; + margin-right: auto; + margin-left: auto; + padding: var(--block-spacing-vertical) 0 +} + +.container, +.container-fluid { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: var(--spacing); + padding-left: var(--spacing) +} + +@media (min-width:576px) { + .container { + max-width: 510px; + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:768px) { + .container { + max-width: 700px + } +} + +@media (min-width:992px) { + .container { + max-width: 920px + } +} + +@media (min-width:1200px) { + .container { + max-width: 1130px + } +} + +section { + margin-bottom: var(--block-spacing-vertical) +} + +.grid { + grid-column-gap: var(--grid-spacing-horizontal); + grid-row-gap: var(--grid-spacing-vertical); + display: grid; + grid-template-columns: 1fr; + margin: 0 +} + +@media (min-width:992px) { + .grid { + grid-template-columns: repeat(auto-fit, minmax(0%, 1fr)) + } +} + +.grid>* { + min-width: 0 +} + +figure { + display: block; + margin: 0; + padding: 0; + overflow-x: auto +} + +figure figcaption { + padding: calc(var(--spacing) * .5) 0; + color: var(--muted-color) +} + +b, +strong { + font-weight: bolder +} + +sub, +sup { + position: relative; + font-size: .75em; + line-height: 0; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +address, +blockquote, +dl, +figure, +form, +ol, +p, +pre, +table, +ul { + margin-top: 0; + margin-bottom: var(--typography-spacing-vertical); + color: var(--color); + font-style: normal; + font-weight: var(--font-weight); + font-size: var(--font-size) +} + +[role=link], +a { + --color: var(--primary); + --background-color: transparent; + outline: 0; + background-color: var(--background-color); + color: var(--color); + -webkit-text-decoration: var(--text-decoration); + text-decoration: var(--text-decoration); + transition: background-color var(--transition), color var(--transition), box-shadow var(--transition), -webkit-text-decoration var(--transition); + transition: background-color var(--transition), color var(--transition), text-decoration var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), color var(--transition), text-decoration var(--transition), box-shadow var(--transition), -webkit-text-decoration var(--transition) +} + +[role=link]:is([aria-current], :hover, :active, :focus), +a:is([aria-current], :hover, :active, :focus) { + --color: var(--primary-hover); + --text-decoration: underline +} + +[role=link]:focus, +a:focus { + --background-color: var(--primary-focus) +} + +[role=link].secondary, +a.secondary { + --color: var(--secondary) +} + +[role=link].secondary:is([aria-current], :hover, :active, :focus), +a.secondary:is([aria-current], :hover, :active, :focus) { + --color: var(--secondary-hover) +} + +[role=link].secondary:focus, +a.secondary:focus { + --background-color: var(--secondary-focus) +} + +[role=link].contrast, +a.contrast { + --color: var(--contrast) +} + +[role=link].contrast:is([aria-current], :hover, :active, :focus), +a.contrast:is([aria-current], :hover, :active, :focus) { + --color: var(--contrast-hover) +} + +[role=link].contrast:focus, +a.contrast:focus { + --background-color: var(--contrast-focus) +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: var(--typography-spacing-vertical); + color: var(--color); + font-weight: var(--font-weight); + font-size: var(--font-size); + font-family: var(--font-family) +} + +h1 { + --color: var(--h1-color) +} + +h2 { + --color: var(--h2-color) +} + +h3 { + --color: var(--h3-color) +} + +h4 { + --color: var(--h4-color) +} + +h5 { + --color: var(--h5-color) +} + +h6 { + --color: var(--h6-color) +} + +:where(address, blockquote, dl, figure, form, ol, p, pre, table, ul)~:is(h1, h2, h3, h4, h5, h6) { + margin-top: var(--typography-spacing-vertical) +} + +.headings, +hgroup { + margin-bottom: var(--typography-spacing-vertical) +} + +.headings>*, +hgroup>* { + margin-bottom: 0 +} + +.headings>:last-child, +hgroup>:last-child { + --color: var(--muted-color); + --font-weight: unset; + font-size: 1rem; + font-family: unset +} + +p { + margin-bottom: var(--typography-spacing-vertical) +} + +small { + font-size: var(--font-size) +} + +:where(dl, ol, ul) { + padding-right: 0; + padding-left: var(--spacing); + -webkit-padding-start: var(--spacing); + padding-inline-start: var(--spacing); + -webkit-padding-end: 0; + padding-inline-end: 0 +} + +:where(dl, ol, ul) li { + margin-bottom: calc(var(--typography-spacing-vertical) * .25) +} + +:where(dl, ol, ul) :is(dl, ol, ul) { + margin: 0; + margin-top: calc(var(--typography-spacing-vertical) * .25) +} + +ul li { + list-style: square +} + +mark { + padding: .125rem .25rem; + background-color: var(--mark-background-color); + color: var(--mark-color); + vertical-align: baseline +} + +blockquote { + display: block; + margin: var(--typography-spacing-vertical) 0; + padding: var(--spacing); + border-right: none; + border-left: .25rem solid var(--blockquote-border-color); + -webkit-border-start: 0.25rem solid var(--blockquote-border-color); + border-inline-start: 0.25rem solid var(--blockquote-border-color); + -webkit-border-end: none; + border-inline-end: none +} + +blockquote footer { + margin-top: calc(var(--typography-spacing-vertical) * .5); + color: var(--blockquote-footer-color) +} + +abbr[title] { + border-bottom: 1px dotted; + text-decoration: none; + cursor: help +} + +ins { + color: var(--ins-color); + text-decoration: none +} + +del { + color: var(--del-color) +} + +::-moz-selection { + background-color: var(--primary-focus) +} + +::selection { + background-color: var(--primary-focus) +} + +:where(audio, canvas, iframe, img, svg, video) { + vertical-align: middle +} + +audio, +video { + display: inline-block +} + +audio:not([controls]) { + display: none; + height: 0 +} + +:where(iframe) { + border-style: none +} + +img { + max-width: 100%; + height: auto; + border-style: none +} + +:where(svg:not([fill])) { + fill: currentColor +} + +svg:not(:root) { + overflow: hidden +} + +button { + margin: 0; + overflow: visible; + font-family: inherit; + text-transform: none +} + +[type=button], +[type=reset], +[type=submit], +button { + -webkit-appearance: button +} + +button { + display: block; + width: 100%; + margin-bottom: var(--spacing) +} + +[role=button] { + display: inline-block; + text-decoration: none +} + +[role=button], +button, +input[type=button], +input[type=reset], +input[type=submit] { + --background-color: var(--primary); + --border-color: var(--primary); + --color: var(--primary-inverse); + --box-shadow: var(--button-box-shadow, 0 0 0 rgba(0, 0, 0, 0)); + padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[role=button]:is([aria-current], :hover, :active, :focus), +button:is([aria-current], :hover, :active, :focus), +input[type=button]:is([aria-current], :hover, :active, :focus), +input[type=reset]:is([aria-current], :hover, :active, :focus), +input[type=submit]:is([aria-current], :hover, :active, :focus) { + --background-color: var(--primary-hover); + --border-color: var(--primary-hover); + --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)); + --color: var(--primary-inverse) +} + +[role=button]:focus, +button:focus, +input[type=button]:focus, +input[type=reset]:focus, +input[type=submit]:focus { + --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--primary-focus) +} + +:is(button, input[type=submit], input[type=button], [role=button]).secondary, +input[type=reset] { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + cursor: pointer +} + +:is(button, input[type=submit], input[type=button], [role=button]).secondary:is([aria-current], :hover, :active, :focus), +input[type=reset]:is([aria-current], :hover, :active, :focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover); + --color: var(--secondary-inverse) +} + +:is(button, input[type=submit], input[type=button], [role=button]).secondary:focus, +input[type=reset]:focus { + --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--secondary-focus) +} + +:is(button, input[type=submit], input[type=button], [role=button]).contrast { + --background-color: var(--contrast); + --border-color: var(--contrast); + --color: var(--contrast-inverse) +} + +:is(button, input[type=submit], input[type=button], [role=button]).contrast:is([aria-current], :hover, :active, :focus) { + --background-color: var(--contrast-hover); + --border-color: var(--contrast-hover); + --color: var(--contrast-inverse) +} + +:is(button, input[type=submit], input[type=button], [role=button]).contrast:focus { + --box-shadow: var(--button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)), 0 0 0 var(--outline-width) var(--contrast-focus) +} + +:is(button, input[type=submit], input[type=button], [role=button]).outline, +input[type=reset].outline { + --background-color: transparent; + --color: var(--primary) +} + +:is(button, input[type=submit], input[type=button], [role=button]).outline:is([aria-current], :hover, :active, :focus), +input[type=reset].outline:is([aria-current], :hover, :active, :focus) { + --background-color: transparent; + --color: var(--primary-hover) +} + +:is(button, input[type=submit], input[type=button], [role=button]).outline.secondary, +input[type=reset].outline { + --color: var(--secondary) +} + +:is(button, input[type=submit], input[type=button], [role=button]).outline.secondary:is([aria-current], :hover, :active, :focus), +input[type=reset].outline:is([aria-current], :hover, :active, :focus) { + --color: var(--secondary-hover) +} + +:is(button, input[type=submit], input[type=button], [role=button]).outline.contrast { + --color: var(--contrast) +} + +:is(button, input[type=submit], input[type=button], [role=button]).outline.contrast:is([aria-current], :hover, :active, :focus) { + --color: var(--contrast-hover) +} + +:where(button, [type=submit], [type=button], [type=reset], [role=button])[disabled], +:where(fieldset[disabled]) :is(button, [type=submit], [type=button], [type=reset], [role=button]), +a[role=button]:not([href]) { + opacity: .5; + pointer-events: none +} + +input, +optgroup, +select, +textarea { + margin: 0; + font-size: 1rem; + line-height: var(--line-height); + font-family: inherit; + letter-spacing: inherit +} + +input { + overflow: visible +} + +select { + text-transform: none +} + +legend { + max-width: 100%; + padding: 0; + color: inherit; + white-space: normal +} + +textarea { + overflow: auto +} + +[type=checkbox], +[type=radio] { + padding: 0 +} + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +::-moz-focus-inner { + padding: 0; + border-style: none +} + +:-moz-focusring { + outline: 0 +} + +:-moz-ui-invalid { + box-shadow: none +} + +::-ms-expand { + display: none +} + +[type=file], +[type=range] { + padding: 0; + border-width: 0 +} + +input:not([type=checkbox], [type=radio], [type=range]) { + height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2) +} + +fieldset { + margin: 0; + margin-bottom: var(--spacing); + padding: 0; + border: 0 +} + +fieldset legend, +label { + display: block; + margin-bottom: calc(var(--spacing) * .25); + font-weight: var(--form-label-font-weight, var(--font-weight)) +} + +input:not([type=checkbox], [type=radio]), +select, +textarea { + width: 100% +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file]), +select, +textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal) +} + +input, +select, +textarea { + --background-color: var(--form-element-background-color); + --border-color: var(--form-element-border-color); + --color: var(--form-element-color); + --box-shadow: none; + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +:where(select, textarea):is(:active, :focus), +input:not([type=submit], [type=button], [type=reset], [type=checkbox], [type=radio], [readonly]):is(:active, :focus) { + --background-color: var(--form-element-active-background-color) +} + +:where(select, textarea):is(:active, :focus), +input:not([type=submit], [type=button], [type=reset], [role=switch], [readonly]):is(:active, :focus) { + --border-color: var(--form-element-active-border-color) +} + +input:not([type=submit], [type=button], [type=reset], [type=range], [type=file], [readonly]):focus, +select:focus, +textarea:focus { + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color) +} + +:where(fieldset[disabled]) :is(input:not([type=submit], [type=button], [type=reset]), select, textarea), +input:not([type=submit], [type=button], [type=reset])[disabled], +select[disabled], +textarea[disabled] { + --background-color: var(--form-element-disabled-background-color); + --border-color: var(--form-element-disabled-border-color); + opacity: var(--form-element-disabled-opacity); + pointer-events: none +} + +:where(input, select, textarea):not([type=checkbox], [type=radio], [type=date], [type=datetime-local], [type=month], [type=time], [type=week])[aria-invalid] { + padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem) !important; + padding-left: var(--form-element-spacing-horizontal); + -webkit-padding-start: var(--form-element-spacing-horizontal) !important; + padding-inline-start: var(--form-element-spacing-horizontal) !important; + -webkit-padding-end: calc(var(--form-element-spacing-horizontal) + 1.5rem) !important; + padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem) !important; + background-position: center right .75rem; + background-size: 1rem auto; + background-repeat: no-repeat +} + +:where(input, select, textarea):not([type=checkbox], [type=radio], [type=date], [type=datetime-local], [type=month], [type=time], [type=week])[aria-invalid=false] { + background-image: var(--icon-valid) +} + +:where(input, select, textarea):not([type=checkbox], [type=radio], [type=date], [type=datetime-local], [type=month], [type=time], [type=week])[aria-invalid=true] { + background-image: var(--icon-invalid) +} + +:where(input, select, textarea)[aria-invalid=false] { + --border-color: var(--form-element-valid-border-color) +} + +:where(input, select, textarea)[aria-invalid=false]:is(:active, :focus) { + --border-color: var(--form-element-valid-active-border-color) !important; + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color) !important +} + +:where(input, select, textarea)[aria-invalid=true] { + --border-color: var(--form-element-invalid-border-color) +} + +:where(input, select, textarea)[aria-invalid=true]:is(:active, :focus) { + --border-color: var(--form-element-invalid-active-border-color) !important; + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color) !important +} + +[dir=rtl] :where(input, select, textarea):not([type=checkbox], [type=radio]):is([aria-invalid], [aria-invalid=true], [aria-invalid=false]) { + background-position: center left .75rem +} + +input::-webkit-input-placeholder, +input::placeholder, +select:invalid, +textarea::-webkit-input-placeholder, +textarea::placeholder { + color: var(--form-element-placeholder-color); + opacity: 1 +} + +input:not([type=checkbox], [type=radio]), +select, +textarea { + margin-bottom: var(--spacing) +} + +select::-ms-expand { + border: 0; + background-color: transparent +} + +select:not([multiple], [size]) { + padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem); + padding-left: var(--form-element-spacing-horizontal); + -webkit-padding-start: var(--form-element-spacing-horizontal); + padding-inline-start: var(--form-element-spacing-horizontal); + -webkit-padding-end: calc(var(--form-element-spacing-horizontal) + 1.5rem); + padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem); + background-image: var(--icon-chevron); + background-position: center right .75rem; + background-size: 1rem auto; + background-repeat: no-repeat +} + +[dir=rtl] select:not([multiple], [size]) { + background-position: center left .75rem +} + +:where(input, select, textarea)+small { + display: block; + width: 100%; + margin-top: calc(var(--spacing) * -.75); + margin-bottom: var(--spacing); + color: var(--muted-color) +} + +label>:where(input, select, textarea) { + margin-top: calc(var(--spacing) * .25) +} + +[type=checkbox], +[type=radio] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 1.25em; + height: 1.25em; + margin-top: -.125em; + margin-right: .375em; + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: .375em; + margin-inline-end: .375em; + border-width: var(--border-width); + font-size: inherit; + vertical-align: middle; + cursor: pointer +} + +[type=checkbox]::-ms-check, +[type=radio]::-ms-check { + display: none +} + +[type=checkbox]:checked, +[type=checkbox]:checked:active, +[type=checkbox]:checked:focus, +[type=radio]:checked, +[type=radio]:checked:active, +[type=radio]:checked:focus { + --background-color: var(--primary); + --border-color: var(--primary); + background-image: var(--icon-checkbox); + background-position: center; + background-size: .75em auto; + background-repeat: no-repeat +} + +[type=checkbox]~label, +[type=radio]~label { + display: inline-block; + margin-right: .375em; + margin-bottom: 0; + cursor: pointer +} + +[type=checkbox]:indeterminate { + --background-color: var(--primary); + --border-color: var(--primary); + background-image: var(--icon-minus); + background-position: center; + background-size: .75em auto; + background-repeat: no-repeat +} + +[type=radio] { + border-radius: 50% +} + +[type=radio]:checked, +[type=radio]:checked:active, +[type=radio]:checked:focus { + --background-color: var(--primary-inverse); + border-width: .35em; + background-image: none +} + +[type=checkbox][role=switch] { + --background-color: var(--switch-background-color); + --border-color: var(--switch-background-color); + --color: var(--switch-color); + width: 2.25em; + height: 1.25em; + border: var(--border-width) solid var(--border-color); + border-radius: 1.25em; + background-color: var(--background-color); + line-height: 1.25em +} + +[type=checkbox][role=switch]:focus { + --background-color: var(--switch-background-color); + --border-color: var(--switch-background-color) +} + +[type=checkbox][role=switch]:checked { + --background-color: var(--switch-checked-background-color); + --border-color: var(--switch-checked-background-color) +} + +[type=checkbox][role=switch]:before { + display: block; + width: calc(1.25em - (var(--border-width) * 2)); + height: 100%; + border-radius: 50%; + background-color: var(--color); + content: ""; + transition: margin .1s ease-in-out +} + +[type=checkbox][role=switch]:checked { + background-image: none +} + +[type=checkbox][role=switch]:checked::before { + margin-left: calc(1.125em - var(--border-width)); + -webkit-margin-start: calc(1.125em - var(--border-width)); + margin-inline-start: calc(1.125em - var(--border-width)) +} + +[type=checkbox]:checked[aria-invalid=false], +[type=checkbox][aria-invalid=false], +[type=checkbox][role=switch]:checked[aria-invalid=false], +[type=checkbox][role=switch][aria-invalid=false], +[type=radio]:checked[aria-invalid=false], +[type=radio][aria-invalid=false] { + --border-color: var(--form-element-valid-border-color) +} + +[type=checkbox]:checked[aria-invalid=true], +[type=checkbox][aria-invalid=true], +[type=checkbox][role=switch]:checked[aria-invalid=true], +[type=checkbox][role=switch][aria-invalid=true], +[type=radio]:checked[aria-invalid=true], +[type=radio][aria-invalid=true] { + --border-color: var(--form-element-invalid-border-color) +} + +[type=color]::-webkit-color-swatch-wrapper { + padding: 0 +} + +[type=color]::-moz-focus-inner { + padding: 0 +} + +[type=color]::-webkit-color-swatch { + border: 0; + border-radius: calc(var(--border-radius) * .5) +} + +[type=color]::-moz-color-swatch { + border: 0; + border-radius: calc(var(--border-radius) * .5) +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file]):is([type=date], [type=datetime-local], [type=month], [type=time], [type=week]) { + --icon-position: 0.75rem; + --icon-width: 1rem; + padding-right: calc(var(--icon-width) + var(--icon-position)); + background-image: var(--icon-date); + background-position: center right var(--icon-position); + background-size: var(--icon-width) auto; + background-repeat: no-repeat +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file])[type=time] { + background-image: var(--icon-time) +} + +[type=date]::-webkit-calendar-picker-indicator, +[type=datetime-local]::-webkit-calendar-picker-indicator, +[type=month]::-webkit-calendar-picker-indicator, +[type=time]::-webkit-calendar-picker-indicator, +[type=week]::-webkit-calendar-picker-indicator { + width: var(--icon-width); + margin-right: calc(var(--icon-width) * -1); + margin-left: var(--icon-position); + opacity: 0 +} + +[dir=rtl] :is([type=date], [type=datetime-local], [type=month], [type=time], [type=week]) { + text-align: right +} + +[type=file] { + --color: var(--muted-color); + padding: calc(var(--form-element-spacing-vertical) * .5) 0; + border: 0; + border-radius: 0; + background: 0 0 +} + +[type=file]::file-selector-button { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing)/ 2); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing)/ 2); + margin-inline-end: calc(var(--spacing)/ 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::file-selector-button:is(:hover, :active, :focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=file]::-webkit-file-upload-button { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing)/ 2); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing)/ 2); + margin-inline-end: calc(var(--spacing)/ 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + -webkit-transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::-webkit-file-upload-button:is(:hover, :active, :focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=file]::-ms-browse { + --background-color: var(--secondary); + --border-color: var(--secondary); + --color: var(--secondary-inverse); + margin-right: calc(var(--spacing)/ 2); + margin-left: 0; + margin-inline-start: 0; + margin-inline-end: calc(var(--spacing)/ 2); + padding: calc(var(--form-element-spacing-vertical) * .5) calc(var(--form-element-spacing-horizontal) * .5); + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: 0; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + font-size: 1rem; + line-height: var(--line-height); + text-align: center; + cursor: pointer; + -ms-transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +[type=file]::-ms-browse:is(:hover, :active, :focus) { + --background-color: var(--secondary-hover); + --border-color: var(--secondary-hover) +} + +[type=range] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 100%; + height: 1.25rem; + background: 0 0 +} + +[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: .25rem; + border-radius: var(--border-radius); + background-color: var(--range-border-color); + -webkit-transition: background-color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), box-shadow var(--transition) +} + +[type=range]::-moz-range-track { + width: 100%; + height: .25rem; + border-radius: var(--border-radius); + background-color: var(--range-border-color); + -moz-transition: background-color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), box-shadow var(--transition) +} + +[type=range]::-ms-track { + width: 100%; + height: .25rem; + border-radius: var(--border-radius); + background-color: var(--range-border-color); + -ms-transition: background-color var(--transition), box-shadow var(--transition); + transition: background-color var(--transition), box-shadow var(--transition) +} + +[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + width: 1.25rem; + height: 1.25rem; + margin-top: -.5rem; + border: 2px solid var(--range-thumb-border-color); + border-radius: 50%; + background-color: var(--range-thumb-color); + cursor: pointer; + -webkit-transition: background-color var(--transition), transform var(--transition); + transition: background-color var(--transition), transform var(--transition) +} + +[type=range]::-moz-range-thumb { + -webkit-appearance: none; + width: 1.25rem; + height: 1.25rem; + margin-top: -.5rem; + border: 2px solid var(--range-thumb-border-color); + border-radius: 50%; + background-color: var(--range-thumb-color); + cursor: pointer; + -moz-transition: background-color var(--transition), transform var(--transition); + transition: background-color var(--transition), transform var(--transition) +} + +[type=range]::-ms-thumb { + -webkit-appearance: none; + width: 1.25rem; + height: 1.25rem; + margin-top: -.5rem; + border: 2px solid var(--range-thumb-border-color); + border-radius: 50%; + background-color: var(--range-thumb-color); + cursor: pointer; + -ms-transition: background-color var(--transition), transform var(--transition); + transition: background-color var(--transition), transform var(--transition) +} + +[type=range]:focus, +[type=range]:hover { + --range-border-color: var(--range-active-border-color); + --range-thumb-color: var(--range-thumb-hover-color) +} + +[type=range]:active { + --range-thumb-color: var(--range-thumb-active-color) +} + +[type=range]:active::-webkit-slider-thumb { + transform: scale(1.25) +} + +[type=range]:active::-moz-range-thumb { + transform: scale(1.25) +} + +[type=range]:active::-ms-thumb { + transform: scale(1.25) +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file])[type=search] { + -webkit-padding-start: calc(var(--form-element-spacing-horizontal) + 1.75rem); + padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem); + border-radius: 5rem; + background-image: var(--icon-search); + background-position: center left 1.125rem; + background-size: 1rem auto; + background-repeat: no-repeat +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file])[type=search][aria-invalid] { + -webkit-padding-start: calc(var(--form-element-spacing-horizontal) + 1.75rem) !important; + padding-inline-start: calc(var(--form-element-spacing-horizontal) + 1.75rem) !important; + background-position: center left 1.125rem, center right .75rem +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file])[type=search][aria-invalid=false] { + background-image: var(--icon-search), var(--icon-valid) +} + +input:not([type=checkbox], [type=radio], [type=range], [type=file])[type=search][aria-invalid=true] { + background-image: var(--icon-search), var(--icon-invalid) +} + +[type=search]::-webkit-search-cancel-button { + -webkit-appearance: none; + display: none +} + +[dir=rtl] :where(input):not([type=checkbox], [type=radio], [type=range], [type=file])[type=search] { + background-position: center right 1.125rem +} + +[dir=rtl] :where(input):not([type=checkbox], [type=radio], [type=range], [type=file])[type=search][aria-invalid] { + background-position: center right 1.125rem, center left .75rem +} + +:where(table) { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + text-indent: 0 +} + +td, +th { + padding: calc(var(--spacing)/ 2) var(--spacing); + border-bottom: var(--border-width) solid var(--table-border-color); + color: var(--color); + font-weight: var(--font-weight); + font-size: var(--font-size); + text-align: left; + text-align: start +} + +tfoot td, +tfoot th { + border-top: var(--border-width) solid var(--table-border-color); + border-bottom: 0 +} + +table[role=grid] tbody tr:nth-child(odd) { + background-color: var(--table-row-stripped-background-color) +} + +code, +kbd, +pre, +samp { + font-size: .875em; + font-family: var(--font-family) +} + +pre { + -ms-overflow-style: scrollbar; + overflow: auto +} + +code, +kbd, +pre { + border-radius: var(--border-radius); + background: var(--code-background-color); + color: var(--code-color); + font-weight: var(--font-weight); + line-height: initial +} + +code, +kbd { + display: inline-block; + padding: .375rem .5rem +} + +pre { + display: block; + margin-bottom: var(--spacing); + overflow-x: auto +} + +pre>code { + display: block; + padding: var(--spacing); + background: 0 0; + font-size: 14px; + line-height: var(--line-height) +} + +code b { + color: var(--code-tag-color); + font-weight: var(--font-weight) +} + +code i { + color: var(--code-property-color); + font-style: normal +} + +code u { + color: var(--code-value-color); + text-decoration: none +} + +code em { + color: var(--code-comment-color); + font-style: normal +} + +kbd { + background-color: var(--code-kbd-background-color); + color: var(--code-kbd-color); + vertical-align: baseline +} + +hr { + height: 0; + border: 0; + border-top: 1px solid var(--muted-border-color); + color: inherit +} + +[hidden], +template { + display: none !important +} + +canvas { + display: inline-block +} + +details { + display: block; + margin-bottom: var(--spacing); + padding-bottom: var(--spacing); + border-bottom: var(--border-width) solid var(--accordion-border-color) +} + +details summary { + line-height: 1rem; + list-style-type: none; + cursor: pointer; + transition: color var(--transition) +} + +details summary:not([role]) { + color: var(--accordion-close-summary-color) +} + +details summary::-webkit-details-marker { + display: none +} + +details summary::marker { + display: none +} + +details summary::-moz-list-bullet { + list-style-type: none +} + +details summary::after { + display: block; + width: 1rem; + height: 1rem; + -webkit-margin-start: calc(var(--spacing, 1rem) * 0.5); + margin-inline-start: calc(var(--spacing, 1rem) * .5); + float: right; + transform: rotate(-90deg); + background-image: var(--icon-chevron); + background-position: right center; + background-size: 1rem auto; + background-repeat: no-repeat; + content: ""; + transition: transform var(--transition) +} + +details summary:focus { + outline: 0 +} + +details summary:focus:not([role=button]) { + color: var(--accordion-active-summary-color) +} + +details summary[role=button] { + width: 100%; + text-align: left +} + +details summary[role=button]::after { + height: calc(1rem * var(--line-height, 1.5)); + background-image: var(--icon-chevron-button) +} + +details summary[role=button]:not(.outline).contrast::after { + background-image: var(--icon-chevron-button-inverse) +} + +details[open]>summary { + margin-bottom: calc(var(--spacing)) +} + +details[open]>summary:not([role]):not(:focus) { + color: var(--accordion-open-summary-color) +} + +details[open]>summary::after { + transform: rotate(0) +} + +[dir=rtl] details summary { + text-align: right +} + +[dir=rtl] details summary::after { + float: left; + background-position: left center +} + +article { + margin: var(--block-spacing-vertical) 0; + padding: var(--block-spacing-vertical) var(--block-spacing-horizontal); + border-radius: var(--border-radius); + background: var(--card-background-color); + box-shadow: var(--card-box-shadow) +} + +article>footer, +article>header { + margin-right: calc(var(--block-spacing-horizontal) * -1); + margin-left: calc(var(--block-spacing-horizontal) * -1); + padding: calc(var(--block-spacing-vertical) * .66) var(--block-spacing-horizontal); + background-color: var(--card-sectionning-background-color) +} + +article>header { + margin-top: calc(var(--block-spacing-vertical) * -1); + margin-bottom: var(--block-spacing-vertical); + border-bottom: var(--border-width) solid var(--card-border-color); + border-top-right-radius: var(--border-radius); + border-top-left-radius: var(--border-radius) +} + +article>footer { + margin-top: var(--block-spacing-vertical); + margin-bottom: calc(var(--block-spacing-vertical) * -1); + border-top: var(--border-width) solid var(--card-border-color); + border-bottom-right-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius) +} + +:root { + --scrollbar-width: 0px +} + +dialog { + display: flex; + z-index: 999; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + align-items: center; + justify-content: center; + width: inherit; + min-width: 100%; + height: inherit; + min-height: 100%; + padding: var(--spacing); + border: 0; + -webkit-backdrop-filter: var(--modal-overlay-backdrop-filter); + backdrop-filter: var(--modal-overlay-backdrop-filter); + background-color: var(--modal-overlay-background-color); + color: var(--color) +} + +dialog article { + max-height: calc(100vh - var(--spacing) * 2); + overflow: auto +} + +@media (min-width:576px) { + dialog article { + max-width: 510px + } +} + +@media (min-width:768px) { + dialog article { + max-width: 700px + } +} + +dialog article>footer, +dialog article>header { + padding: calc(var(--block-spacing-vertical) * .5) var(--block-spacing-horizontal) +} + +dialog article>header .close { + margin: 0; + margin-left: var(--spacing); + float: right +} + +dialog article>footer { + text-align: right +} + +dialog article>footer [role=button] { + margin-bottom: 0 +} + +dialog article>footer [role=button]:not(:first-of-type) { + margin-left: calc(var(--spacing) * .5) +} + +dialog article p:last-of-type { + margin: 0 +} + +dialog article .close { + display: block; + width: 1rem; + height: 1rem; + margin-top: calc(var(--block-spacing-vertical) * -.5); + margin-bottom: var(--typography-spacing-vertical); + margin-left: auto; + background-image: var(--icon-close); + background-position: center; + background-size: auto 1rem; + background-repeat: no-repeat; + opacity: .5; + transition: opacity var(--transition) +} + +dialog article .close:is([aria-current], :hover, :active, :focus) { + opacity: 1 +} + +dialog:not([open]), +dialog[open=false] { + display: none +} + +.modal-is-open { + padding-right: var(--scrollbar-width, 0); + overflow: hidden; + pointer-events: none +} + +.modal-is-open dialog { + pointer-events: auto +} + +:where(.modal-is-opening, .modal-is-closing) dialog, +:where(.modal-is-opening, .modal-is-closing) dialog>article { + animation-duration: .2s; + animation-timing-function: ease-in-out; + animation-fill-mode: both +} + +:where(.modal-is-opening, .modal-is-closing) dialog { + animation-duration: .8s; + animation-name: modal-overlay +} + +:where(.modal-is-opening, .modal-is-closing) dialog>article { + animation-delay: .2s; + animation-name: modal +} + +.modal-is-closing dialog, +.modal-is-closing dialog>article { + animation-delay: 0s; + animation-direction: reverse +} + +@keyframes modal-overlay { + from { + -webkit-backdrop-filter: none; + backdrop-filter: none; + background-color: transparent + } +} + +@keyframes modal { + from { + transform: translateY(-100%); + opacity: 0 + } +} + +:where(nav li)::before { + float: left; + content: "​" +} + +nav, +nav ul { + display: flex +} + +nav { + justify-content: space-between +} + +nav ol, +nav ul { + align-items: center; + margin-bottom: 0; + padding: 0; + list-style: none +} + +nav ol:first-of-type, +nav ul:first-of-type { + margin-left: calc(var(--nav-element-spacing-horizontal) * -1) +} + +nav ol:last-of-type, +nav ul:last-of-type { + margin-right: calc(var(--nav-element-spacing-horizontal) * -1) +} + +nav li { + display: inline-block; + margin: 0; + padding: var(--nav-element-spacing-vertical) var(--nav-element-spacing-horizontal) +} + +nav li>* { + --spacing: 0 +} + +nav :where(a, [role=link]) { + display: inline-block; + margin: calc(var(--nav-link-spacing-vertical) * -1) calc(var(--nav-link-spacing-horizontal) * -1); + padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal); + border-radius: var(--border-radius); + text-decoration: none +} + +nav :where(a, [role=link]):is([aria-current], :hover, :active, :focus) { + text-decoration: none +} + +nav[aria-label=breadcrumb] { + align-items: center; + justify-content: start +} + +nav[aria-label=breadcrumb] ul li:not(:first-child) { + -webkit-margin-start: var(--nav-link-spacing-horizontal); + margin-inline-start: var(--nav-link-spacing-horizontal) +} + +nav[aria-label=breadcrumb] ul li:not(:last-child) ::after { + position: absolute; + width: calc(var(--nav-link-spacing-horizontal) * 2); + -webkit-margin-start: calc(var(--nav-link-spacing-horizontal)/ 2); + margin-inline-start: calc(var(--nav-link-spacing-horizontal)/ 2); + content: "/"; + color: var(--muted-color); + text-align: center +} + +nav[aria-label=breadcrumb] a[aria-current] { + background-color: transparent; + color: inherit; + text-decoration: none; + pointer-events: none +} + +nav [role=button] { + margin-right: inherit; + margin-left: inherit; + padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal) +} + +aside li, +aside nav, +aside ol, +aside ul { + display: block +} + +aside li { + padding: calc(var(--nav-element-spacing-vertical) * .5) var(--nav-element-spacing-horizontal) +} + +aside li a { + display: block +} + +aside li [role=button] { + margin: inherit +} + +[dir=rtl] nav[aria-label=breadcrumb] ul li:not(:last-child) ::after { + content: "\\" +} + +progress { + display: inline-block; + vertical-align: baseline +} + +progress { + -webkit-appearance: none; + -moz-appearance: none; + display: inline-block; + appearance: none; + width: 100%; + height: .5rem; + margin-bottom: calc(var(--spacing) * .5); + overflow: hidden; + border: 0; + border-radius: var(--border-radius); + background-color: var(--progress-background-color); + color: var(--progress-color) +} + +progress::-webkit-progress-bar { + border-radius: var(--border-radius); + background: 0 0 +} + +progress[value]::-webkit-progress-value { + background-color: var(--progress-color) +} + +progress::-moz-progress-bar { + background-color: var(--progress-color) +} + +@media (prefers-reduced-motion:no-preference) { + progress:indeterminate { + background: var(--progress-background-color) linear-gradient(to right, var(--progress-color) 30%, var(--progress-background-color) 30%) top left/150% 150% no-repeat; + animation: progress-indeterminate 1s linear infinite + } + + progress:indeterminate[value]::-webkit-progress-value { + background-color: transparent + } + + progress:indeterminate::-moz-progress-bar { + background-color: transparent + } +} + +@media (prefers-reduced-motion:no-preference) { + [dir=rtl] progress:indeterminate { + animation-direction: reverse + } +} + +@keyframes progress-indeterminate { + 0% { + background-position: 200% 0 + } + + 100% { + background-position: -200% 0 + } +} + +details[role=list], +li[role=list] { + position: relative +} + +details[role=list] summary+ul, +li[role=list]>ul { + display: flex; + z-index: 99; + position: absolute; + top: auto; + right: 0; + left: 0; + flex-direction: column; + margin: 0; + padding: 0; + border: var(--border-width) solid var(--dropdown-border-color); + border-radius: var(--border-radius); + border-top-right-radius: 0; + border-top-left-radius: 0; + background-color: var(--dropdown-background-color); + box-shadow: var(--card-box-shadow); + color: var(--dropdown-color); + white-space: nowrap +} + +details[role=list] summary+ul li, +li[role=list]>ul li { + width: 100%; + margin-bottom: 0; + padding: calc(var(--form-element-spacing-vertical) * .5) var(--form-element-spacing-horizontal); + list-style: none +} + +details[role=list] summary+ul li:first-of-type, +li[role=list]>ul li:first-of-type { + margin-top: calc(var(--form-element-spacing-vertical) * .5) +} + +details[role=list] summary+ul li:last-of-type, +li[role=list]>ul li:last-of-type { + margin-bottom: calc(var(--form-element-spacing-vertical) * .5) +} + +details[role=list] summary+ul li a, +li[role=list]>ul li a { + display: block; + margin: calc(var(--form-element-spacing-vertical) * -.5) calc(var(--form-element-spacing-horizontal) * -1); + padding: calc(var(--form-element-spacing-vertical) * .5) var(--form-element-spacing-horizontal); + overflow: hidden; + color: var(--dropdown-color); + text-decoration: none; + text-overflow: ellipsis +} + +details[role=list] summary+ul li a:hover, +li[role=list]>ul li a:hover { + background-color: var(--dropdown-hover-background-color) +} + +details[role=list] summary::after, +li[role=list]>a::after { + display: block; + width: 1rem; + height: calc(1rem * var(--line-height, 1.5)); + -webkit-margin-start: 0.5rem; + margin-inline-start: .5rem; + float: right; + transform: rotate(0); + background-position: right center; + background-size: 1rem auto; + background-repeat: no-repeat; + content: "" +} + +details[role=list] { + padding: 0; + border-bottom: none +} + +details[role=list] summary { + margin-bottom: 0 +} + +details[role=list] summary:not([role]) { + height: calc(1rem * var(--line-height) + var(--form-element-spacing-vertical) * 2 + var(--border-width) * 2); + padding: var(--form-element-spacing-vertical) var(--form-element-spacing-horizontal); + border: var(--border-width) solid var(--form-element-border-color); + border-radius: var(--border-radius); + background-color: var(--form-element-background-color); + color: var(--form-element-placeholder-color); + line-height: inherit; + cursor: pointer; + transition: background-color var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition) +} + +details[role=list] summary:not([role]):active, +details[role=list] summary:not([role]):focus { + border-color: var(--form-element-active-border-color); + background-color: var(--form-element-active-background-color) +} + +details[role=list] summary:not([role]):focus { + box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color) +} + +details[role=list][open] summary { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +details[role=list][open] summary::before { + display: block; + z-index: 1; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: 0 0; + content: ""; + cursor: default +} + +nav details[role=list] summary, +nav li[role=list] a { + display: flex; + direction: ltr +} + +nav details[role=list] summary+ul, +nav li[role=list]>ul { + min-width: -moz-fit-content; + min-width: fit-content; + border-radius: var(--border-radius) +} + +nav details[role=list] summary+ul li a, +nav li[role=list]>ul li a { + border-radius: 0 +} + +nav details[role=list] summary, +nav details[role=list] summary:not([role]) { + height: auto; + padding: var(--nav-link-spacing-vertical) var(--nav-link-spacing-horizontal) +} + +nav details[role=list][open] summary { + border-radius: var(--border-radius) +} + +nav details[role=list] summary+ul { + margin-top: var(--outline-width); + -webkit-margin-start: 0; + margin-inline-start: 0 +} + +nav details[role=list] summary[role=link] { + margin-bottom: calc(var(--nav-link-spacing-vertical) * -1); + line-height: var(--line-height) +} + +nav details[role=list] summary[role=link]+ul { + margin-top: calc(var(--nav-link-spacing-vertical) + var(--outline-width)); + -webkit-margin-start: calc(var(--nav-link-spacing-horizontal) * -1); + margin-inline-start: calc(var(--nav-link-spacing-horizontal) * -1) +} + +li[role=list] a:active~ul, +li[role=list] a:focus~ul, +li[role=list]:hover>ul { + display: flex +} + +li[role=list]>ul { + display: none; + margin-top: calc(var(--nav-link-spacing-vertical) + var(--outline-width)); + -webkit-margin-start: calc(var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal)); + margin-inline-start: calc(var(--nav-element-spacing-horizontal) - var(--nav-link-spacing-horizontal)) +} + +li[role=list]>a::after { + background-image: var(--icon-chevron) +} + +[aria-busy=true] { + cursor: progress +} + +[aria-busy=true]:not(input, select, textarea)::before { + display: inline-block; + width: 1em; + height: 1em; + border: .1875em solid currentColor; + border-radius: 1em; + border-right-color: transparent; + content: ""; + vertical-align: text-bottom; + vertical-align: -.125em; + animation: spinner .75s linear infinite; + opacity: var(--loading-spinner-opacity) +} + +[aria-busy=true]:not(input, select, textarea):not(:empty)::before { + margin-right: calc(var(--spacing) * .5); + margin-left: 0; + -webkit-margin-start: 0; + margin-inline-start: 0; + -webkit-margin-end: calc(var(--spacing) * .5); + margin-inline-end: calc(var(--spacing) * .5) +} + +[aria-busy=true]:not(input, select, textarea):empty { + text-align: center +} + +a[aria-busy=true], +button[aria-busy=true], +input[type=button][aria-busy=true], +input[type=reset][aria-busy=true], +input[type=submit][aria-busy=true] { + pointer-events: none +} + +@keyframes spinner { + to { + transform: rotate(360deg) + } +} + +[data-tooltip] { + position: relative +} + +[data-tooltip]:not(a, button, input) { + border-bottom: 1px dotted; + text-decoration: none; + cursor: help +} + +[data-tooltip]::after, +[data-tooltip]::before, +[data-tooltip][data-placement=top]::after, +[data-tooltip][data-placement=top]::before { + display: block; + z-index: 99; + position: absolute; + bottom: 100%; + left: 50%; + padding: .25rem .5rem; + overflow: hidden; + transform: translate(-50%, -.25rem); + border-radius: var(--border-radius); + background: var(--tooltip-background-color); + content: attr(data-tooltip); + color: var(--tooltip-color); + font-style: normal; + font-weight: var(--font-weight); + font-size: .875rem; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0; + pointer-events: none +} + +[data-tooltip]::after, +[data-tooltip][data-placement=top]::after { + padding: 0; + transform: translate(-50%, 0); + border-top: .3rem solid; + border-right: .3rem solid transparent; + border-left: .3rem solid transparent; + border-radius: 0; + background-color: transparent; + content: ""; + color: var(--tooltip-background-color) +} + +[data-tooltip][data-placement=bottom]::after, +[data-tooltip][data-placement=bottom]::before { + top: 100%; + bottom: auto; + transform: translate(-50%, .25rem) +} + +[data-tooltip][data-placement=bottom]:after { + transform: translate(-50%, -.3rem); + border: .3rem solid transparent; + border-bottom: .3rem solid +} + +[data-tooltip][data-placement=left]::after, +[data-tooltip][data-placement=left]::before { + top: 50%; + right: 100%; + bottom: auto; + left: auto; + transform: translate(-.25rem, -50%) +} + +[data-tooltip][data-placement=left]:after { + transform: translate(.3rem, -50%); + border: .3rem solid transparent; + border-left: .3rem solid +} + +[data-tooltip][data-placement=right]::after, +[data-tooltip][data-placement=right]::before { + top: 50%; + right: auto; + bottom: auto; + left: 100%; + transform: translate(.25rem, -50%) +} + +[data-tooltip][data-placement=right]:after { + transform: translate(-.3rem, -50%); + border: .3rem solid transparent; + border-right: .3rem solid +} + +[data-tooltip]:focus::after, +[data-tooltip]:focus::before, +[data-tooltip]:hover::after, +[data-tooltip]:hover::before { + opacity: 1 +} + +@media (hover:hover) and (pointer:fine) { + + [data-tooltip]:hover::after, + [data-tooltip]:hover::before, + [data-tooltip][data-placement=bottom]:focus::after, + [data-tooltip][data-placement=bottom]:focus::before, + [data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::after, + [data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::before { + animation-duration: .2s; + animation-name: tooltip-slide-top + } + + [data-tooltip]:hover::after, + [data-tooltip][data-placement=bottom]:focus::after, + [data-tooltip][data-placement=bottom]:hover [data-tooltip]:focus::after { + animation-name: tooltip-caret-slide-top + } + + [data-tooltip][data-placement=bottom]:focus::after, + [data-tooltip][data-placement=bottom]:focus::before, + [data-tooltip][data-placement=bottom]:hover::after, + [data-tooltip][data-placement=bottom]:hover::before { + animation-duration: .2s; + animation-name: tooltip-slide-bottom + } + + [data-tooltip][data-placement=bottom]:focus::after, + [data-tooltip][data-placement=bottom]:hover::after { + animation-name: tooltip-caret-slide-bottom + } + + [data-tooltip][data-placement=left]:focus::after, + [data-tooltip][data-placement=left]:focus::before, + [data-tooltip][data-placement=left]:hover::after, + [data-tooltip][data-placement=left]:hover::before { + animation-duration: .2s; + animation-name: tooltip-slide-left + } + + [data-tooltip][data-placement=left]:focus::after, + [data-tooltip][data-placement=left]:hover::after { + animation-name: tooltip-caret-slide-left + } + + [data-tooltip][data-placement=right]:focus::after, + [data-tooltip][data-placement=right]:focus::before, + [data-tooltip][data-placement=right]:hover::after, + [data-tooltip][data-placement=right]:hover::before { + animation-duration: .2s; + animation-name: tooltip-slide-right + } + + [data-tooltip][data-placement=right]:focus::after, + [data-tooltip][data-placement=right]:hover::after { + animation-name: tooltip-caret-slide-right + } +} + +@keyframes tooltip-slide-top { + from { + transform: translate(-50%, .75rem); + opacity: 0 + } + + to { + transform: translate(-50%, -.25rem); + opacity: 1 + } +} + +@keyframes tooltip-caret-slide-top { + from { + opacity: 0 + } + + 50% { + transform: translate(-50%, -.25rem); + opacity: 0 + } + + to { + transform: translate(-50%, 0); + opacity: 1 + } +} + +@keyframes tooltip-slide-bottom { + from { + transform: translate(-50%, -.75rem); + opacity: 0 + } + + to { + transform: translate(-50%, .25rem); + opacity: 1 + } +} + +@keyframes tooltip-caret-slide-bottom { + from { + opacity: 0 + } + + 50% { + transform: translate(-50%, -.5rem); + opacity: 0 + } + + to { + transform: translate(-50%, -.3rem); + opacity: 1 + } +} + +@keyframes tooltip-slide-left { + from { + transform: translate(.75rem, -50%); + opacity: 0 + } + + to { + transform: translate(-.25rem, -50%); + opacity: 1 + } +} + +@keyframes tooltip-caret-slide-left { + from { + opacity: 0 + } + + 50% { + transform: translate(.05rem, -50%); + opacity: 0 + } + + to { + transform: translate(.3rem, -50%); + opacity: 1 + } +} + +@keyframes tooltip-slide-right { + from { + transform: translate(-.75rem, -50%); + opacity: 0 + } + + to { + transform: translate(.25rem, -50%); + opacity: 1 + } +} + +@keyframes tooltip-caret-slide-right { + from { + opacity: 0 + } + + 50% { + transform: translate(-.05rem, -50%); + opacity: 0 + } + + to { + transform: translate(-.3rem, -50%); + opacity: 1 + } +} + +[aria-controls] { + cursor: pointer +} + +[aria-disabled=true], +[disabled] { + cursor: not-allowed +} + +[aria-hidden=false][hidden] { + display: initial +} + +[aria-hidden=false][hidden]:not(:focus) { + clip: rect(0, 0, 0, 0); + position: absolute +} + +[tabindex], +a, +area, +button, +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation +} + +[dir=rtl] { + direction: rtl +} + +@media (prefers-reduced-motion:reduce) { + + :not([aria-busy=true]), + :not([aria-busy=true])::after, + :not([aria-busy=true])::before { + background-attachment: initial !important; + animation-duration: 1ms !important; + animation-delay: -1ms !important; + animation-iteration-count: 1 !important; + scroll-behavior: auto !important; + transition-delay: 0s !important; + transition-duration: 0s !important + } +} + +/*# sourceMappingURL=pico.min.css.map */ \ No newline at end of file diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..ce7ccda --- /dev/null +++ b/css/style.css @@ -0,0 +1,135 @@ +@font- face { + font-family: "myf"; + src: url("./blockly/ini/test.ttf") format("truetype"); +} +*{ + font-family:"myf"; +} +button { + padding: 1.3em 3em; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 2.5px; + font-weight: 500; + color: #000; + background-color: #fff; + border: none; + border-radius: 45px; + box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease 0s; + cursor: pointer; + outline: none; + width:100%; + height:5%; + font-size:14px; +} + +button:hover { + background-color: #23c483; + box-shadow: 0px 15px 20px rgba(46, 229, 157, 0.4); + color: #fff; + transform: translateY(-7px); +} + +button:active { + transform: translateY(-1px); +} +.bushu:hover .newimg{ + display:block; +} +.newimg{ + display:none; + weight:15px; + height:300px; +} + + + +*{ + margin: 0; + padding: 0; +} +html,body{ + height: 100%; + width: 100%; +} + /*最底下的灰色div*/ +.alertBelowDiv{ + width: 100%; + height: 100%; + position: fixed; + left: 0; + top: 0; + z-index: 1; + background-color: rgba(100, 100, 100, 0.8); + + /*将内容居中*/ + align-items: center; + display: -webkit-flex; + justify-content: center; +} +/*白色确定框*/ +.alertContentDiv{ + width: 25%; + height: 45%; + background-color: white; + border-radius: 5%; +} +/*展示文字部分*/ +.alertTextDiv{ + + width: 100%; + height: 10%; + margin: 15% auto; + text-align: center; + font-size: x-large; + font-weight: 600; + +} +/*取消按钮*/ +.alertCancelDiv{ + float: left; + width: 18%; + height: 15%; + background-color: lightslategrey; + border-radius: 15%; + font-weight: 600; + color: #fff; + align-items: center; + display: -webkit-flex; + justify-content: center; + margin-left: 15%; + +} + +/*确定按钮*/ +.alertSubmitDiv{ + float: right; + width: 18%; + height: 15%; + background-color: lightslategrey; + border-radius: 15%; + font-weight: 600; + color: #fff; + align-items: center; + display: -webkit-flex; + justify-content: center; + margin-right: 15%; +} + + +.blocklyMainBackground { + stroke-width: 1; + stroke: #fff; +} + +.blocklyToolboxDiv { + display: block; + left: 0px; + background-color: #fff; + height: 100%; +} + +.blocklyFlyoutBackground { + fill: #fff; +} \ No newline at end of file diff --git a/ide.html b/ide.html index 3b457ea..a4b8c42 100644 --- a/ide.html +++ b/ide.html @@ -1,1601 +1,654 @@ - - - PHP助手——让世界没有难写的网页后端 - - - - - - - - - - - - - - - - -
- -
- - -
- -
- -
- + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+ - function t() { - const phpCode = Blockly.PHP.workspaceToCode(workspace); - console.log(phpCode); - document.getElementById("code").innerHTML = phpCode; - return phpCode; - } - let obj = { - findElem: function (name) { - return document.querySelector(name) - } - }, - div = obj.findElem('div'), - input = obj.findElem('#file') - input.onchange = function () { - let reader = new FileReader() - reader.readAsText(this.files[0]); - reader.onload = function () { - readtext = this.result - console.log(readtext) - const xml = Blockly.Xml.textToDom(readtext) - // 回显数据 - Blockly.Xml.domToWorkspace(xml, workspace) - } - const xml = Blockly.Xml.textToDom(readtext); - // 回显数据 - Blockly.Xml.domToWorkspace(xml, workspace); - } - -
- \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..690c73a --- /dev/null +++ b/js/main.js @@ -0,0 +1,880 @@ +Blockly.Blocks['get_get'] = { + init: function() { + this.appendValueInput("get_key") + .setCheck("String") + .setAlign(Blockly.ALIGN_RIGHT) + .appendField("获取get信息 key"); + this.setInputsInline(true); + this.setOutput(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['get_post'] = { + init: function() { + this.appendValueInput("post_key") + .setCheck("String") + .appendField("获取post信息 key"); + this.setInputsInline(true); + this.setOutput(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['get_cookie'] = { + init: function() { + this.appendValueInput("cookie_key") + .setCheck("String") + .appendField("获取cookie值 Key:"); + this.setInputsInline(true); + this.setOutput(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['php_start'] = { + init: function() { + this.appendStatementInput("php-start") + .setCheck(null) + .appendField("PHP积木块"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['read'] = { + init: function() { + this.appendValueInput("name") + .setCheck(null) + .appendField("读取文件 文件名(路径):"); + this.appendDummyInput() + .appendField("存放进变量") + .appendField(new Blockly.FieldTextInput("myfile"), "bianname"); + this.appendValueInput("return_text") + .setCheck(null) + .appendField(" 读取失败后的返回文本"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(135); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['write'] = { + init: function() { + this.appendValueInput("path") + .setCheck(null) + .appendField("写入文件 文件名:"); + this.appendDummyInput() + .appendField("用于操作的变量名") + .appendField(new Blockly.FieldTextInput("default"), "name"); + this.appendValueInput("write_text") + .setCheck(null) + .appendField(" 要写入的内容"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['echo'] = { + init: function() { + this.appendValueInput("NAME") + .setCheck(null) + .appendField("echo输出"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(165); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['print_r'] = { + init: function() { + this.appendValueInput("NAME") + .setCheck(null) + .appendField("print_r输出"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(180); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['htmlspecialchars'] = { + init: function() { + this.appendValueInput("NAME") + .setCheck("String") + .appendField("把文本"); + this.appendDummyInput() + .appendField("转换为 HTML 实体"); + this.setOutput(true, null); + this.setColour(0); + this.setTooltip("转义"); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['mysql_connect'] = { + init: function() { + this.appendDummyInput() + .appendField("连接MySQL 数据库"); + this.appendValueInput("example") + .setCheck(null) + .appendField("对象名"); + this.appendValueInput("url") + .setCheck("String") + .appendField("连接的服务器:"); + this.appendValueInput("user_name") + .setCheck("String") + .appendField("用户名:"); + this.appendValueInput("key") + .setCheck("String") + .appendField("密码:"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip("连接MySQL 数据库"); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['mail'] = { + init: function() { + this.appendDummyInput() + .appendField("发送邮件"); + this.appendValueInput("user") + .setCheck("String") + .appendField("接收者"); + this.appendValueInput("main") + .setCheck("String") + .appendField("主题"); + this.appendValueInput("text") + .setCheck("String") + .appendField("发送的消息"); + this.appendValueInput("h") + .setCheck("String") + .appendField("附加的标题"); + this.appendValueInput("NAME") + .setCheck("String") + .appendField("邮件发送程序规定额外的参数"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip("发送的消息应使用\\n来分隔各行,附加的标题应当使用\\r\\n分隔附加的标题"); + this.setHelpUrl("https://www.w3school.com.cn/php/php_ref_mail.asp"); + } + }; + + Blockly.Blocks['html'] = { + init: function() { + this.appendDummyInput() + .appendField("一个网页"); + this.appendStatementInput("NAME") + .setCheck(null); + this.setPreviousStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['diycode'] = { + init: function() { + this.appendDummyInput() + .appendField("在此输入任何代码(php、js、css......)") + .appendField(new Blockly.FieldTextInput("……"), "code"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(75); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['mysql_close'] = { + init: function() { + this.appendDummyInput() + .appendField("结束数据库连接"); + this.appendValueInput("example") + .setCheck(null) + .appendField("对象名"); + this.appendValueInput("name") + .setCheck("String") + .appendField("数据库名"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['head'] = { + init: function() { + this.appendDummyInput() + .appendField("头部"); + this.appendStatementInput("NAME") + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['body'] = { + init: function() { + this.appendDummyInput() + .appendField("身体"); + this.appendStatementInput("NAME") + .setCheck(null); + this.appendDummyInput() + .appendField("属性"); + this.appendStatementInput("attribute") + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['title'] = { + init: function() { + this.appendValueInput("NAME") + .setCheck("String") + .appendField("标题:"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(160); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['html5'] = { + init: function() { + this.appendDummyInput() + .appendField("HTML5标准网页声明"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['h_'] = { + init: function() { + this.appendDummyInput() + .appendField(new Blockly.FieldDropdown([["一级","h1"], ["二级","h2"], ["三级","h3"], ["四级","h4"], ["五级","h5"], ["六级","h6"]]), "test") + .appendField("文本"); + this.appendDummyInput() + .appendField("内容"); + this.appendStatementInput("NAME") + .setCheck(null); + this.appendDummyInput() + .appendField("属性"); + this.appendStatementInput("attribute") + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(65); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['p'] = { + init: function() { + this.appendDummyInput() + .appendField("段落标签"); + this.appendDummyInput() + .appendField("内容"); + this.appendStatementInput("NAME") + .setCheck(null); + this.appendDummyInput() + .appendField("属性"); + this.appendStatementInput("attribute") + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(65); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['img'] = { + init: function() { + this.appendDummyInput() + .appendField("图像") + .appendField(new Blockly.FieldTextInput("来源"), "src") + .appendField("宽") + .appendField(new Blockly.FieldNumber(100), "width") + .appendField("高") + .appendField(new Blockly.FieldNumber(100), "height"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(315); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['a'] = { + init: function() { + this.appendDummyInput() + .appendField("超链接") + .appendField(new Blockly.FieldTextInput("https://www.w3school.com.cn/html"), "link"); + this.appendDummyInput() + .appendField("内容"); + this.appendStatementInput("NAME") + .setCheck(null); + this.appendDummyInput() + .appendField("属性"); + this.appendStatementInput("attribute") + .setCheck(null); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(195); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['video'] = { + init: function() { + this.appendDummyInput() + .appendField("视频") + .appendField(new Blockly.FieldTextInput("来源"), "src") + .appendField("宽") + .appendField(new Blockly.FieldNumber(100), "width") + .appendField("高") + .appendField(new Blockly.FieldNumber(100), "height"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(315); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['br'] = { + init: function() { + this.appendDummyInput() + .appendField("换行"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(180); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + Blockly.Blocks['shuxing'] = { + init: function() { + this.appendValueInput("value") + .setCheck("String") + .appendField("属性名") + .appendField(new Blockly.FieldTextInput("name"), "name") + .appendField("属性值"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['diycode2'] = { + init: function() { + this.appendDummyInput() + .appendField("在此输入任何代码") + .appendField(new Blockly.FieldTextInput("……"), "code"); + this.setOutput(true, null); + this.setColour(75); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['css'] = { + init: function() { + this.appendStatementInput("NAME") + .setCheck(null) + .appendField("CSS样式(属性)"); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; +Blockly.PHP['get_get'] = function(block) { + var value_get_key = Blockly.PHP.valueToCode(block, 'get_key', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var l = value_get_key; + var value_get_key = l.slice(2, l.length - 1); + var code = '$_GET["' + value_get_key + '"]'; + // TODO: Change ORDER_NONE to the correct strength. + return [code, Blockly.PHP.ORDER_NONE]; + }; + + Blockly.PHP['get_post'] = function(block) { + var value_post_key = Blockly.PHP.valueToCode(block, 'post_key', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var l = value_get_key; + var value_get_key = l.slice(2, l.length - 1); + var code = '$_POST["' + value_post_key + '"]'; + // TODO: Change ORDER_NONE to the correct strength. + return [code, Blockly.PHP.ORDER_NONE]; + }; + + Blockly.PHP['get_cookie'] = function(block) { + var value_cookie_key = Blockly.PHP.valueToCode(block, 'cookie_key', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var l = value_cookie_key; + var value_cookie_key = l.slice(2, l.length - 1); + var code = '$_COOKIE["' + value_cookie_key + '"]'; + // TODO: Change ORDER_NONE to the correct strength. + return [code, Blockly.PHP.ORDER_NONE]; + }; + + Blockly.PHP['php_start'] = function(block) { + var statements_php_start = Blockly.PHP.statementToCode(block, 'php-start'); + // TODO: Assemble PHP into code variable. + var code = '<?php\n' + statements_php_start + '\n?>'; + return code; + }; + + Blockly.PHP['read'] = function(block) { + var value_name = Blockly.PHP.valueToCode(block, 'name', Blockly.PHP.ORDER_ATOMIC); + var l = value_name; + var value_name = l.slice(2, l.length - 1); + var text_bianname = block.getFieldValue('bianname'); + var value_return_text = Blockly.PHP.valueToCode(block, 'return_text', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = `$` + text_bianname + ` = fopen("` + value_name + `", "r") or die ("` + value_return_text + `");
` + + '$' + text_bianname + ' = fread(' + '$' + text_bianname + ',filesize("' + value_name + '"));
' + + 'fclose($' + text_bianname + ');
' + return code; + }; + + Blockly.PHP['write'] = function(block) { + var value_path = Blockly.PHP.valueToCode(block, 'path', Blockly.PHP.ORDER_ATOMIC); + var l = value_path; + var value_path = l.slice(2, l.length - 1); + var text_name = block.getFieldValue('name');//变量名 + var value_write_text = Blockly.PHP.valueToCode(block, 'write_text', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = '$' + text_name + ' = fopen("' + value_path + '", "w") or die ("' + 'Unable to open file!' + '");
' + '$' + text_name + ' = fwrite(' + '$' + text_name + ',"' + value_path + '");
' + 'fclose($' + text_name + ');
'; + return code; + }; + + Blockly.PHP['print_r'] = function(block) { + var value_name = Blockly.PHP.valueToCode(block, 'NAME', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = 'print_r(' + value_name + ');
'; + return code; + }; + + Blockly.PHP['echo'] = function(block) { + var value_name = Blockly.PHP.valueToCode(block, 'NAME', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = 'echo ' + value_name + ';
'; + return code; + }; + + Blockly.PHP['htmlspecialchars'] = function(block) { + var value_name = Blockly.PHP.valueToCode(block, 'NAME', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = 'htmlentities(' + value_name + ')'; + // TODO: Change ORDER_NONE to the correct strength. + return [code, Blockly.PHP.ORDER_NONE]; + }; + + Blockly.PHP['mysql_close'] = function(block) { + var value_example = Blockly.PHP.valueToCode(block, 'example', Blockly.PHP.ORDER_ATOMIC); + var value_name = Blockly.PHP.valueToCode(block, 'name', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = 'mysql_close($' + value_example + ');
'; + return code; + }; + + Blockly.PHP['mysql_connect'] = function(block) { + var value_example = Blockly.PHP.valueToCode(block, 'example', Blockly.PHP.ORDER_ATOMIC); + var l = value_example; + var value_example = l.slice(1, l.length - 1); + var value_url = Blockly.PHP.valueToCode(block, 'url', Blockly.PHP.ORDER_ATOMIC); + var l = value_url; + var value_url = l.slice(1, l.length - 1); + var value_user_name = Blockly.PHP.valueToCode(block, 'user_name', Blockly.PHP.ORDER_ATOMIC); + var l = value_user_name; + var value_user_name = l.slice(1, l.length - 1); + var value_key = Blockly.PHP.valueToCode(block, 'key', Blockly.PHP.ORDER_ATOMIC); + var l = value_key; + var value_key = l.slice(1, l.length - 1); + // TODO: Assemble PHP into code variable. + var code = '$' + value_example + ' = mysql_connect("' + value_url + '","' + value_user_name + '","' + value_key + '");
' + 'if (!$' + value_example + ')
{
die("Could not connect: ".mysql_error());
}
'; + return code; + }; + + Blockly.PHP['mail'] = function(block) { + var value_user = Blockly.PHP.valueToCode(block, 'user', Blockly.PHP.ORDER_ATOMIC); + var value_main = Blockly.PHP.valueToCode(block, 'main', Blockly.PHP.ORDER_ATOMIC); + var value_text = Blockly.PHP.valueToCode(block, 'text', Blockly.PHP.ORDER_ATOMIC); + var value_h = Blockly.PHP.valueToCode(block, 'h', Blockly.PHP.ORDER_ATOMIC); + var value_name = Blockly.PHP.valueToCode(block, 'NAME', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var code = 'mail('+value_user+','+value_main+','+value_text+','+value_h+','+value_h+','+value_name+');
'; + return code; + }; + Blockly.PHP['html'] = function(block) { + var statements_name = Blockly.PHP.statementToCode(block, 'NAME'); + // TODO: Assemble PHP into code variable. + var code = '<html>
' + statements_name + '</html>
'; + return code; + }; + Blockly.PHP['head'] = function(block) { + var statements_name = Blockly.PHP.statementToCode(block, 'NAME'); + // TODO: Assemble PHP into code variable. + var code = '<head>
' + statements_name + '
</head>
'; + return code; + }; + + Blockly.PHP['diycode'] = function(block) { + var text_code = block.getFieldValue('code'); + // TODO: Assemble PHP into code variable. + var code = text_code; + return code; + }; + Blockly.PHP['h_'] = function(block) { + var dropdown_test = block.getFieldValue('test'); + var statements_name = Blockly.PHP.statementToCode(block, 'NAME'); + var statements_attribute = Blockly.PHP.statementToCode(block, 'attribute'); + // TODO: Assemble PHP into code variable. + var code = '<'+dropdown_test + ' ' + statements_attribute + '>
'+statements_name+'
</'+dropdown_test+'>
'; + return code; + }; + + Blockly.PHP['body'] = function(block) { + var statements_name = Blockly.PHP.statementToCode(block, 'NAME'); + var statements_attribute = Blockly.PHP.statementToCode(block, 'attribute'); + // TODO: Assemble PHP into code variable. + var code = '<body ' + statements_attribute +'>
' + statements_name + '
</body>
'; + return code; + }; + + Blockly.PHP['html5'] = function(block) { + // TODO: Assemble PHP into code variable. + var code = '<!DOCTYPE HTML>
'; + return code; + }; + + Blockly.PHP['p'] = function(block) { + var statements_name = Blockly.PHP.statementToCode(block, 'NAME'); + var statements_attribute = Blockly.PHP.statementToCode(block, 'attribute'); + // TODO: Assemble PHP into code variable. + var code = '<p ' + statements_attribute +'">
' + statements_name + '
</p>
'; + return code; + }; + + Blockly.PHP['img'] = function(block) { + var text_src = block.getFieldValue('src'); + var number_width = block.getFieldValue('width'); + var number_height = block.getFieldValue('height'); + // TODO: Assemble PHP into code variable. + var code = '<img '+' src="'+text_src+'"'+' width="'+number_width+'"'+' heigth="'+number_height+'"'+'">
' + statements_name + '
'; + return code; + }; + + Blockly.PHP['title'] = function(block) { + var value_name = Blockly.PHP.valueToCode(block, 'NAME', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var l = value_name; + var value_name = l.slice(2, l.length - 1); + var code = '<title>' + value_name + '</title>
'; + return code; + }; + + Blockly.PHP['diycode2'] = function(block) { + var text_code = block.getFieldValue('code'); + + return [text_code, Blockly.PHP.ORDER_NONE]; + }; + + Blockly.PHP['br'] = function(block) { + // TODO: Assemble PHP into code variable. + var code = '<br>'; + return code; + }; + Blockly.PHP['a'] = function(block) { + var text_link = block.getFieldValue('link'); + var statements_name = Blockly.PHP.statementToCode(block, 'NAME'); + var statements_attribute = Blockly.PHP.statementToCode(block, 'attribute'); + // TODO: Assemble PHP into code variable. + var code = '<img '+' src="'+text_link+'" '+statements_attribute+'>'+ statements_name + '</a>
'; + return code; + }; + + Blockly.PHP['video'] = function(block) { + var text_src = block.getFieldValue('src'); + var number_width = block.getFieldValue('width'); + var number_height = block.getFieldValue('height'); + // TODO: Assemble PHP into code variable. + var code = '<video '+' src="'+text_src+'"'+' width="'+number_width+'"'+' heigth="'+number_height+'"'+'">
</video>
'; + return code; + }; + Blockly.PHP['shuxing'] = function(block) { + var text_name = block.getFieldValue('name'); + var value_value = Blockly.PHP.valueToCode(block, 'value', Blockly.PHP.ORDER_ATOMIC); + // TODO: Assemble PHP into code variable. + var l = value_value; + var value_value = l.slice(1, l.length - 1); + var code = text_name + ':' + value_value + ';
'; + return code; + }; + + console.log(` + iiiiiiiii;;;;iiiiiiiiiiiiiiiii;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiii1111111111111t1ttttttttttfffffffffffffLLLLLLLLLLLGGGGGGG + iiiiiiiii;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiii11111111111111tttttttttttfffffffffffffLLLLLLLLLLLGGGGGG + iiiii;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiii111111111111ttttttttttttffffffffffffffLLLLLLLLLLLGGGGG + iiii;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiiiiii1111111111111ttttttttttttffffffffffffffLLLLLLLLLLGGGGG + iii;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiiiiii1111111111111tttttttttttttffffffffffffffLLLLLLLLLGGGGGG + ii;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiiiiiii11111111111ttttttttttttttffffffffffffffffLLLLLLLGGGGGGG + i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiiiiii11111111111111tttttttttttttffffffffffffffffLLLLLLLLGGGGGGG + ;;iii;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiiii1111111111111111t1ttttttttttfffffffffffffffffLLLLLLLLLLGGGGGGG + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiii;;;;;iiiiiiiiiiiiiiiiiiiiii1111111111111111tttttttttttttfffffffffffffffffLfLLLLLLLLLGGGGGGGG + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiiiiiii111111111111111111ttttttttttttfffffffffffffffffLLLLLLLLLLLGGGGGGGG + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiii11111111111111111111111ttttttttttttfffffffffffffffLLLLLLLLLLLGLGGGGGGG + i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiii11111111111111111111111111111tttttttttffffffffffffffLLLLLLLLLLLLLLLGGGGGGG + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiii1ii1111111111111111111111111111111111tttttttttttfffffffffffffLLLLLLLLLLLLLLGGGGGGGGG + ;;;;;;;;;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiii111t ffffffffffffffffffLLLLLLLLLLLLLLLGGGGGGGGGGG + iiiii;;;;;;;;;;;;iiiiiiiiiiiiiiiiiiiiii1111tt ffffffffffffffffLLLLLLLLLLLLLLLLLLGGGGGGGGGG + iiiiii;i;;i;;;iiiiiiiiiiiiiiiiiiiiiii111111tf 0000000000888888888880000000000 LLfffffffffffffLLLLLLLLLLLLLLLLLGGGGGGGGGGGG + iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii111111tttfL 8888888888888888888888888888880 LLLffffffffLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGG + iiiiiiiiiiiiiiiiiiiiiiiiiiii11111111111tttfLG GGGGGGGGGGGCCCCCCCCCGGGGGGGGGC8 LLLLLLLLLLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGG + iiiiiiiiiiiiiiiiiiiii11111111111111111ttttfLG GLLLLLLLLLLLLLG LLLGLLLLLLGGGGC LLLLLLLLLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGGG + iiiiiiiiiiiiiiiiiiii1i111111111111111ttttffLG GLLLLffffffL LLLLLLLLGGGC GLLLLLLLLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGGG + 11111111111111ii1111111111111111111ttttttfLLG GLLLLffft LLLLLGGCC GGLLLLLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGGGGG + 11111111111111111111111111111111ttttttttffLLG GLLLf. LLGGGC GGLLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGGGGGGGG + 111111111111111111111111111ttttttttttttfffLLG GGLLLG0 00GGGGGCC GGLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGGGGGGGCGGC + tttt111111111111111111ttttttttttttttttffffLLG GGGGGGCC88 00CCCGGGGGCC GGGLLLLLLLLLLLGGGGGGGGGGGGGGGGGGGGGGGGGCCCCC + ttttttttttttttttttttttttttttttttttttffffffLGG GGGGCC8CCC880 800CCCCCCCGGGGGC CGGLLLLLLLLLGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCC + ttttttttttttttttttttttttttttttttttfffffffLLGC LGGCC88888000888C8CCCCCGGGL CGGGGLLLLLLGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCC + ttttttttttttttttttttttttttttffffffffffffLLLGC0 GGCC8888888888CCCCGGG fCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCC + ffffffffffffffffftttfffffffffffffffffffLLLGGC8000 GGCCC888CCCCGGG :008CCGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCC + fffffffffffffffffffffffffffffffffffffffLLLGGC800000@ CGCCCCCGG G000088CGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCCC + ffffffffffffffffffffffffffffffffffffLLLLLLGGCC80000000G GGL 800000008CCGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCCCCC + fffffffffffffffffffffffffffffffLLLLLLLLLLLLGGCC8800000000L 00000000088CCCGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCCCCCCCCC + LLLLLffffffffLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLGGGCCC8880000000@1 800000000888CCCCGGGGGGGGGGGGGGGGGGGCGCCCCCCCCCCCCCCCCCCCCCCC + LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLGGGGGCCCC88800000000f C000000000888CCCCGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLGGGGGGGGGCCCC888000000000000008888CCCCCCGGGGGGGGGGGGGGGGCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLGGGGGGGGGGGGGGGGGGGGGCCCC8880000000088888CCCCCCCGGGGGGGGGGGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + LLLLLLLLLLLLLLLLLLGGLLLLLLGGGGGGGGGGGGGGGGGGGGGGGGGCGCCCCC888888088888CCCCCCCCCCGCCCGCCCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + LLGLLLGGGGGGGGGGGGi GGGGGGGGG GGC 1CCCCC8C8 CCCCCCC CCCCCCC CCCCCCCCCCCCCCCCCCCC + GGGGGGGGGGGGGGGGGG8 GGGGGGGCC GGC CCCCCt CCCCCCC CCCCCCC LCCCCCCCCCCCCCCCC + GGGGGGGGGGGGGGGGGC8 CGGGGGCC8 CC8 00000 :CC81 CCCCCC8 CCCCCC8 00000 CCCCCCCCCCCCCC8 + GGGGGGGGGGGGGGGGCC8 CGGGCCC88 C88 0000000 CC81 CCCCC88 CCCCCC8 0@@@000 88CCCCCCCCC8888 + GGGGGGGGGGGGGGGCCC8 CCCCCCC88 880 0888800 C88i CCCC880 CCCCCC8 088880@ 888CCCCCC888888 + GGGGGGGGGGGGGGCCC80 880 00@00 880; CCCCC88 00000 88888CCC8888888 + GGGGGGGGGGGGGGCCC88 880 0880; CCCCC88 00888888888888888 + GGGGGGGGGGGGGCCCC80 080 .0000080i C88C880 i00000888888888888888 + GGGGGGGGGGGCCCCCC80 000000000 880 0000000000008801 000000000000008888888 00000000@008888888888888888 + CCCCGCCCGCCCCCCCC88 000000000 .880 00@00@000088888t 0000000000@0008888880 00000@000088888888888888888 + CCCCCCCCCCCCCCCCC88 0000000000000000880 000000088888888t 000000000000088888880 000000088888888888888888888 + CCCCCCCCCCCCCCCCC80 0888888000000000880 008888888888888t 008888888888888888880 088888888888888888888888888 + CCCCCCCCCCCCCCCCC80::;;,:8888888888888888888;,,,,.,888888CCCCCC888f.,:;,:888888888888888888880i,::::t888888888888888888888888888 + CCCCCCCCCCCCCCCC8800088888888CCCC88888888888000888888CCCCCCCCC88880000088888CCCCCCCCCCCCCC88800000088888888888888888888888888888 + CCCCCCCCCCCCCCCC88000888888CCCCCCCCCCCC88888000888888CCCCCCCCCC888000888888CCCCCCCCCCCCCC888800000088888888888888888888888888888 + CCCCCCCCCCCCCCCC8880008888CCCCCCCCCCCCCCC888880888888CCCCCCCCCC88880008888CCCCCCCCCCCCCCCC88880000088888888888888888888888888888 + CCCCCCCCCCCCCCCCC88888888CCCCCCCCCCCCCCCCCC888888888CCCCCCCCCCC8888888888CCCCCCCCCCCCCCCC888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8888888CCCCCCCCCCCCCCCC8888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC88888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC88888888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC888888888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8CCCCC888888888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC88888888888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC88888C88C8888888888888888888888888888888888888888888888888888 + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8888888888888888888888888888888888888888888888888888888888888888888888888888800 + 88CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8888888888888888888888888888888888888888888888888888888888888888888888888888888880000 + 88888CCCCCCCCCCCCCCCCCCCCCCCCC88888888C88888888888888888888888888888888888888888888888888888888888888888888888888888888888800000 + 888888888888888C8888888CC8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888880000000 + ` + ); + function bushu(){//一键部署功能 + + var a=confirm("请先复制好您生成的代码!!!!是否使用此功能,第一次使用需要下载peizhi.php!(请在官网进入使用手册下载)") + if ((a === true)) { + var url = prompt('请输入您的服务器上的peizhi.php的URL!'); + alertDiv(url); + //var myname = prompt('请输入您保存代码的文件名'); + t(); + copy('code'); + $.post(url, {'name':myname, 'text':document.getElementById('code')}); + } else { + } + } + + + function alertDiv(url){ + //创建div + let alertBelowDiv = document.createElement("div");//创建最下面的div + let alertContentDiv = document.createElement("div");//创建呈现内容的白色div + let alertfrom = document.createElement("form");//创建文字div + let filename = document.createElement("input"); + let text = document.createElement("textarea"); + let submit = document.createElement("button"); + alertfrom.style.action = url; + alertfrom.style.method = "POST"; + filename.type = "text"; + filename.name = "name"; + filename.style.height = "13%"; + filename.style.width = "100%"; + filename.placeholder = "请输入您要保存的代码的文件名"; + text.name = "text"; + text.placeholder = "请输入您生成的代码!"; + text.style.width = "100%"; + text.style.height = "80%"; + submit.type = "submit"; + + + + //获取body + let body = document.body; + //添加div + body.appendChild(alertBelowDiv); + alertBelowDiv.appendChild(alertContentDiv); + alertContentDiv.appendChild(alertfrom); + + alertfrom.appendChild(filename); + alertfrom.appendChild(text); + alertfrom.appendChild(submit); + + + alertBelowDiv.className="alertBelowDiv"; + alertContentDiv.className="alertContentDiv"; + + submit.innerHTML="确定"; + + //添加点击函数 + + submit.onclick=function (){ + //业务代码执行部分 + this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode); + alertBelowDiv.style.display = "none"; + } + } + + + var readtext = "默认"; + var colored_egg = 0; + // 获取动画 + let loader = document.querySelector(".loader"); + // 加载完成事件 + window.onload = function () { + // 加载完成,隐藏动画,显示内容 + loader.style.display = "none"; + } + function text(sHtml) { + return sHtml.replace(/[<>&""]/g, function (c) { return { '<': '<', '>': '>', '&': '&', '"': '"' }[c]; }); + } + function br(sHtml) { + return sHtml.replace(/[<>&""]/g, function (c) { return { '
': '\n' }[c]; }); + } + function d_save() {//保存积木文件 + //1.输入文件名 并存储到一个变量中 + var myname = prompt('请输入文件名(不用加后缀)'); + //2.输出这个文件名 + alert(myname); + d(save(), myname + '.phr', 'text/plain') + } + + window.onbeforeunload=function(e){ + var e = window.event||e; + e.returnValue=("确定离开当前页面吗?可能会导致您的数据丢失!!"); + } + + function fcolored_egg() { + colored_egg = colored_egg + 1 + if (colored_egg > 20) { + colored_egg = 0 + window.location.href = "./blockly/colored_egg/colored_egg.html"; + } + } + function html(str) { + var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' }; + return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) { return arrEntities[t]; }); + } + function copy(copyId) { + var val = document.getElementById(copyId); + window.getSelection().selectAllChildren(val); + document.execCommand("Copy"); + + } + function save() { + const xml = Blockly.Xml.workspaceToDom(workspace); + const xmlText = Blockly.Xml.domToText(xml); + console.log(xmlText); + document.getElementById("code").innerHTML = text(xmlText); + return xmlText; + } + function d(text, name, type) { + var a = document.getElementById("a"); + var file = new Blob([text], { type: type }); + a.href = URL.createObjectURL(file); + a.download = name; + a.dispatchEvent(new MouseEvent('click', { 'bubbles': false, 'cancelable': true })); + } + + function t() { + const phpCode = Blockly.PHP.workspaceToCode(workspace); + console.log(phpCode); + document.getElementById("code").innerHTML = phpCode; + return phpCode; + } + let obj = { + findElem: function (name) { + return document.querySelector(name) + } + }, + div = obj.findElem('div'), + input = obj.findElem('#file') + input.onchange = function () { + let reader = new FileReader() + reader.readAsText(this.files[0]); + reader.onload = function () { + readtext = this.result + console.log(readtext) + const xml = Blockly.Xml.textToDom(readtext) + // 回显数据 + Blockly.Xml.domToWorkspace(xml, workspace) + } + const xml = Blockly.Xml.textToDom(readtext); + // 回显数据 + Blockly.Xml.domToWorkspace(xml, workspace); + } + diff --git a/kzhzbcphp.php b/kzhzbcphp.php index 6b23fdd..561c0f2 100644 --- a/kzhzbcphp.php +++ b/kzhzbcphp.php @@ -1,3 +1,4 @@ +<<<<<<< Updated upstream '.fread($block,filesize("./blockly/ini/blocks/get.js")).''; + fclose($block); + $make = fopen("./blockly/ini/blocks/get.js.js", "r") or die("Unable to open file!"); + $mak = ''; + fclose($make); +echo $text = <<<__ + + + + + PHP助手——让世界没有难写的网页后端 + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+ + +__; +$myfile = fopen("ide.html", "w") or die("Unable to open file!"); +fwrite($myfile,$text); +fclose($myfile); +>>>>>>> Stashed changes ?> \ No newline at end of file -- Gitee From 53b56682b956d050bf994396459919371ba1dce1 Mon Sep 17 00:00:00 2001 From: Codekpy <1942171924@qq.com> Date: Mon, 14 Nov 2022 08:24:07 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kzhzbcphp.php | 681 -------------------------------------------------- 1 file changed, 681 deletions(-) diff --git a/kzhzbcphp.php b/kzhzbcphp.php index 561c0f2..6b23fdd 100644 --- a/kzhzbcphp.php +++ b/kzhzbcphp.php @@ -1,4 +1,3 @@ -<<<<<<< Updated upstream '.fread($block,filesize("./blockly/ini/blocks/get.js")).''; - fclose($block); - $make = fopen("./blockly/ini/blocks/get.js.js", "r") or die("Unable to open file!"); - $mak = ''; - fclose($make); -echo $text = <<<__ - - - - - PHP助手——让世界没有难写的网页后端 - - - - - - - - - - - - - - - - - - -
- -
-
-
- - -
-
- - -__; -$myfile = fopen("ide.html", "w") or die("Unable to open file!"); -fwrite($myfile,$text); -fclose($myfile); ->>>>>>> Stashed changes ?> \ No newline at end of file -- Gitee