From 14a98118a485186517c78f6ea51803a545602f49 Mon Sep 17 00:00:00 2001 From: kushidou Date: Fri, 17 Jul 2026 11:26:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=EF=BC=8C=E7=A7=BB=E9=99=A4public?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/404.html | 40 - public/about-card/index.html | 568 ---- public/about/index.html | 614 ---- public/android-chrome-192x192.png | Bin 7296 -> 0 bytes public/android-chrome-512x512.png | Bin 27677 -> 0 bytes public/apple-touch-icon.png | Bin 6521 -> 0 bytes public/categories/index.html | 498 ---- public/categories/index.xml | 18 - public/css/compiled/main.css | 2 - ...f7d9e327b2bee53160196c4bd1d34a3fd9fbc9.css | 1 - ...f9e5fe4247509e3e27ac1143012be7f29fcb95.css | 1 - ...59f61e388dc6e7e1c40110b315ef477b5ff042.css | 1 - ...1c29c348f59a33b1a7ebefabee95a192584553.css | 1 - ...385006113c25a60d1a7976dff2c8feaf1d6c2e.css | 1 - public/css/custom.css | 8 - public/css/variables.css | 26 - public/en.search-data.json | 1 - public/en.search.js | 490 ---- ...f505ea2e6bd026e4cae8052a858eafc78cf230e.js | 2 - public/favicon-16x16.png | Bin 340 -> 0 bytes public/favicon-32x32.png | Bin 753 -> 0 bytes public/favicon.ico | Bin 15406 -> 0 bytes public/favicon.svg | 13 - public/images/logo-dark.svg | 3 - public/images/logo.svg | 3 - public/index.html | 684 ----- public/index.xml | 1927 ------------- ...c75266ab6b93f569ac2fb4f3dc66882e0416f4c.js | 96 - ...b799f580c2d1654e703dd9357d568ac41b2547a.js | 2525 ----------------- public/js/main-head.js | 22 - ...07ffefe1aaf63ec3ca555e827b58b80e7d3f0b7.js | 1 - public/js/main.js | 1082 ------- ...d569c30defac0effcba45486a78209fba9360af.js | 6 - .../210218-teamspeakwithdocker/index.html | 685 ----- .../210311-multitouchscreeninlinux/index.html | 783 ----- .../index.html | 732 ----- .../posts/210328-linuxchangemacip/index.html | 732 ----- .../index.html | 722 ----- public/posts/210429-deepinautorun/index.html | 677 ----- .../posts/210630-sudowithoutpasswd/index.html | 678 ----- public/posts/210719-gpuinfoinlinux/index.html | 684 ----- .../210824-linuxtouchscreenfin/index.html | 774 ----- public/posts/210914-linuxbackupdd/index.html | 703 ----- public/posts/210914-mdadm/index.html | 687 ----- public/posts/210928-rpm_package/index.html | 601 ---- .../211019-dpkg_package_guide/index.html | 759 ----- public/posts/211115-fixnasdriver/index.html | 751 ----- .../211203-linuxchangeusername/index.html | 706 ----- public/posts/220104-diylinuxiso/index.html | 696 ----- .../index.html | 681 ----- .../220714-unpackclonezillaimage/index.html | 708 ----- public/posts/230508-remake-deb/index.html | 682 ----- public/posts/230908-py-post/index.html | 740 ----- public/posts/231127-vncserver/index.html | 695 ----- public/posts/231225-dockernote/index.html | 822 ------ public/posts/about_hugo_website/index.html | 674 ----- .../posts/assents/image-20220223090517363.png | Bin 119059 -> 0 bytes .../截图录屏_选择区域_20220223090208.png | Bin 48314 -> 0 bytes .../截图录屏_选择区域_20220223090606.png | Bin 63904 -> 0 bytes public/posts/index.html | 603 ---- public/posts/index.xml | 19 - public/posts/page/1/index.html | 9 - public/posts/page/2/index.html | 616 ---- public/posts/page/3/index.html | 531 ---- public/resources/blog_main.jpg | Bin 87289 -> 0 bytes public/resources/daily_main.png | Bin 679827 -> 0 bytes public/resources/icon_180x180.png | Bin 43662 -> 0 bytes public/resources/icon_32x32.png | Bin 2684 -> 0 bytes public/resources/icon_32x32_2.png | Bin 2684 -> 0 bytes public/resources/icon_32x32_3.png | Bin 2684 -> 0 bytes ...2ef01c_28092_180x180_fill_box_center_2.png | Bin 43662 -> 0 bytes ...2ef01c_28092_180x180_fill_box_center_3.png | Bin 43649 -> 0 bytes ...022ef01c_28092_32x32_fill_box_center_2.png | Bin 2684 -> 0 bytes ...022ef01c_28092_32x32_fill_box_center_3.png | Bin 2684 -> 0 bytes public/resources/photograph_main.jpg | Bin 98919 -> 0 bytes public/resources/头像.jpg | Bin 73737 -> 0 bytes public/site.webmanifest | 20 - public/sitemap.xml | 146 - public/tags/clonezilla/index.html | 510 ---- public/tags/clonezilla/index.xml | 104 - public/tags/deepin/index.html | 582 ---- public/tags/deepin/index.xml | 623 ---- public/tags/deepin/uos/index.html | 570 ---- public/tags/deepin/uos/index.xml | 566 ---- public/tags/docker/index.html | 522 ---- public/tags/docker/index.xml | 246 -- public/tags/http/index.html | 510 ---- public/tags/http/index.xml | 166 -- public/tags/index.html | 671 ----- public/tags/index.xml | 19 - public/tags/linux/index.html | 726 ----- public/tags/linux/index.xml | 1636 ----------- public/tags/nas/index.html | 510 ---- public/tags/nas/index.xml | 107 - public/tags/python/index.html | 510 ---- public/tags/python/index.xml | 166 -- public/tags/server/index.html | 510 ---- public/tags/server/index.xml | 166 -- public/tags/teamspeak/index.html | 510 ---- public/tags/teamspeak/index.xml | 65 - public/tags/tools/index.html | 510 ---- public/tags/tools/index.xml | 65 - public/tags/串口/index.html | 522 ---- public/tags/串口/index.xml | 193 -- public/tags/容器和虚拟化/index.html | 510 ---- public/tags/容器和虚拟化/index.xml | 200 -- public/tags/数据恢复/index.html | 510 ---- public/tags/数据恢复/index.xml | 107 - public/tags/显卡/index.html | 510 ---- public/tags/显卡/index.xml | 78 - public/tags/网络/index.html | 510 ---- public/tags/网络/index.xml | 106 - public/tags/群晖/index.html | 510 ---- public/tags/群晖/index.xml | 107 - public/tags/触摸屏/index.html | 522 ---- public/tags/触摸屏/index.xml | 290 -- public/tags/软件/index.html | 510 ---- public/tags/软件/index.xml | 97 - 118 files changed, 42802 deletions(-) delete mode 100644 public/404.html delete mode 100644 public/about-card/index.html delete mode 100644 public/about/index.html delete mode 100644 public/android-chrome-192x192.png delete mode 100644 public/android-chrome-512x512.png delete mode 100644 public/apple-touch-icon.png delete mode 100644 public/categories/index.html delete mode 100644 public/categories/index.xml delete mode 100644 public/css/compiled/main.css delete mode 100644 public/css/compiled/main.min.1a431501cdeb52323c920e7761f7d9e327b2bee53160196c4bd1d34a3fd9fbc9.css delete mode 100644 public/css/compiled/main.min.1ad8bafe4bcdf3c97beba654bef9e5fe4247509e3e27ac1143012be7f29fcb95.css delete mode 100644 public/css/compiled/main.min.90b97d9fd24b4b64d77532889559f61e388dc6e7e1c40110b315ef477b5ff042.css delete mode 100644 public/css/compiled/main.min.dd0a2e06153504ce1622d60dbc1c29c348f59a33b1a7ebefabee95a192584553.css delete mode 100644 public/css/compiled/main.min.e3e32e1e64b51d8cf07eddfd28385006113c25a60d1a7976dff2c8feaf1d6c2e.css delete mode 100644 public/css/custom.css delete mode 100644 public/css/variables.css delete mode 100644 public/en.search-data.json delete mode 100644 public/en.search.js delete mode 100644 public/en.search.min.2cc417b6975b6621e049223d9f505ea2e6bd026e4cae8052a858eafc78cf230e.js delete mode 100644 public/favicon-16x16.png delete mode 100644 public/favicon-32x32.png delete mode 100644 public/favicon.ico delete mode 100644 public/favicon.svg delete mode 100644 public/images/logo-dark.svg delete mode 100644 public/images/logo.svg delete mode 100644 public/index.html delete mode 100644 public/index.xml delete mode 100644 public/js/flexsearch.433e941a8a573ebb9931fc16fc75266ab6b93f569ac2fb4f3dc66882e0416f4c.js delete mode 100644 public/js/flexsearch.9f5b5908f93ae86f1ecd4b043b799f580c2d1654e703dd9357d568ac41b2547a.js delete mode 100644 public/js/main-head.js delete mode 100644 public/js/main-head.min.94da6f95b126542222dab3a6e07ffefe1aaf63ec3ca555e827b58b80e7d3f0b7.js delete mode 100644 public/js/main.js delete mode 100644 public/js/main.min.d9fbefbbac8caeb66025dbb14d569c30defac0effcba45486a78209fba9360af.js delete mode 100644 public/posts/210218-teamspeakwithdocker/index.html delete mode 100644 public/posts/210311-multitouchscreeninlinux/index.html delete mode 100644 public/posts/210311-serialmodeandudevinlinux/index.html delete mode 100644 public/posts/210328-linuxchangemacip/index.html delete mode 100644 public/posts/210420-linuxmorethan4serialport/index.html delete mode 100644 public/posts/210429-deepinautorun/index.html delete mode 100644 public/posts/210630-sudowithoutpasswd/index.html delete mode 100644 public/posts/210719-gpuinfoinlinux/index.html delete mode 100644 public/posts/210824-linuxtouchscreenfin/index.html delete mode 100644 public/posts/210914-linuxbackupdd/index.html delete mode 100644 public/posts/210914-mdadm/index.html delete mode 100644 public/posts/210928-rpm_package/index.html delete mode 100644 public/posts/211019-dpkg_package_guide/index.html delete mode 100644 public/posts/211115-fixnasdriver/index.html delete mode 100644 public/posts/211203-linuxchangeusername/index.html delete mode 100644 public/posts/220104-diylinuxiso/index.html delete mode 100644 public/posts/220223-deepin_partsinddefilemanager/index.html delete mode 100644 public/posts/220714-unpackclonezillaimage/index.html delete mode 100644 public/posts/230508-remake-deb/index.html delete mode 100644 public/posts/230908-py-post/index.html delete mode 100644 public/posts/231127-vncserver/index.html delete mode 100644 public/posts/231225-dockernote/index.html delete mode 100644 public/posts/about_hugo_website/index.html delete mode 100644 public/posts/assents/image-20220223090517363.png delete mode 100644 public/posts/assents/截图录屏_选择区域_20220223090208.png delete mode 100644 public/posts/assents/截图录屏_选择区域_20220223090606.png delete mode 100644 public/posts/index.html delete mode 100644 public/posts/index.xml delete mode 100644 public/posts/page/1/index.html delete mode 100644 public/posts/page/2/index.html delete mode 100644 public/posts/page/3/index.html delete mode 100644 public/resources/blog_main.jpg delete mode 100644 public/resources/daily_main.png delete mode 100644 public/resources/icon_180x180.png delete mode 100644 public/resources/icon_32x32.png delete mode 100644 public/resources/icon_32x32_2.png delete mode 100644 public/resources/icon_32x32_3.png delete mode 100644 public/resources/icon_hu2edf57696400f275bcb1d2f9022ef01c_28092_180x180_fill_box_center_2.png delete mode 100644 public/resources/icon_hu2edf57696400f275bcb1d2f9022ef01c_28092_180x180_fill_box_center_3.png delete mode 100644 public/resources/icon_hu2edf57696400f275bcb1d2f9022ef01c_28092_32x32_fill_box_center_2.png delete mode 100644 public/resources/icon_hu2edf57696400f275bcb1d2f9022ef01c_28092_32x32_fill_box_center_3.png delete mode 100644 public/resources/photograph_main.jpg delete mode 100644 public/resources/头像.jpg delete mode 100644 public/site.webmanifest delete mode 100644 public/sitemap.xml delete mode 100644 public/tags/clonezilla/index.html delete mode 100644 public/tags/clonezilla/index.xml delete mode 100644 public/tags/deepin/index.html delete mode 100644 public/tags/deepin/index.xml delete mode 100644 public/tags/deepin/uos/index.html delete mode 100644 public/tags/deepin/uos/index.xml delete mode 100644 public/tags/docker/index.html delete mode 100644 public/tags/docker/index.xml delete mode 100644 public/tags/http/index.html delete mode 100644 public/tags/http/index.xml delete mode 100644 public/tags/index.html delete mode 100644 public/tags/index.xml delete mode 100644 public/tags/linux/index.html delete mode 100644 public/tags/linux/index.xml delete mode 100644 public/tags/nas/index.html delete mode 100644 public/tags/nas/index.xml delete mode 100644 public/tags/python/index.html delete mode 100644 public/tags/python/index.xml delete mode 100644 public/tags/server/index.html delete mode 100644 public/tags/server/index.xml delete mode 100644 public/tags/teamspeak/index.html delete mode 100644 public/tags/teamspeak/index.xml delete mode 100644 public/tags/tools/index.html delete mode 100644 public/tags/tools/index.xml delete mode 100644 public/tags/串口/index.html delete mode 100644 public/tags/串口/index.xml delete mode 100644 public/tags/容器和虚拟化/index.html delete mode 100644 public/tags/容器和虚拟化/index.xml delete mode 100644 public/tags/数据恢复/index.html delete mode 100644 public/tags/数据恢复/index.xml delete mode 100644 public/tags/显卡/index.html delete mode 100644 public/tags/显卡/index.xml delete mode 100644 public/tags/网络/index.html delete mode 100644 public/tags/网络/index.xml delete mode 100644 public/tags/群晖/index.html delete mode 100644 public/tags/群晖/index.xml delete mode 100644 public/tags/触摸屏/index.html delete mode 100644 public/tags/触摸屏/index.xml delete mode 100644 public/tags/软件/index.html delete mode 100644 public/tags/软件/index.xml diff --git a/public/404.html b/public/404.html deleted file mode 100644 index a993585..0000000 --- a/public/404.html +++ /dev/null @@ -1,40 +0,0 @@ - - - -
- -

- 404 -

-
-

This page could not be found.

-
-
- - diff --git a/public/about-card/index.html b/public/about-card/index.html deleted file mode 100644 index 06499e2..0000000 --- a/public/about-card/index.html +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - -Kushidou – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容
-
- - -
- - -
- - - - -
-
- -
-

Kushidou

-
-
- -
-
-
- - - -
-
-
- - - - - - - - diff --git a/public/about/index.html b/public/about/index.html deleted file mode 100644 index adb6fa4..0000000 --- a/public/about/index.html +++ /dev/null @@ -1,614 +0,0 @@ - - - - - - - -关于我 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容
-
- - -
- - -
- - - - -
-
- -
-

关于我

-
-
-
-
- Kushidou -
-
-

Kushidou

-

什么都学,却什么都不精通的一个小白 :P

- -
-
-
-

自我介绍 -

-

我是一名嵌入式工程师,平时喜欢折腾各种开源软件和硬件。这个博客用来记录技术探索过程中的笔记和心得,也包括一些日常生活和摄影的分享。

-
-

技能与方向 -

-
    -
  • 嵌入式开发 — Linux 系统开发、驱动调试、交叉编译
  • -
  • 开源软件 — Docker、Hugo、各类 CLI 工具
  • -
  • 网络与服务 — 自建 NAS、内网穿透、家庭服务器
  • -
  • 摄影 — 风光 / 街拍 / 生活记录
  • -
- -
-
-
- - - -
-
-
- - - - - - - - diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 7f0493c7efdff87df4aa2b69907e5e139aa65d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7296 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 aw1?3)!!yhudWBvfMZiGM6jh_+9P@twy3z#z diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png deleted file mode 100644 index faea4c2fdfc9d9e28b87c2aab2c24bac43a74c8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27677 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 T^_}^rr2t^}jPF+HJdXJvBP!h= diff --git a/public/categories/index.html b/public/categories/index.html deleted file mode 100644 index 9600dfc..0000000 --- a/public/categories/index.html +++ /dev/null @@ -1,498 +0,0 @@ - - - - - - - -Categories – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/categories/index.xml b/public/categories/index.xml deleted file mode 100644 index a23d2fe..0000000 --- a/public/categories/index.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - 香风家的火柴盒 – Categories - https://www.small09.top/categories/ - Recent content in Categories on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - - - - - - - - - - - diff --git a/public/css/compiled/main.css b/public/css/compiled/main.css deleted file mode 100644 index 4e314b4..0000000 --- a/public/css/compiled/main.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--hx-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--hx-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--hx-color-red-100:oklch(93.6% .032 17.717);--hx-color-red-200:oklch(88.5% .062 18.334);--hx-color-red-900:oklch(39.6% .141 25.723);--hx-color-orange-50:oklch(98% .016 73.684);--hx-color-orange-100:oklch(95.4% .038 75.164);--hx-color-orange-300:oklch(83.7% .128 66.29);--hx-color-orange-400:oklch(75% .183 55.934);--hx-color-orange-800:oklch(47% .157 37.304);--hx-color-amber-100:oklch(96.2% .059 95.617);--hx-color-amber-200:oklch(92.4% .12 95.746);--hx-color-amber-900:oklch(41.4% .112 45.904);--hx-color-yellow-50:oklch(98.7% .026 102.212);--hx-color-yellow-100:oklch(97.3% .071 103.193);--hx-color-yellow-200:oklch(94.5% .129 101.54);--hx-color-yellow-700:oklch(55.4% .135 66.442);--hx-color-yellow-900:oklch(42.1% .095 57.708);--hx-color-green-100:oklch(96.2% .044 156.743);--hx-color-green-200:oklch(92.5% .084 155.995);--hx-color-green-900:oklch(39.3% .095 152.535);--hx-color-blue-100:oklch(93.2% .032 255.585);--hx-color-blue-200:oklch(88.2% .059 254.128);--hx-color-blue-900:oklch(37.9% .146 265.522);--hx-color-indigo-100:oklch(93% .034 272.788);--hx-color-indigo-200:oklch(87% .065 274.039);--hx-color-indigo-900:oklch(35.9% .144 278.697);--hx-color-purple-100:oklch(94.6% .033 307.174);--hx-color-purple-200:oklch(90.2% .063 306.703);--hx-color-purple-900:oklch(38.1% .176 304.987);--hx-color-slate-50:oklch(98.4% .003 247.858);--hx-color-slate-100:oklch(96.8% .007 247.896);--hx-color-slate-900:oklch(20.8% .042 265.755);--hx-color-gray-50:oklch(98.5% .002 247.839);--hx-color-gray-100:oklch(96.7% .003 264.542);--hx-color-gray-200:oklch(92.8% .006 264.531);--hx-color-gray-300:oklch(87.2% .01 258.338);--hx-color-gray-400:oklch(70.7% .022 261.325);--hx-color-gray-500:oklch(55.1% .027 264.364);--hx-color-gray-600:oklch(44.6% .03 256.802);--hx-color-gray-700:oklch(37.3% .034 259.733);--hx-color-gray-800:oklch(27.8% .033 256.848);--hx-color-gray-900:oklch(21% .034 264.665);--hx-color-neutral-50:oklch(98.5% 0 0);--hx-color-neutral-200:oklch(92.2% 0 0);--hx-color-neutral-300:oklch(87% 0 0);--hx-color-neutral-400:oklch(70.8% 0 0);--hx-color-neutral-500:oklch(55.6% 0 0);--hx-color-neutral-600:oklch(43.9% 0 0);--hx-color-neutral-700:oklch(37.1% 0 0);--hx-color-neutral-800:oklch(26.9% 0 0);--hx-color-neutral-900:oklch(20.5% 0 0);--hx-color-black:#000;--hx-color-white:#fff;--hx-spacing:.25rem;--hx-breakpoint-xl:80rem;--hx-text-xs:.75rem;--hx-text-xs--line-height:calc(1/.75);--hx-text-sm:.875rem;--hx-text-sm--line-height:calc(1.25/.875);--hx-text-base:1rem;--hx-text-base--line-height:calc(1.5/1);--hx-text-lg:1.125rem;--hx-text-lg--line-height:calc(1.75/1.125);--hx-text-xl:1.25rem;--hx-text-xl--line-height:calc(1.75/1.25);--hx-text-2xl:1.5rem;--hx-text-2xl--line-height:calc(2/1.5);--hx-text-3xl:1.875rem;--hx-text-3xl--line-height:calc(2.25/1.875);--hx-text-4xl:2.25rem;--hx-text-4xl--line-height:calc(2.5/2.25);--hx-text-5xl:3rem;--hx-text-5xl--line-height:1;--hx-font-weight-normal:400;--hx-font-weight-medium:500;--hx-font-weight-semibold:600;--hx-font-weight-bold:700;--hx-font-weight-extrabold:800;--hx-tracking-tighter:-.05em;--hx-tracking-tight:-.025em;--hx-leading-tight:1.25;--hx-radius-xs:.125rem;--hx-radius-sm:.25rem;--hx-radius-md:.375rem;--hx-radius-lg:.5rem;--hx-radius-xl:.75rem;--hx-radius-3xl:1.5rem;--hx-ease-in:cubic-bezier(.4,0,1,1);--hx-ease-out:cubic-bezier(0,0,.2,1);--hx-ease-in-out:cubic-bezier(.4,0,.2,1);--hx-blur-md:12px;--hx-default-transition-duration:.15s;--hx-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--hx-default-font-family:var(--hx-font-sans);--hx-default-mono-font-family:var(--hx-font-mono);--hx-color-primary-100:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*44));--hx-color-primary-200:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*36));--hx-color-primary-300:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*27));--hx-color-primary-400:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*16));--hx-color-primary-500:hsl(var(--primary-hue)var(--primary-saturation)var(--primary-lightness));--hx-color-primary-600:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*45));--hx-color-primary-700:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*39));--hx-color-primary-800:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*32));--hx-color-primary-900:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*24));--hx-color-dark:#111}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--hx-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--hx-default-font-feature-settings,normal);font-variation-settings:var(--hx-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hx-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--hx-default-mono-font-feature-settings,normal);font-variation-settings:var(--hx-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}abbr:where([title]){cursor:help}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible:where(.dark,.dark *){--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}}@layer components;@layer utilities{.hx\:pointer-events-none{pointer-events:none}.hx\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hx\:absolute{position:absolute}.hx\:relative{position:relative}.hx\:sticky{position:sticky}.hx\:inset-x-0{inset-inline:calc(var(--hx-spacing)*0)}.hx\:inset-y-0{inset-block:calc(var(--hx-spacing)*0)}.hx\:top-0{top:calc(var(--hx-spacing)*0)}.hx\:top-1\/2{top:50%}.hx\:top-8{top:calc(var(--hx-spacing)*8)}.hx\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:top-\[40\%\]{top:40%}.hx\:top-full{top:100%}.hx\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:bottom-0{bottom:calc(var(--hx-spacing)*0)}.hx\:left-0{left:calc(var(--hx-spacing)*0)}.hx\:left-\[24px\]{left:24px}.hx\:left-\[36px\]{left:36px}.hx\:z-20{z-index:20}.hx\:z-\[-1\]{z-index:-1}.hx\:order-last{order:9999}.hx\:m-\[11px\]{margin:11px}.hx\:mx-1{margin-inline:calc(var(--hx-spacing)*1)}.hx\:mx-4{margin-inline:calc(var(--hx-spacing)*4)}.hx\:mx-auto{margin-inline:auto}.hx\:my-1{margin-block:calc(var(--hx-spacing)*1)}.hx\:my-1\.5{margin-block:calc(var(--hx-spacing)*1.5)}.hx\:my-2{margin-block:calc(var(--hx-spacing)*2)}.hx\:-mt-20{margin-top:calc(var(--hx-spacing)*-20)}.hx\:mt-1{margin-top:calc(var(--hx-spacing)*1)}.hx\:mt-1\.5{margin-top:calc(var(--hx-spacing)*1.5)}.hx\:mt-2{margin-top:calc(var(--hx-spacing)*2)}.hx\:mt-4{margin-top:calc(var(--hx-spacing)*4)}.hx\:mt-5{margin-top:calc(var(--hx-spacing)*5)}.hx\:mt-6{margin-top:calc(var(--hx-spacing)*6)}.hx\:mt-8{margin-top:calc(var(--hx-spacing)*8)}.hx\:mt-12{margin-top:calc(var(--hx-spacing)*12)}.hx\:mt-16{margin-top:calc(var(--hx-spacing)*16)}.hx\:mt-auto{margin-top:auto}.hx\:-mr-2{margin-right:calc(var(--hx-spacing)*-2)}.hx\:mr-1{margin-right:calc(var(--hx-spacing)*1)}.hx\:mr-2{margin-right:calc(var(--hx-spacing)*2)}.hx\:-mb-0\.5{margin-bottom:calc(var(--hx-spacing)*-.5)}.hx\:mb-0{margin-bottom:calc(var(--hx-spacing)*0)}.hx\:mb-2{margin-bottom:calc(var(--hx-spacing)*2)}.hx\:mb-4{margin-bottom:calc(var(--hx-spacing)*4)}.hx\:mb-6{margin-bottom:calc(var(--hx-spacing)*6)}.hx\:mb-8{margin-bottom:calc(var(--hx-spacing)*8)}.hx\:mb-10{margin-bottom:calc(var(--hx-spacing)*10)}.hx\:mb-12{margin-bottom:calc(var(--hx-spacing)*12)}.hx\:mb-16{margin-bottom:calc(var(--hx-spacing)*16)}.hx\:-ml-2{margin-left:calc(var(--hx-spacing)*-2)}.hx\:ml-2{margin-left:calc(var(--hx-spacing)*2)}.hx\:ml-4{margin-left:calc(var(--hx-spacing)*4)}.hx\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hx\:block{display:block}.hx\:flex{display:flex}.hx\:grid{display:grid}.hx\:hidden{display:none}.hx\:inline{display:inline}.hx\:inline-block{display:inline-block}.hx\:inline-flex{display:inline-flex}.hx\:aspect-auto{aspect-ratio:auto}.hx\:size-4{width:calc(var(--hx-spacing)*4);height:calc(var(--hx-spacing)*4)}.hx\:h-0{height:calc(var(--hx-spacing)*0)}.hx\:h-2{height:calc(var(--hx-spacing)*2)}.hx\:h-3\.5{height:calc(var(--hx-spacing)*3.5)}.hx\:h-4{height:calc(var(--hx-spacing)*4)}.hx\:h-5{height:calc(var(--hx-spacing)*5)}.hx\:h-7{height:calc(var(--hx-spacing)*7)}.hx\:h-10{height:calc(var(--hx-spacing)*10)}.hx\:h-16{height:calc(var(--hx-spacing)*16)}.hx\:h-\[18px\]{height:18px}.hx\:h-full{height:100%}.hx\:h-px{height:1px}.hx\:max-h-\(--menu-height\){max-height:var(--menu-height)}.hx\:max-h-64{max-height:calc(var(--hx-spacing)*64)}.hx\:max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom))}.hx\:max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}.hx\:min-h-\[100px\]{min-height:100px}.hx\:min-h-\[calc\(100vh-var\(--navbar-height\)\)\]{min-height:calc(100vh - var(--navbar-height))}.hx\:w-2{width:calc(var(--hx-spacing)*2)}.hx\:w-3\.5{width:calc(var(--hx-spacing)*3.5)}.hx\:w-4{width:calc(var(--hx-spacing)*4)}.hx\:w-10{width:calc(var(--hx-spacing)*10)}.hx\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:w-\[110\%\]{width:110%}.hx\:w-\[180\%\]{width:180%}.hx\:w-full{width:100%}.hx\:w-max{width:max-content}.hx\:w-screen{width:100vw}.hx\:max-w-\[50\%\]{max-width:50%}.hx\:max-w-\[90rem\]{max-width:90rem}.hx\:max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\]{max-width:min(100vw - 2rem,100% + 20rem)}.hx\:max-w-full{max-width:100%}.hx\:max-w-none{max-width:none}.hx\:max-w-screen-xl{max-width:var(--hx-breakpoint-xl)}.hx\:min-w-0{min-width:calc(var(--hx-spacing)*0)}.hx\:min-w-\[18px\]{min-width:18px}.hx\:min-w-\[24px\]{min-width:24px}.hx\:min-w-full{min-width:100%}.hx\:shrink-0{flex-shrink:0}.hx\:grow{flex-grow:1}.hx\:origin-center{transform-origin:50%}.hx\:-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hx\:cursor-default{cursor:default}.hx\:cursor-pointer{cursor:pointer}.hx\:scroll-my-6{scroll-margin-block:calc(var(--hx-spacing)*6)}.hx\:scroll-py-6{scroll-padding-block:calc(var(--hx-spacing)*6)}.hx\:list-none{list-style-type:none}.hx\:appearance-none{appearance:none}.hx\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.hx\:flex-col{flex-direction:column}.hx\:flex-wrap{flex-wrap:wrap}.hx\:items-baseline{align-items:baseline}.hx\:items-center{align-items:center}.hx\:items-start{align-items:flex-start}.hx\:justify-between{justify-content:space-between}.hx\:justify-center{justify-content:center}.hx\:justify-end{justify-content:flex-end}.hx\:justify-start{justify-content:flex-start}.hx\:justify-items-start{justify-items:start}.hx\:gap-1{gap:calc(var(--hx-spacing)*1)}.hx\:gap-1\.5{gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-2{gap:calc(var(--hx-spacing)*2)}.hx\:gap-4{gap:calc(var(--hx-spacing)*4)}.hx\:gap-x-1\.5{column-gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-x-2{column-gap:calc(var(--hx-spacing)*2)}.hx\:gap-y-1{row-gap:calc(var(--hx-spacing)*1)}.hx\:gap-y-2{row-gap:calc(var(--hx-spacing)*2)}.hx\:overflow-auto{overflow:auto}.hx\:overflow-hidden{overflow:hidden}.hx\:overflow-x-auto{overflow-x:auto}.hx\:overflow-x-hidden{overflow-x:hidden}.hx\:overflow-y-auto{overflow-y:auto}.hx\:overflow-y-hidden{overflow-y:hidden}.hx\:overscroll-contain{overscroll-behavior:contain}.hx\:overscroll-x-contain{overscroll-behavior-x:contain}.hx\:rounded-3xl{border-radius:var(--hx-radius-3xl)}.hx\:rounded-full{border-radius:3.40282e38px}.hx\:rounded-lg{border-radius:var(--hx-radius-lg)}.hx\:rounded-md{border-radius:var(--hx-radius-md)}.hx\:rounded-sm{border-radius:var(--hx-radius-sm)}.hx\:rounded-xl{border-radius:var(--hx-radius-xl)}.hx\:rounded-xs{border-radius:var(--hx-radius-xs)}.hx\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.hx\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:border-0{border-style:var(--tw-border-style);border-width:0}.hx\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.hx\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hx\:border-amber-200{border-color:var(--hx-color-amber-200)}.hx\:border-black\/5{border-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.hx\:border-black\/5{border-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:border-blue-200{border-color:var(--hx-color-blue-200)}.hx\:border-gray-200{border-color:var(--hx-color-gray-200)}.hx\:border-gray-500{border-color:var(--hx-color-gray-500)}.hx\:border-green-200{border-color:var(--hx-color-green-200)}.hx\:border-indigo-200{border-color:var(--hx-color-indigo-200)}.hx\:border-orange-100{border-color:var(--hx-color-orange-100)}.hx\:border-purple-200{border-color:var(--hx-color-purple-200)}.hx\:border-red-200{border-color:var(--hx-color-red-200)}.hx\:border-transparent{border-color:#0000}.hx\:border-yellow-100{border-color:var(--hx-color-yellow-100)}.hx\:bg-amber-100{background-color:var(--hx-color-amber-100)}.hx\:bg-black\/\[\.05\]{background-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.hx\:bg-black\/\[\.05\]{background-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:bg-blue-100{background-color:var(--hx-color-blue-100)}.hx\:bg-gray-100{background-color:var(--hx-color-gray-100)}.hx\:bg-gray-200{background-color:var(--hx-color-gray-200)}.hx\:bg-green-100{background-color:var(--hx-color-green-100)}.hx\:bg-indigo-100{background-color:var(--hx-color-indigo-100)}.hx\:bg-neutral-50{background-color:var(--hx-color-neutral-50)}.hx\:bg-neutral-900{background-color:var(--hx-color-neutral-900)}.hx\:bg-orange-50{background-color:var(--hx-color-orange-50)}.hx\:bg-primary-100{background-color:var(--hx-color-primary-100)}.hx\:bg-primary-400{background-color:var(--hx-color-primary-400)}.hx\:bg-primary-600{background-color:var(--hx-color-primary-600)}.hx\:bg-primary-700\/5{background-color:var(--hx-color-primary-700)}@supports (color:color-mix(in lab, red, red)){.hx\:bg-primary-700\/5{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hx\:bg-purple-100{background-color:var(--hx-color-purple-100)}.hx\:bg-red-100{background-color:var(--hx-color-red-100)}.hx\:bg-transparent{background-color:#0000}.hx\:bg-white{background-color:var(--hx-color-white)}.hx\:bg-yellow-50{background-color:var(--hx-color-yellow-50)}.hx\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hx\:from-gray-900{--tw-gradient-from:var(--hx-color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:to-gray-600{--tw-gradient-to:var(--hx-color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.hx\:p-0{padding:calc(var(--hx-spacing)*0)}.hx\:p-0\.5{padding:calc(var(--hx-spacing)*.5)}.hx\:p-1{padding:calc(var(--hx-spacing)*1)}.hx\:p-1\.5{padding:calc(var(--hx-spacing)*1.5)}.hx\:p-2{padding:calc(var(--hx-spacing)*2)}.hx\:p-4{padding:calc(var(--hx-spacing)*4)}.hx\:p-6{padding:calc(var(--hx-spacing)*6)}.hx\:px-1\.5{padding-inline:calc(var(--hx-spacing)*1.5)}.hx\:px-2{padding-inline:calc(var(--hx-spacing)*2)}.hx\:px-2\.5{padding-inline:calc(var(--hx-spacing)*2.5)}.hx\:px-3{padding-inline:calc(var(--hx-spacing)*3)}.hx\:px-4{padding-inline:calc(var(--hx-spacing)*4)}.hx\:px-6{padding-inline:calc(var(--hx-spacing)*6)}.hx\:px-8{padding-inline:calc(var(--hx-spacing)*8)}.hx\:py-1{padding-block:calc(var(--hx-spacing)*1)}.hx\:py-1\.5{padding-block:calc(var(--hx-spacing)*1.5)}.hx\:py-2{padding-block:calc(var(--hx-spacing)*2)}.hx\:py-2\.5{padding-block:calc(var(--hx-spacing)*2.5)}.hx\:py-3{padding-block:calc(var(--hx-spacing)*3)}.hx\:py-4{padding-block:calc(var(--hx-spacing)*4)}.hx\:py-12{padding-block:calc(var(--hx-spacing)*12)}.hx\:pt-4{padding-top:calc(var(--hx-spacing)*4)}.hx\:pt-6{padding-top:calc(var(--hx-spacing)*6)}.hx\:pt-8{padding-top:calc(var(--hx-spacing)*8)}.hx\:pr-2{padding-right:calc(var(--hx-spacing)*2)}.hx\:pr-4{padding-right:calc(var(--hx-spacing)*4)}.hx\:pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-left),1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.hx\:pb-8{padding-bottom:calc(var(--hx-spacing)*8)}.hx\:pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.hx\:pb-px{padding-bottom:1px}.hx\:pl-6{padding-left:calc(var(--hx-spacing)*6)}.hx\:pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.hx\:text-center{text-align:center}.hx\:text-left{text-align:left}.hx\:align-\[-2\.5px\]{vertical-align:-2.5px}.hx\:align-baseline{vertical-align:baseline}.hx\:align-middle{vertical-align:middle}.hx\:align-text-bottom{vertical-align:text-bottom}.hx\:font-mono{font-family:var(--hx-font-mono)}.hx\:text-2xl{font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height))}.hx\:text-4xl{font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height))}.hx\:text-base{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height))}.hx\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}.hx\:text-xs{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height))}.hx\:text-\[\.65rem\]{font-size:.65rem}.hx\:text-\[10px\]{font-size:10px}.hx\:leading-5{--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5)}.hx\:leading-6{--tw-leading:calc(var(--hx-spacing)*6);line-height:calc(var(--hx-spacing)*6)}.hx\:leading-7{--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hx\:leading-none{--tw-leading:1;line-height:1}.hx\:leading-tight{--tw-leading:var(--hx-leading-tight);line-height:var(--hx-leading-tight)}.hx\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:font-extrabold{--tw-font-weight:var(--hx-font-weight-extrabold);font-weight:var(--hx-font-weight-extrabold)}.hx\:font-medium{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:font-normal{--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal)}.hx\:font-semibold{--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hx\:tracking-tight{--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight)}.hx\:tracking-tighter{--tw-tracking:var(--hx-tracking-tighter);letter-spacing:var(--hx-tracking-tighter)}.hx\:break-words,.hx\:wrap-break-word{overflow-wrap:break-word}.hx\:text-ellipsis{text-overflow:ellipsis}.hx\:whitespace-nowrap{white-space:nowrap}.hx\:text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\]{color:hsl(var(--primary-hue),100%,50%)}.hx\:text-amber-900{color:var(--hx-color-amber-900)}.hx\:text-blue-900{color:var(--hx-color-blue-900)}.hx\:text-current{color:currentColor}.hx\:text-gray-100{color:var(--hx-color-gray-100)}.hx\:text-gray-500{color:var(--hx-color-gray-500)}.hx\:text-gray-600{color:var(--hx-color-gray-600)}.hx\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:text-green-900{color:var(--hx-color-green-900)}.hx\:text-indigo-900{color:var(--hx-color-indigo-900)}.hx\:text-orange-800{color:var(--hx-color-orange-800)}.hx\:text-primary-800{color:var(--hx-color-primary-800)}.hx\:text-purple-900{color:var(--hx-color-purple-900)}.hx\:text-red-900{color:var(--hx-color-red-900)}.hx\:text-slate-50{color:var(--hx-color-slate-50)}.hx\:text-slate-900{color:var(--hx-color-slate-900)}.hx\:text-transparent{color:#0000}.hx\:text-white{color:var(--hx-color-white)}.hx\:text-yellow-900{color:var(--hx-color-yellow-900)}.hx\:capitalize{text-transform:capitalize}.hx\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.hx\:no-underline{text-decoration-line:none}.hx\:underline{text-decoration-line:underline}.hx\:decoration-from-font{text-decoration-thickness:from-font}.hx\:underline-offset-2{text-underline-offset:2px}.hx\:opacity-0{opacity:0}.hx\:opacity-50{opacity:.5}.hx\:opacity-80{opacity:.8}.hx\:shadow-\[0_-12px_16px_\#fff\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,white);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\]{--tw-shadow:0 2px 4px var(--tw-shadow-color,#00000005),0 1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hextra-focus-visible:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}.hx\:hextra-focus-visible:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}.hx\:hextra-focus-visible-inset:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.hx\:hextra-focus-visible-inset:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800)}.hx\:shadow-gray-100{--tw-shadow-color:var(--hx-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.hx\:shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}.hx\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:duration-75{--tw-duration:75ms;transition-duration:75ms}.hx\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hx\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hx\:ease-in{--tw-ease:var(--hx-ease-in);transition-timing-function:var(--hx-ease-in)}.hx\:ease-in-out{--tw-ease:var(--hx-ease-in-out);transition-timing-function:var(--hx-ease-in-out)}.hx\:outline-none{--tw-outline-style:none;outline-style:none}.hx\:select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hx\:group-hover\:text-gray-900:is(:where(.hx\:group):hover *){color:var(--hx-color-gray-900)}.hx\:group-hover\:underline:is(:where(.hx\:group):hover *){text-decoration-line:underline}.hx\:group-hover\/code\:opacity-100:is(:where(.hx\:group\/code):hover *){opacity:1}}.hx\:group-data-\[active\=true\]\:text-primary-800:is(:where(.hx\:group)[data-active=true] *){color:var(--hx-color-primary-800)}.hx\:group-data-\[theme\=dark\]\:hidden:is(:where(.hx\:group)[data-theme=dark] *),.hx\:group-data-\[theme\=light\]\:hidden:is(:where(.hx\:group)[data-theme=light] *),.hx\:group-data-\[theme\=system\]\:hidden:is(:where(.hx\:group)[data-theme=system] *){display:none}.hx\:group-\[\.copied\]\/copybtn\:block:is(:where(.hx\:group\/copybtn).copied *){display:block}.hx\:group-\[\.copied\]\/copybtn\:hidden:is(:where(.hx\:group\/copybtn).copied *){display:none}.hx\:placeholder\:text-gray-500::placeholder{color:var(--hx-color-gray-500)}.hx\:before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.hx\:before\:absolute:before{content:var(--tw-content);position:absolute}.hx\:before\:inset-0:before{content:var(--tw-content);inset:calc(var(--hx-spacing)*0)}.hx\:before\:inset-y-1:before{content:var(--tw-content);inset-block:calc(var(--hx-spacing)*1)}.hx\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--hx-spacing)*1)}.hx\:before\:inline-block:before{content:var(--tw-content);display:inline-block}.hx\:before\:w-px:before{content:var(--tw-content);width:1px}.hx\:before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--hx-color-gray-200)}.hx\:before\:opacity-25:before{content:var(--tw-content);opacity:.25}.hx\:before\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\'\#\'\]:before{--tw-content:"#";content:var(--tw-content)}.hx\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.hx\:group-open\:before\:rotate-90:is(:where(.hx\:group):is([open],:popover-open,:open) *):before{content:var(--tw-content);rotate:90deg}.hx\:first\:mt-0:first-child{margin-top:calc(var(--hx-spacing)*0)}.hx\:last-of-type\:mb-0:last-of-type{margin-bottom:calc(var(--hx-spacing)*0)}@media (hover:hover){.hx\:hover\:border-gray-200:hover{border-color:var(--hx-color-gray-200)}.hx\:hover\:border-gray-300:hover{border-color:var(--hx-color-gray-300)}.hx\:hover\:border-gray-400:hover{border-color:var(--hx-color-gray-400)}.hx\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}.hx\:hover\:bg-gray-100:hover{background-color:var(--hx-color-gray-100)}.hx\:hover\:bg-gray-800\/5:hover{background-color:var(--hx-color-gray-800)}@supports (color:color-mix(in lab, red, red)){.hx\:hover\:bg-gray-800\/5:hover{background-color:color-mix(in oklab,var(--hx-color-gray-800)5%,transparent)}}.hx\:hover\:bg-primary-700:hover{background-color:var(--hx-color-primary-700)}.hx\:hover\:bg-slate-50:hover{background-color:var(--hx-color-slate-50)}.hx\:hover\:text-black:hover{color:var(--hx-color-black)}.hx\:hover\:text-gray-700:hover{color:var(--hx-color-gray-700)}.hx\:hover\:text-gray-800:hover{color:var(--hx-color-gray-800)}.hx\:hover\:text-gray-900:hover{color:var(--hx-color-gray-900)}.hx\:hover\:text-primary-600:hover{color:var(--hx-color-primary-600)}.hx\:hover\:opacity-60:hover{opacity:.6}.hx\:hover\:opacity-75:hover{opacity:.75}.hx\:hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:var(--hx-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}}.hx\:focus-visible\:not-sr-only:focus-visible{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.hx\:focus-visible\:fixed:focus-visible{position:fixed}.hx\:focus-visible\:top-2:focus-visible{top:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:left-2:focus-visible{left:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:z-50:focus-visible{z-index:50}.hx\:focus-visible\:rounded-md:focus-visible{border-radius:var(--hx-radius-md)}.hx\:focus-visible\:bg-primary-500:focus-visible{background-color:var(--hx-color-primary-500)}.hx\:focus-visible\:bg-white:focus-visible{background-color:var(--hx-color-white)}.hx\:focus-visible\:px-4:focus-visible{padding-inline:calc(var(--hx-spacing)*4)}.hx\:focus-visible\:py-2:focus-visible{padding-block:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:text-sm:focus-visible{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:focus-visible\:font-medium:focus-visible{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:focus-visible\:text-white:focus-visible{color:var(--hx-color-white)}.hx\:active\:bg-gray-400\/20:active{background-color:var(--hx-color-gray-400)}@supports (color:color-mix(in lab, red, red)){.hx\:active\:bg-gray-400\/20:active{background-color:color-mix(in oklab,var(--hx-color-gray-400)20%,transparent)}}.hx\:active\:opacity-50:active{opacity:.5}.hx\:active\:shadow-sm:active{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:active\:shadow-gray-200:active{--tw-shadow-color:var(--hx-color-gray-200)}@supports (color:color-mix(in lab, red, red)){.hx\:active\:shadow-gray-200:active{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-200)var(--tw-shadow-alpha),transparent)}}.hx\:data-\[state\=closed\]\:hidden[data-state=closed],.hx\:data-\[state\=open\]\:hidden[data-state=open]{display:none}.hx\:data-\[state\=selected\]\:block[data-state=selected]{display:block}.hx\:data-\[state\=selected\]\:border-primary-500[data-state=selected]{border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:text-primary-600[data-state=selected]{color:var(--hx-color-primary-600)}@media (prefers-contrast:more){.hx\:contrast-more\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:contrast-more\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:contrast-more\:border-current{border-color:currentColor}.hx\:contrast-more\:border-gray-800{border-color:var(--hx-color-gray-800)}.hx\:contrast-more\:border-gray-900{border-color:var(--hx-color-gray-900)}.hx\:contrast-more\:border-neutral-400{border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:border-primary-500{border-color:var(--hx-color-primary-500)}.hx\:contrast-more\:border-transparent{border-color:#0000}.hx\:contrast-more\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:contrast-more\:text-current{color:currentColor}.hx\:contrast-more\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:contrast-more\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:contrast-more\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:contrast-more\:underline{text-decoration-line:underline}.hx\:contrast-more\:shadow-\[0_0_0_1px_\#000\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hx\:contrast-more\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}}}@media not all and (min-width:80rem){.hx\:max-xl\:hidden{display:none}}@media not all and (min-width:64rem){.hx\:max-lg\:min-h-\[340px\]{min-height:340px}}@media not all and (min-width:48rem){.hx\:max-md\:sticky{position:sticky}.hx\:max-md\:hidden{display:none}.hx\:max-md\:min-h-\[340px\]{min-height:340px}.hx\:max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\]{transform:translateY(-100%)}.hx\:max-md\:\[transform\:translate3d\(0\,0\,0\)\]{transform:translate(0)}}@media not all and (min-width:40rem){.hx\:max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media (min-width:40rem){.hx\:sm\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:sm\:left-auto{left:auto}.hx\:sm\:block{display:block}.hx\:sm\:flex{display:flex}.hx\:sm\:w-\[110\%\]{width:110%}.hx\:sm\:flex-row{flex-direction:row}.hx\:sm\:items-center{align-items:center}.hx\:sm\:items-start{align-items:flex-start}.hx\:sm\:justify-between{justify-content:space-between}.hx\:sm\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}@media not all and (min-width:64rem){.hx\:sm\:max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@media (min-width:48rem){.hx\:md\:sticky{position:sticky}.hx\:md\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:md\:mr-0{margin-right:calc(var(--hx-spacing)*0)}.hx\:md\:hidden{display:none}.hx\:md\:inline-block{display:inline-block}.hx\:md\:inline-flex{display:inline-flex}.hx\:md\:aspect-\[1\.1\/1\]{aspect-ratio:1.1}.hx\:md\:h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\]{height:calc(100vh - var(--navbar-height) - var(--menu-height))}.hx\:md\:max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px)}.hx\:md\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:md\:shrink-0{flex-shrink:0}.hx\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hx\:md\:justify-start{justify-content:flex-start}.hx\:md\:self-start{align-self:flex-start}.hx\:md\:overflow-auto{overflow:auto}.hx\:md\:px-12{padding-inline:calc(var(--hx-spacing)*12)}.hx\:md\:pt-12{padding-top:calc(var(--hx-spacing)*12)}.hx\:md\:text-3xl{font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height))}.hx\:md\:text-5xl{font-size:var(--hx-text-5xl);line-height:var(--tw-leading,var(--hx-text-5xl--line-height))}.hx\:md\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:md\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}}@media (min-width:64rem){.hx\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:80rem){.hx\:xl\:block{display:block}.hx\:xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.hx\:ltr\:right-1\.5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*1.5)}.hx\:ltr\:right-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*2)}.hx\:ltr\:right-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*3)}.hx\:ltr\:-mr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:calc(var(--hx-spacing)*-4)}.hx\:ltr\:mr-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:auto}.hx\:ltr\:ml-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.hx\:ltr\:ml-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:ml-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:auto}.hx\:ltr\:rotate-180:where(:dir(ltr),[dir=ltr],[dir=ltr] *){rotate:180deg}.hx\:ltr\:rounded-l-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:ltr\:rounded-r-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:ltr\:border-l:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);border-left-width:1px}.hx\:ltr\:pr-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*0)}.hx\:ltr\:pr-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*1)}.hx\:ltr\:pr-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*2)}.hx\:ltr\:pr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:ltr\:pr-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:ltr\:pr-9:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*9)}.hx\:ltr\:pl-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:pl-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:ltr\:pl-5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*5)}.hx\:ltr\:pl-6:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*6)}.hx\:ltr\:pl-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:ltr\:pl-12:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*12)}.hx\:ltr\:pl-16:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*16)}.hx\:ltr\:text-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){text-align:right}.hx\:ltr\:before\:left-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);left:calc(var(--hx-spacing)*0)}@media (min-width:48rem){.hx\:ltr\:md\:left-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){left:auto}}.hx\:rtl\:left-1\.5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*1.5)}.hx\:rtl\:left-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*2)}.hx\:rtl\:left-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}.hx\:rtl\:mr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.hx\:rtl\:-ml-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--hx-spacing)*-4)}.hx\:rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.hx\:rtl\:-rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-180deg}.hx\:rtl\:rotate-270:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:270deg}.hx\:rtl\:rounded-l-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:rtl\:rounded-r-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:rtl\:border-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);border-right-width:1px}.hx\:rtl\:pr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:pr-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:rtl\:pr-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*5)}.hx\:rtl\:pr-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*6)}.hx\:rtl\:pr-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:rtl\:pr-12:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*12)}.hx\:rtl\:pr-16:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*16)}.hx\:rtl\:pl-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*0)}.hx\:rtl\:pl-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*1)}.hx\:rtl\:pl-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*2)}.hx\:rtl\:pl-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:rtl\:pl-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:rtl\:pl-9:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*9)}.hx\:rtl\:text-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.hx\:rtl\:before\:right-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);right:calc(var(--hx-spacing)*0)}.hx\:rtl\:before\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);rotate:180deg}@media (min-width:48rem){.hx\:rtl\:md\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}}.hx\:dark\:block:where(.dark,.dark *){display:block}.hx\:dark\:hidden:where(.dark,.dark *){display:none}.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:var(--hx-color-amber-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-amber-200)30%,transparent)}}.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:var(--hx-color-blue-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-blue-200)30%,transparent)}}.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:var(--hx-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-gray-100)20%,transparent)}}.hx\:dark\:border-gray-400:where(.dark,.dark *){border-color:var(--hx-color-gray-400)}.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:var(--hx-color-green-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-green-200)30%,transparent)}}.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:var(--hx-color-indigo-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-indigo-200)30%,transparent)}}.hx\:dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--hx-color-neutral-700)}.hx\:dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:var(--hx-color-orange-400)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-orange-400)30%,transparent)}}.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:var(--hx-color-purple-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-purple-200)30%,transparent)}}.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:var(--hx-color-red-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-red-200)30%,transparent)}}.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:var(--hx-color-yellow-200)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-yellow-200)30%,transparent)}}.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:var(--hx-color-amber-900)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-amber-900)30%,transparent)}}.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:var(--hx-color-blue-900)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-blue-900)30%,transparent)}}.hx\:dark\:bg-dark:where(.dark,.dark *),.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:var(--hx-color-dark)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)50%,transparent)}}.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:var(--hx-color-gray-50)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-50)10%,transparent)}}.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:var(--hx-color-green-900)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-green-900)30%,transparent)}}.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:var(--hx-color-indigo-900)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-indigo-900)30%,transparent)}}.hx\:dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--hx-color-neutral-700)}.hx\:dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--hx-color-neutral-800)}.hx\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--hx-color-neutral-900)}.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:var(--hx-color-orange-400)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-orange-400)20%,transparent)}}.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-400)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-400)10%,transparent)}}.hx\:dark\:bg-primary-600:where(.dark,.dark *){background-color:var(--hx-color-primary-600)}.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:var(--hx-color-purple-900)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-purple-900)30%,transparent)}}.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:var(--hx-color-red-900)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-red-900)30%,transparent)}}.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:var(--hx-color-yellow-700)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-yellow-700)30%,transparent)}}.hx\:dark\:from-gray-100:where(.dark,.dark *){--tw-gradient-from:var(--hx-color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:to-gray-400:where(.dark,.dark *){--tw-gradient-to:var(--hx-color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:text-amber-200:where(.dark,.dark *){color:var(--hx-color-amber-200)}.hx\:dark\:text-blue-200:where(.dark,.dark *){color:var(--hx-color-blue-200)}.hx\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:dark\:text-gray-200:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hx\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:dark\:text-gray-400:where(.dark,.dark *){color:var(--hx-color-gray-400)}.hx\:dark\:text-green-200:where(.dark,.dark *){color:var(--hx-color-green-200)}.hx\:dark\:text-indigo-200:where(.dark,.dark *){color:var(--hx-color-indigo-200)}.hx\:dark\:text-neutral-200:where(.dark,.dark *){color:var(--hx-color-neutral-200)}.hx\:dark\:text-neutral-400:where(.dark,.dark *){color:var(--hx-color-neutral-400)}.hx\:dark\:text-orange-300:where(.dark,.dark *){color:var(--hx-color-orange-300)}.hx\:dark\:text-primary-600:where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:text-purple-200:where(.dark,.dark *){color:var(--hx-color-purple-200)}.hx\:dark\:text-red-200:where(.dark,.dark *){color:var(--hx-color-red-200)}.hx\:dark\:text-slate-100:where(.dark,.dark *){color:var(--hx-color-slate-100)}.hx\:dark\:text-white:where(.dark,.dark *){color:var(--hx-color-white)}.hx\:dark\:text-yellow-200:where(.dark,.dark *){color:var(--hx-color-yellow-200)}.hx\:dark\:opacity-80:where(.dark,.dark *){opacity:.8}.hx\:dark\:shadow-\[0_-1px_0_rgba\(255\,255\,255\,\.1\)_inset\]:where(.dark,.dark *){--tw-shadow:0 -1px 0 var(--tw-shadow-color,#ffffff1a)inset;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-\[0_-12px_16px_\#111\]:where(.dark,.dark *){--tw-shadow:0 -12px 16px var(--tw-shadow-color,#111);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hx\:dark\:group-hover\:text-gray-50:where(.dark,.dark *):is(:where(.hx\:group):hover *){color:var(--hx-color-gray-50)}}.hx\:group-data-\[active\=true\]\:dark\:text-primary-600:is(:where(.hx\:group)[data-active=true] *):where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:placeholder\:text-gray-400:where(.dark,.dark *)::placeholder{color:var(--hx-color-gray-400)}.hx\:dark\:before\:bg-neutral-800:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hx\:dark\:before\:invert:where(.dark,.dark *):before{content:var(--tw-content);--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media (hover:hover){.hx\:dark\:hover\:border-gray-100:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-100)}.hx\:dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-600)}.hx\:dark\:hover\:border-neutral-500:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-500)}.hx\:dark\:hover\:border-neutral-700:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:border-neutral-800:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-gray-100)5%,transparent)}}.hx\:dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:bg-neutral-800:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-neutral-900:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-900)}.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-100)}@supports (color:color-mix(in lab, red, red)){.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-primary-100)5%,transparent)}}.hx\:dark\:hover\:bg-primary-700:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-700)}.hx\:dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--hx-color-gray-50)}.hx\:dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--hx-color-gray-100)}.hx\:dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--hx-color-gray-200)}.hx\:dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--hx-color-gray-300)}.hx\:dark\:hover\:text-neutral-50:where(.dark,.dark *):hover{color:var(--hx-color-neutral-50)}.hx\:dark\:hover\:text-primary-400:where(.dark,.dark *):hover{color:var(--hx-color-primary-400)}.hx\:dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--hx-color-white)}.hx\:dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.hx\:dark\:focus-visible\:bg-dark:where(.dark,.dark *):focus-visible{background-color:var(--hx-color-dark)}.hx\:data-\[state\=selected\]\:dark\:border-primary-500[data-state=selected]:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:dark\:text-primary-600[data-state=selected]:where(.dark,.dark *){color:var(--hx-color-primary-600)}@media (prefers-contrast:more){.hx\:contrast-more\:dark\:border-current:where(.dark,.dark *){border-color:currentColor}.hx\:contrast-more\:dark\:border-gray-50:where(.dark,.dark *){border-color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:border-primary-500:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:dark\:contrast-more\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:text-current:where(.dark,.dark *){color:currentColor}.hx\:contrast-more\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:contrast-more\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:contrast-more\:dark\:shadow-\[0_0_0_1px_\#fff\]:where(.dark,.dark *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hx\:contrast-more\:dark\:hover\:border-gray-50:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-50)}}}@media print{.hx\:print\:\[display\:none\],.hx\:print\:hidden{display:none}.hx\:print\:bg-transparent{background-color:#0000}}}html{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--hx-color-white);width:100%}body:where(.dark,.dark *){background-color:var(--hx-color-dark);color:var(--hx-color-gray-100)}:root{--primary-hue:212deg;--primary-saturation:100%;--primary-lightness:50%;--navbar-height:4rem;--hextra-banner-height:2rem;--menu-height:3.75rem}.dark{--primary-hue:204deg;--primary-saturation:100%;--primary-lightness:50%}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*2);font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height));--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*10);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-neutral-200)}@supports (color:color-mix(in lab, red, red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-neutral-200)70%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:calc(var(--hx-spacing)*1);font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}@media (prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--hx-color-neutral-400)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports (color:color-mix(in lab, red, red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)10%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}@media (prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--hx-color-primary-600);text-decoration-line:underline;text-decoration-thickness:from-font}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);border-color:var(--hx-color-gray-300);color:var(--hx-color-gray-700);font-style:italic}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);padding-left:calc(var(--hx-spacing)*6);border-left-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);padding-right:calc(var(--hx-spacing)*6);border-right-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-gray-700);color:var(--hx-color-gray-400)}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--hx-spacing)*4);--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media (prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports (color:color-mix(in lab, red, red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports (color:color-mix(in lab, red, red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media (prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports (color:color-mix(in lab, red, red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*6);border-collapse:collapse;width:100%;padding:calc(var(--hx-spacing)*0);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);display:block;overflow-x:auto}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead{background-color:var(--hx-color-gray-50)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:var(--hx-color-gray-600)}@supports (color:color-mix(in lab, red, red)){.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-600)20%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr{margin:calc(var(--hx-spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:decimal}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:disc}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):has(li input[type=checkbox]){list-style-type:none}.content :where(ul,ol)>li>:where(ul,ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*0)}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:#0000;border-radius:0}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:#0000}.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-inline:auto;margin-block:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-md)}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption{margin-top:calc(var(--hx-spacing)*2);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-500);display:block}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:where(.dark,.dark *){color:var(--hx-color-gray-400)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt{margin-top:calc(var(--hx-spacing)*6);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd{margin-block:calc(var(--hx-spacing)*2);padding-inline-start:calc(var(--hx-spacing)*6)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*10);border-color:var(--hx-color-gray-200)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .footnotes{margin-top:calc(var(--hx-spacing)*12);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.content .footnotes hr{border-color:var(--hx-color-gray-200)}.content .footnotes hr:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .subheading-anchor{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.content .subheading-anchor:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.content .subheading-anchor:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}span:target+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor),.content .subheading-anchor:focus-visible{opacity:1}span+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor){text-decoration-line:none!important}.content .subheading-anchor:after{content:var(--tw-content);color:var(--hx-color-gray-300)}.content .subheading-anchor:where(.dark,.dark *):after{content:var(--tw-content);color:var(--hx-color-neutral-700)}.content .subheading-anchor:after{padding-inline:calc(var(--hx-spacing)*1);--tw-content:"#";content:var(--tw-content)}span:target+:is(){color:var(--hx-color-gray-400)}span:target+:is():where(.dark,.dark *){color:var(--hx-color-neutral-500)}article details>summary::-webkit-details-marker{display:none}article details>summary:before{vertical-align:-4px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx:h-5 hx:w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E");width:1.2em;height:1.2em;padding:0 .6em}:lang(fa) ol{list-style-type:persian}.highlight .chroma .err{color:#a61717;background-color:#e3d2d2}.highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.highlight .chroma .line{display:flex}.highlight .chroma .k,.highlight .chroma .kc,.highlight .chroma .kd,.highlight .chroma .kn,.highlight .chroma .kp,.highlight .chroma .kr{color:#000;font-weight:700}.highlight .chroma .kt{color:#458;font-weight:700}.highlight .chroma .na{color:teal}.highlight .chroma .nb{color:#0086b3}.highlight .chroma .bp{color:#999}.highlight .chroma .nc{color:#458;font-weight:700}.highlight .chroma .no{color:teal}.highlight .chroma .nd{color:#3c5d5d;font-weight:700}.highlight .chroma .ni{color:purple}.highlight .chroma .ne,.highlight .chroma .nf,.highlight .chroma .nl{color:#900;font-weight:700}.highlight .chroma .nn{color:#555}.highlight .chroma .nt{color:navy}.highlight .chroma .nv,.highlight .chroma .vc,.highlight .chroma .vg,.highlight .chroma .vi{color:teal}.highlight .chroma .s,.highlight .chroma .sa,.highlight .chroma .sb,.highlight .chroma .sc,.highlight .chroma .dl,.highlight .chroma .sd,.highlight .chroma .s2,.highlight .chroma .se,.highlight .chroma .sh,.highlight .chroma .si,.highlight .chroma .sx{color:#d14}.highlight .chroma .sr{color:#009926}.highlight .chroma .s1{color:#d14}.highlight .chroma .ss{color:#990073}.highlight .chroma .m,.highlight .chroma .mb,.highlight .chroma .mf,.highlight .chroma .mh,.highlight .chroma .mi,.highlight .chroma .il,.highlight .chroma .mo{color:#099}.highlight .chroma .o,.highlight .chroma .ow{color:#000;font-weight:700}.highlight .chroma .c,.highlight .chroma .ch,.highlight .chroma .cm,.highlight .chroma .c1{color:#998;font-style:italic}.highlight .chroma .cs,.highlight .chroma .cp,.highlight .chroma .cpf{color:#999;font-style:italic;font-weight:700}.highlight .chroma .gd{color:#000;background-color:#fdd}.highlight .chroma .ge{color:#000;font-style:italic}.highlight .chroma .gr{color:#a00}.highlight .chroma .gh{color:#999}.highlight .chroma .gi{color:#000;background-color:#dfd}.highlight .chroma .go{color:#888}.highlight .chroma .gp{color:#555}.highlight .chroma .gs{font-weight:700}.highlight .chroma .gu{color:#aaa}.highlight .chroma .gt{color:#a00}.highlight .chroma .gl{text-decoration:underline}.highlight .chroma .w{color:#bbb}.dark .highlight .chroma .err{color:#f85149}.dark .highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.dark .highlight .chroma .line{display:flex}.dark .highlight .chroma .k{color:#ff7b72}.dark .highlight .chroma .kc{color:#79c0ff}.dark .highlight .chroma .kd,.dark .highlight .chroma .kn{color:#ff7b72}.dark .highlight .chroma .kp{color:#79c0ff}.dark .highlight .chroma .kr,.dark .highlight .chroma .kt{color:#ff7b72}.dark .highlight .chroma .nc{color:#f0883e;font-weight:700}.dark .highlight .chroma .no{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nd{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .ni{color:#ffa657}.dark .highlight .chroma .ne{color:#f0883e;font-weight:700}.dark .highlight .chroma .nf{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .nl{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nn{color:#ff7b72}.dark .highlight .chroma .py{color:#79c0ff}.dark .highlight .chroma .nt{color:#7ee787}.dark .highlight .chroma .nv{color:#79c0ff}.dark .highlight .chroma .l{color:#a5d6ff}.dark .highlight .chroma .ld{color:#79c0ff}.dark .highlight .chroma .s{color:#a5d6ff}.dark .highlight .chroma .sa{color:#79c0ff}.dark .highlight .chroma .sb,.dark .highlight .chroma .sc{color:#a5d6ff}.dark .highlight .chroma .dl{color:#79c0ff}.dark .highlight .chroma .sd,.dark .highlight .chroma .s2{color:#a5d6ff}.dark .highlight .chroma .se,.dark .highlight .chroma .sh{color:#79c0ff}.dark .highlight .chroma .si,.dark .highlight .chroma .sx{color:#a5d6ff}.dark .highlight .chroma .sr{color:#79c0ff}.dark .highlight .chroma .s1,.dark .highlight .chroma .ss,.dark .highlight .chroma .m,.dark .highlight .chroma .mb,.dark .highlight .chroma .mf,.dark .highlight .chroma .mh,.dark .highlight .chroma .mi,.dark .highlight .chroma .il,.dark .highlight .chroma .mo{color:#a5d6ff}.dark .highlight .chroma .o,.dark .highlight .chroma .ow{color:#ff7b72;font-weight:700}.dark .highlight .chroma .c,.dark .highlight .chroma .ch,.dark .highlight .chroma .cm,.dark .highlight .chroma .c1{color:#8b949e;font-style:italic}.dark .highlight .chroma .cs,.dark .highlight .chroma .cp,.dark .highlight .chroma .cpf{color:#8b949e;font-style:italic;font-weight:700}.dark .highlight .chroma .gd{color:#ffa198;background-color:#490202}.dark .highlight .chroma .ge{color:inherit;font-style:italic}.dark .highlight .chroma .gr{color:#ffa198}.dark .highlight .chroma .gh{color:#79c0ff;font-weight:700}.dark .highlight .chroma .gi{color:#56d364;background-color:#0f5323}.dark .highlight .chroma .go,.dark .highlight .chroma .gp{color:#8b949e}.dark .highlight .chroma .gs{font-weight:700}.dark .highlight .chroma .gu{color:#79c0ff}.dark .highlight .chroma .gt{color:#ff7b72}.dark .highlight .chroma .gl{text-decoration:underline}.dark .highlight .chroma .w{color:#6e7681}.hextra-code-block{--tw-leading:calc(var(--hx-spacing)*5);font-size:.9em;line-height:calc(var(--hx-spacing)*5)}.hextra-code-block pre{background-color:var(--hx-color-primary-700);overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.hextra-code-block pre{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block pre{--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media (prefers-contrast:more){.hextra-code-block pre{border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports (color:color-mix(in lab, red, red)){.hextra-code-block pre{border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.hextra-code-block pre{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.hextra-code-block pre:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports (color:color-mix(in lab, red, red)){.hextra-code-block pre:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media (prefers-contrast:more){.hextra-code-block pre:where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports (color:color-mix(in lab, red, red)){.hextra-code-block pre:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.hextra-code-block .hextra-code-filename{top:calc(var(--hx-spacing)*0);z-index:1;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:var(--hx-radius-xl);border-top-right-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);width:100%;position:absolute;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.hextra-code-block .hextra-code-filename{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block .hextra-code-filename{padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*2);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));color:var(--hx-color-gray-700)}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports (color:color-mix(in lab, red, red)){.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hextra-code-block .hextra-code-filename+pre:not(.lntable pre){padding-top:calc(var(--hx-spacing)*12)}.hextra-code-block pre:not(.lntable pre){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*4)}.hextra-code-block div:nth-of-type(2) pre{padding-top:calc(var(--hx-spacing)*12);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .lntable{margin:calc(var(--hx-spacing)*0);border-radius:var(--hx-radius-xl);width:auto;display:block;overflow:auto}.chroma .lntable pre{padding-top:calc(var(--hx-spacing)*4);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line){min-width:2.6rem;padding-right:calc(var(--hx-spacing)*4);padding-left:calc(var(--hx-spacing)*4);color:var(--hx-color-neutral-600)}:is(.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line)):where(.dark,.dark *){color:var(--hx-color-neutral-300)}.chroma .lntd{padding:calc(var(--hx-spacing)*0);vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{background-color:var(--hx-color-primary-800);width:100%;display:block}@supports (color:color-mix(in lab, red, red)){.chroma .hl{background-color:color-mix(in oklab,var(--hx-color-primary-800)10%,transparent)}}.hextra-cards{grid-template-columns:repeat(auto-fill,minmax(max(250px,calc((100% - 1rem*2)/var(--hextra-cards-grid-cols))),1fr))}.hextra-card{position:relative}.hextra-card img{-webkit-user-select:none;user-select:none}.hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card .hextra-card-icon svg{color:#0003;width:1.5rem;transition:color .3s}.hextra-card p{margin-top:.5rem;position:relative}.dark .hextra-card .hextra-card-icon svg{color:#fff6}.dark .hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card-tag{z-index:10;position:absolute;top:5px}.hextra-card-tag:where(:dir(ltr)){right:5px}.hextra-card-tag:where(:dir(rtl)){left:5px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker){counter-increment:step}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);margin-left:-41px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);margin-right:-44px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);background-color:var(--hx-color-gray-100)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:4px;border-color:var(--hx-color-white)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);border-color:var(--hx-color-dark)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step);text-align:center;text-indent:-1px;width:33px;height:33px;font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal);color:var(--hx-color-neutral-400);border-radius:3.40282e38px;position:absolute}:lang(fa) .hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step,persian)}.hextra-search-wrapper li{margin-inline:calc(var(--hx-spacing)*2.5);border-radius:var(--hx-radius-md);overflow-wrap:break-word;color:var(--hx-color-gray-800)}@media (prefers-contrast:more){.hextra-search-wrapper li{border-style:var(--tw-border-style);border-width:1px;border-color:#0000}}.hextra-search-wrapper li:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hextra-search-wrapper li a{scroll-margin:calc(var(--hx-spacing)*12);padding-inline:calc(var(--hx-spacing)*2.5);padding-block:calc(var(--hx-spacing)*2);display:block}.hextra-search-wrapper li a:focus-visible{--tw-outline-style:none;outline-style:none}.hextra-search-wrapper li .hextra-search-title{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hextra-search-wrapper li .hextra-search-active{border-radius:var(--hx-radius-md);background-color:var(--hx-color-primary-500)}@supports (color:color-mix(in lab, red, red)){.hextra-search-wrapper li .hextra-search-active{background-color:color-mix(in oklab,var(--hx-color-primary-500)10%,transparent)}}@media (prefers-contrast:more){.hextra-search-wrapper li .hextra-search-active{border-color:var(--hx-color-primary-500)}}.hextra-search-wrapper .hextra-search-no-result{padding:calc(var(--hx-spacing)*8);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-400);-webkit-user-select:none;user-select:none;display:block}.hextra-search-wrapper .hextra-search-prefix{margin-inline:calc(var(--hx-spacing)*2.5);margin-top:calc(var(--hx-spacing)*6);margin-bottom:calc(var(--hx-spacing)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.hextra-search-wrapper .hextra-search-prefix{border-color:color-mix(in oklab,var(--hx-color-black)10%,transparent)}}.hextra-search-wrapper .hextra-search-prefix{padding-inline:calc(var(--hx-spacing)*2.5);padding-bottom:calc(var(--hx-spacing)*1.5);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);color:var(--hx-color-gray-500);text-transform:uppercase;-webkit-user-select:none;user-select:none}.hextra-search-wrapper .hextra-search-prefix:first-child{margin-top:calc(var(--hx-spacing)*0)}@media (prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix{border-color:var(--hx-color-gray-600);color:var(--hx-color-gray-900)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)20%,transparent)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){color:var(--hx-color-gray-300)}@media (prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-gray-50);color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{margin-top:calc(var(--hx-spacing)*1);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:1.35rem;text-overflow:ellipsis;color:var(--hx-color-gray-600);line-height:1.35rem;overflow:hidden}.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-400)}@media (prefers-contrast:more){.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box}.hextra-search-wrapper .hextra-search-match{color:var(--hx-color-primary-600)}@media (max-width:48rem){.hextra-sidebar-container{top:calc(var(--hx-spacing)*0);bottom:calc(var(--hx-spacing)*0);z-index:15;overscroll-behavior:contain;background-color:var(--hx-color-white);width:100%;padding-top:calc(var(--navbar-height) + var(--hextra-banner-height));position:fixed}.hextra-sidebar-container:where(.dark,.dark *){background-color:var(--hx-color-dark)}.hextra-sidebar-container{will-change:transform,opacity;contain:layout style;backface-visibility:hidden;transition:transform .4s cubic-bezier(.52,.16,.04,1)}}.hextra-sidebar-container li>.hextra-sidebar-children{height:calc(var(--hx-spacing)*0)}.hextra-sidebar-container li.open>.hextra-sidebar-children{height:auto;padding-top:calc(var(--hx-spacing)*1)}.hextra-sidebar-container li.open>.hextra-sidebar-item>.hextra-sidebar-collapsible-button>svg>path{rotate:90deg}.hextra-banner-hidden .hextra-banner{display:none}.hextra-banner :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline;text-decoration-thickness:from-font}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}nav .hextra-search-wrapper{display:none}@media (min-width:48rem){nav .hextra-search-wrapper{display:inline-block}}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-nav-container-blur{background-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.hextra-nav-container-blur{background-color:color-mix(in oklab,var(--hx-color-white)85%,transparent)}}.hextra-nav-container-blur{--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-nav-container-blur:where(.dark,.dark *){background-color:var(--hx-color-dark)!important}@supports (color:color-mix(in lab, red, red)){.hextra-nav-container-blur:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)80%,transparent)!important}}}.hextra-hamburger-menu svg g{transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg path{opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open path{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:0s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open g{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open>path{opacity:0}.hextra-hamburger-menu svg.open>g:first-of-type{rotate:45deg}.hextra-hamburger-menu svg.open>g:first-of-type path{--tw-translate-y:calc(var(--hx-spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-hamburger-menu svg.open>g:nth-of-type(2){rotate:-45deg}.hextra-hamburger-menu svg.open>g:nth-of-type(2) path{--tw-translate-y:calc(var(--hx-spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-scrollbar,.hextra-scrollbar *{scrollbar-width:thin;scrollbar-color:oklch(55.55% 0 0/.4) transparent;scrollbar-gutter:stable}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar{height:calc(var(--hx-spacing)*3);width:calc(var(--hx-spacing)*3)}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-track{background-color:#0000}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-thumb{border-radius:10px}:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{background-color:var(--tw-shadow-color);--tw-shadow-color:var(--hx-color-neutral-500);background-clip:content-box;border:3px solid #0000}@supports (color:color-mix(in lab, red, red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}@media (hover:hover){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:var(--hx-color-neutral-500)}@supports (color:color-mix(in lab, red, red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)40%,transparent)var(--tw-shadow-alpha),transparent)}}}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-code-copy-btn{opacity:.85;--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-code-copy-btn:where(.dark,.dark *){opacity:.8}}@media (min-width:1024px){.hextra-feature-grid{grid-template-columns:repeat(var(--hextra-feature-grid-cols),minmax(0,1fr))}}.hextra-jupyter-code-cell{scrollbar-gutter:auto;margin-top:calc(var(--hx-spacing)*6)}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:hidden}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs{max-height:50vh;overflow:auto}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre{max-width:100%;font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:auto}.hextra-badge{align-items:center;display:inline-flex}.hextra-toc a.hextra-toc-active{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.2s;transition-duration:.2s;color:var(--hx-color-gray-900)!important}.hextra-toc a.hextra-toc-active:where(.dark,.dark *){color:var(--hx-color-gray-50)!important}.hextra-archive-timeline{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--hx-color-black)}@supports (color:color-mix(in lab, red, red)){.hextra-archive-timeline{border-color:color-mix(in oklab,var(--hx-color-black)15%,transparent)}}.hextra-archive-timeline:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports (color:color-mix(in lab, red, red)){.hextra-archive-timeline:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)15%,transparent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false} diff --git a/public/css/compiled/main.min.1a431501cdeb52323c920e7761f7d9e327b2bee53160196c4bd1d34a3fd9fbc9.css b/public/css/compiled/main.min.1a431501cdeb52323c920e7761f7d9e327b2bee53160196c4bd1d34a3fd9fbc9.css deleted file mode 100644 index 63a6651..0000000 --- a/public/css/compiled/main.min.1a431501cdeb52323c920e7761f7d9e327b2bee53160196c4bd1d34a3fd9fbc9.css +++ /dev/null @@ -1 +0,0 @@ -:root{--hextra-max-page-width:80rem;--hextra-max-content-width:72rem;--hextra-max-navbar-width:80rem;--hextra-max-footer-width:80rem}.hextra-max-page-width{max-width:var(--hextra-max-page-width)}.hextra-max-content-width{max-width:var(--hextra-max-content-width)}.hextra-max-navbar-width{max-width:var(--hextra-max-navbar-width)}.hextra-max-footer-width{max-width:var(--hextra-max-footer-width)}/*!tailwindcss v4.1.18 | MIT License | https://tailwindcss.com*/@layer properties{@supports(((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--hx-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--hx-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--hx-color-red-100:oklch(93.6% .032 17.717);--hx-color-red-200:oklch(88.5% .062 18.334);--hx-color-red-900:oklch(39.6% .141 25.723);--hx-color-orange-50:oklch(98% .016 73.684);--hx-color-orange-100:oklch(95.4% .038 75.164);--hx-color-orange-300:oklch(83.7% .128 66.29);--hx-color-orange-400:oklch(75% .183 55.934);--hx-color-orange-800:oklch(47% .157 37.304);--hx-color-amber-100:oklch(96.2% .059 95.617);--hx-color-amber-200:oklch(92.4% .12 95.746);--hx-color-amber-900:oklch(41.4% .112 45.904);--hx-color-yellow-50:oklch(98.7% .026 102.212);--hx-color-yellow-100:oklch(97.3% .071 103.193);--hx-color-yellow-200:oklch(94.5% .129 101.54);--hx-color-yellow-700:oklch(55.4% .135 66.442);--hx-color-yellow-900:oklch(42.1% .095 57.708);--hx-color-green-100:oklch(96.2% .044 156.743);--hx-color-green-200:oklch(92.5% .084 155.995);--hx-color-green-900:oklch(39.3% .095 152.535);--hx-color-blue-100:oklch(93.2% .032 255.585);--hx-color-blue-200:oklch(88.2% .059 254.128);--hx-color-blue-900:oklch(37.9% .146 265.522);--hx-color-indigo-100:oklch(93% .034 272.788);--hx-color-indigo-200:oklch(87% .065 274.039);--hx-color-indigo-900:oklch(35.9% .144 278.697);--hx-color-purple-100:oklch(94.6% .033 307.174);--hx-color-purple-200:oklch(90.2% .063 306.703);--hx-color-purple-900:oklch(38.1% .176 304.987);--hx-color-slate-50:oklch(98.4% .003 247.858);--hx-color-slate-100:oklch(96.8% .007 247.896);--hx-color-slate-900:oklch(20.8% .042 265.755);--hx-color-gray-50:oklch(98.5% .002 247.839);--hx-color-gray-100:oklch(96.7% .003 264.542);--hx-color-gray-200:oklch(92.8% .006 264.531);--hx-color-gray-300:oklch(87.2% .01 258.338);--hx-color-gray-400:oklch(70.7% .022 261.325);--hx-color-gray-500:oklch(55.1% .027 264.364);--hx-color-gray-600:oklch(44.6% .03 256.802);--hx-color-gray-700:oklch(37.3% .034 259.733);--hx-color-gray-800:oklch(27.8% .033 256.848);--hx-color-gray-900:oklch(21% .034 264.665);--hx-color-neutral-50:oklch(98.5% 0 0);--hx-color-neutral-200:oklch(92.2% 0 0);--hx-color-neutral-300:oklch(87% 0 0);--hx-color-neutral-400:oklch(70.8% 0 0);--hx-color-neutral-500:oklch(55.6% 0 0);--hx-color-neutral-600:oklch(43.9% 0 0);--hx-color-neutral-700:oklch(37.1% 0 0);--hx-color-neutral-800:oklch(26.9% 0 0);--hx-color-neutral-900:oklch(20.5% 0 0);--hx-color-black:#000;--hx-color-white:#fff;--hx-spacing:.25rem;--hx-breakpoint-xl:80rem;--hx-text-xs:.75rem;--hx-text-xs--line-height:calc(1/.75);--hx-text-sm:.875rem;--hx-text-sm--line-height:calc(1.25/.875);--hx-text-base:1rem;--hx-text-base--line-height:calc(1.5/1);--hx-text-lg:1.125rem;--hx-text-lg--line-height:calc(1.75/1.125);--hx-text-xl:1.25rem;--hx-text-xl--line-height:calc(1.75/1.25);--hx-text-2xl:1.5rem;--hx-text-2xl--line-height:calc(2/1.5);--hx-text-3xl:1.875rem;--hx-text-3xl--line-height:calc(2.25/1.875);--hx-text-4xl:2.25rem;--hx-text-4xl--line-height:calc(2.5/2.25);--hx-text-5xl:3rem;--hx-text-5xl--line-height:1;--hx-font-weight-normal:400;--hx-font-weight-medium:500;--hx-font-weight-semibold:600;--hx-font-weight-bold:700;--hx-font-weight-extrabold:800;--hx-tracking-tighter:-.05em;--hx-tracking-tight:-.025em;--hx-leading-tight:1.25;--hx-radius-xs:.125rem;--hx-radius-sm:.25rem;--hx-radius-md:.375rem;--hx-radius-lg:.5rem;--hx-radius-xl:.75rem;--hx-radius-3xl:1.5rem;--hx-ease-in:cubic-bezier(.4,0,1,1);--hx-ease-out:cubic-bezier(0,0,.2,1);--hx-ease-in-out:cubic-bezier(.4,0,.2,1);--hx-blur-md:12px;--hx-default-transition-duration:.15s;--hx-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--hx-default-font-family:var(--hx-font-sans);--hx-default-mono-font-family:var(--hx-font-mono);--hx-color-primary-100:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*44));--hx-color-primary-200:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*36));--hx-color-primary-300:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*27));--hx-color-primary-400:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*16));--hx-color-primary-500:hsl(var(--primary-hue)var(--primary-saturation)var(--primary-lightness));--hx-color-primary-600:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*45));--hx-color-primary-700:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*39));--hx-color-primary-800:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*32));--hx-color-primary-900:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*24));--hx-color-dark:#111}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--hx-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--hx-default-font-feature-settings,normal);font-variation-settings:var(--hx-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hx-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--hx-default-mono-font-feature-settings,normal);font-variation-settings:var(--hx-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports(not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports(color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}abbr:where([title]){cursor:help}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible:where(.dark,.dark *){--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}}@layer components;@layer utilities{.hx\:pointer-events-none{pointer-events:none}.hx\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hx\:absolute{position:absolute}.hx\:relative{position:relative}.hx\:sticky{position:sticky}.hx\:inset-x-0{inset-inline:calc(var(--hx-spacing)*0)}.hx\:inset-y-0{inset-block:calc(var(--hx-spacing)*0)}.hx\:top-0{top:calc(var(--hx-spacing)*0)}.hx\:top-1\/2{top:50%}.hx\:top-8{top:calc(var(--hx-spacing)*8)}.hx\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:top-\[40\%\]{top:40%}.hx\:top-full{top:100%}.hx\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:bottom-0{bottom:calc(var(--hx-spacing)*0)}.hx\:left-0{left:calc(var(--hx-spacing)*0)}.hx\:left-\[24px\]{left:24px}.hx\:left-\[36px\]{left:36px}.hx\:z-20{z-index:20}.hx\:z-\[-1\]{z-index:-1}.hx\:order-last{order:9999}.hx\:m-\[11px\]{margin:11px}.hx\:mx-1{margin-inline:calc(var(--hx-spacing)*1)}.hx\:mx-4{margin-inline:calc(var(--hx-spacing)*4)}.hx\:mx-auto{margin-inline:auto}.hx\:my-1{margin-block:calc(var(--hx-spacing)*1)}.hx\:my-1\.5{margin-block:calc(var(--hx-spacing)*1.5)}.hx\:my-2{margin-block:calc(var(--hx-spacing)*2)}.hx\:-mt-20{margin-top:calc(var(--hx-spacing)*-20)}.hx\:mt-1{margin-top:calc(var(--hx-spacing)*1)}.hx\:mt-1\.5{margin-top:calc(var(--hx-spacing)*1.5)}.hx\:mt-2{margin-top:calc(var(--hx-spacing)*2)}.hx\:mt-4{margin-top:calc(var(--hx-spacing)*4)}.hx\:mt-5{margin-top:calc(var(--hx-spacing)*5)}.hx\:mt-6{margin-top:calc(var(--hx-spacing)*6)}.hx\:mt-8{margin-top:calc(var(--hx-spacing)*8)}.hx\:mt-12{margin-top:calc(var(--hx-spacing)*12)}.hx\:mt-16{margin-top:calc(var(--hx-spacing)*16)}.hx\:mt-auto{margin-top:auto}.hx\:-mr-2{margin-right:calc(var(--hx-spacing)*-2)}.hx\:mr-1{margin-right:calc(var(--hx-spacing)*1)}.hx\:mr-2{margin-right:calc(var(--hx-spacing)*2)}.hx\:-mb-0\.5{margin-bottom:calc(var(--hx-spacing)*-.5)}.hx\:mb-0{margin-bottom:calc(var(--hx-spacing)*0)}.hx\:mb-2{margin-bottom:calc(var(--hx-spacing)*2)}.hx\:mb-4{margin-bottom:calc(var(--hx-spacing)*4)}.hx\:mb-6{margin-bottom:calc(var(--hx-spacing)*6)}.hx\:mb-8{margin-bottom:calc(var(--hx-spacing)*8)}.hx\:mb-10{margin-bottom:calc(var(--hx-spacing)*10)}.hx\:mb-12{margin-bottom:calc(var(--hx-spacing)*12)}.hx\:mb-16{margin-bottom:calc(var(--hx-spacing)*16)}.hx\:-ml-2{margin-left:calc(var(--hx-spacing)*-2)}.hx\:ml-2{margin-left:calc(var(--hx-spacing)*2)}.hx\:ml-4{margin-left:calc(var(--hx-spacing)*4)}.hx\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hx\:block{display:block}.hx\:flex{display:flex}.hx\:grid{display:grid}.hx\:hidden{display:none}.hx\:inline{display:inline}.hx\:inline-block{display:inline-block}.hx\:inline-flex{display:inline-flex}.hx\:aspect-auto{aspect-ratio:auto}.hx\:size-4{width:calc(var(--hx-spacing)*4);height:calc(var(--hx-spacing)*4)}.hx\:h-0{height:calc(var(--hx-spacing)*0)}.hx\:h-2{height:calc(var(--hx-spacing)*2)}.hx\:h-3\.5{height:calc(var(--hx-spacing)*3.5)}.hx\:h-4{height:calc(var(--hx-spacing)*4)}.hx\:h-5{height:calc(var(--hx-spacing)*5)}.hx\:h-7{height:calc(var(--hx-spacing)*7)}.hx\:h-10{height:calc(var(--hx-spacing)*10)}.hx\:h-16{height:calc(var(--hx-spacing)*16)}.hx\:h-\[18px\]{height:18px}.hx\:h-full{height:100%}.hx\:h-px{height:1px}.hx\:max-h-\(--menu-height\){max-height:var(--menu-height)}.hx\:max-h-64{max-height:calc(var(--hx-spacing)*64)}.hx\:max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom))}.hx\:max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}.hx\:min-h-\[100px\]{min-height:100px}.hx\:min-h-\[calc\(100vh-var\(--navbar-height\)\)\]{min-height:calc(100vh - var(--navbar-height))}.hx\:w-2{width:calc(var(--hx-spacing)*2)}.hx\:w-3\.5{width:calc(var(--hx-spacing)*3.5)}.hx\:w-4{width:calc(var(--hx-spacing)*4)}.hx\:w-10{width:calc(var(--hx-spacing)*10)}.hx\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:w-\[110\%\]{width:110%}.hx\:w-\[180\%\]{width:180%}.hx\:w-full{width:100%}.hx\:w-max{width:max-content}.hx\:w-screen{width:100vw}.hx\:max-w-\[50\%\]{max-width:50%}.hx\:max-w-\[90rem\]{max-width:90rem}.hx\:max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\]{max-width:min(100vw - 2rem,100% + 20rem)}.hx\:max-w-full{max-width:100%}.hx\:max-w-none{max-width:none}.hx\:max-w-screen-xl{max-width:var(--hx-breakpoint-xl)}.hx\:min-w-0{min-width:calc(var(--hx-spacing)*0)}.hx\:min-w-\[18px\]{min-width:18px}.hx\:min-w-\[24px\]{min-width:24px}.hx\:min-w-full{min-width:100%}.hx\:shrink-0{flex-shrink:0}.hx\:grow{flex-grow:1}.hx\:origin-center{transform-origin:50%}.hx\:-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hx\:cursor-default{cursor:default}.hx\:cursor-pointer{cursor:pointer}.hx\:scroll-my-6{scroll-margin-block:calc(var(--hx-spacing)*6)}.hx\:scroll-py-6{scroll-padding-block:calc(var(--hx-spacing)*6)}.hx\:list-none{list-style-type:none}.hx\:appearance-none{appearance:none}.hx\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.hx\:flex-col{flex-direction:column}.hx\:flex-wrap{flex-wrap:wrap}.hx\:items-baseline{align-items:baseline}.hx\:items-center{align-items:center}.hx\:items-start{align-items:flex-start}.hx\:justify-between{justify-content:space-between}.hx\:justify-center{justify-content:center}.hx\:justify-end{justify-content:flex-end}.hx\:justify-start{justify-content:flex-start}.hx\:justify-items-start{justify-items:start}.hx\:gap-1{gap:calc(var(--hx-spacing)*1)}.hx\:gap-1\.5{gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-2{gap:calc(var(--hx-spacing)*2)}.hx\:gap-4{gap:calc(var(--hx-spacing)*4)}.hx\:gap-x-1\.5{column-gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-x-2{column-gap:calc(var(--hx-spacing)*2)}.hx\:gap-y-1{row-gap:calc(var(--hx-spacing)*1)}.hx\:gap-y-2{row-gap:calc(var(--hx-spacing)*2)}.hx\:overflow-auto{overflow:auto}.hx\:overflow-hidden{overflow:hidden}.hx\:overflow-x-auto{overflow-x:auto}.hx\:overflow-x-hidden{overflow-x:hidden}.hx\:overflow-y-auto{overflow-y:auto}.hx\:overflow-y-hidden{overflow-y:hidden}.hx\:overscroll-contain{overscroll-behavior:contain}.hx\:overscroll-x-contain{overscroll-behavior-x:contain}.hx\:rounded-3xl{border-radius:var(--hx-radius-3xl)}.hx\:rounded-full{border-radius:340282e33px}.hx\:rounded-lg{border-radius:var(--hx-radius-lg)}.hx\:rounded-md{border-radius:var(--hx-radius-md)}.hx\:rounded-sm{border-radius:var(--hx-radius-sm)}.hx\:rounded-xl{border-radius:var(--hx-radius-xl)}.hx\:rounded-xs{border-radius:var(--hx-radius-xs)}.hx\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.hx\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:border-0{border-style:var(--tw-border-style);border-width:0}.hx\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.hx\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hx\:border-amber-200{border-color:var(--hx-color-amber-200)}.hx\:border-black\/5{border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:border-black\/5{border-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:border-blue-200{border-color:var(--hx-color-blue-200)}.hx\:border-gray-200{border-color:var(--hx-color-gray-200)}.hx\:border-gray-500{border-color:var(--hx-color-gray-500)}.hx\:border-green-200{border-color:var(--hx-color-green-200)}.hx\:border-indigo-200{border-color:var(--hx-color-indigo-200)}.hx\:border-orange-100{border-color:var(--hx-color-orange-100)}.hx\:border-purple-200{border-color:var(--hx-color-purple-200)}.hx\:border-red-200{border-color:var(--hx-color-red-200)}.hx\:border-transparent{border-color:#0000}.hx\:border-yellow-100{border-color:var(--hx-color-yellow-100)}.hx\:bg-amber-100{background-color:var(--hx-color-amber-100)}.hx\:bg-black\/\[\.05\]{background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-black\/\[\.05\]{background-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:bg-blue-100{background-color:var(--hx-color-blue-100)}.hx\:bg-gray-100{background-color:var(--hx-color-gray-100)}.hx\:bg-gray-200{background-color:var(--hx-color-gray-200)}.hx\:bg-green-100{background-color:var(--hx-color-green-100)}.hx\:bg-indigo-100{background-color:var(--hx-color-indigo-100)}.hx\:bg-neutral-50{background-color:var(--hx-color-neutral-50)}.hx\:bg-neutral-900{background-color:var(--hx-color-neutral-900)}.hx\:bg-orange-50{background-color:var(--hx-color-orange-50)}.hx\:bg-primary-100{background-color:var(--hx-color-primary-100)}.hx\:bg-primary-400{background-color:var(--hx-color-primary-400)}.hx\:bg-primary-600{background-color:var(--hx-color-primary-600)}.hx\:bg-primary-700\/5{background-color:var(--hx-color-primary-700)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-primary-700\/5{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hx\:bg-purple-100{background-color:var(--hx-color-purple-100)}.hx\:bg-red-100{background-color:var(--hx-color-red-100)}.hx\:bg-transparent{background-color:#0000}.hx\:bg-white{background-color:var(--hx-color-white)}.hx\:bg-yellow-50{background-color:var(--hx-color-yellow-50)}.hx\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hx\:from-gray-900{--tw-gradient-from:var(--hx-color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:to-gray-600{--tw-gradient-to:var(--hx-color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.hx\:p-0{padding:calc(var(--hx-spacing)*0)}.hx\:p-0\.5{padding:calc(var(--hx-spacing)*.5)}.hx\:p-1{padding:calc(var(--hx-spacing)*1)}.hx\:p-1\.5{padding:calc(var(--hx-spacing)*1.5)}.hx\:p-2{padding:calc(var(--hx-spacing)*2)}.hx\:p-4{padding:calc(var(--hx-spacing)*4)}.hx\:p-6{padding:calc(var(--hx-spacing)*6)}.hx\:px-1\.5{padding-inline:calc(var(--hx-spacing)*1.5)}.hx\:px-2{padding-inline:calc(var(--hx-spacing)*2)}.hx\:px-2\.5{padding-inline:calc(var(--hx-spacing)*2.5)}.hx\:px-3{padding-inline:calc(var(--hx-spacing)*3)}.hx\:px-4{padding-inline:calc(var(--hx-spacing)*4)}.hx\:px-6{padding-inline:calc(var(--hx-spacing)*6)}.hx\:px-8{padding-inline:calc(var(--hx-spacing)*8)}.hx\:py-1{padding-block:calc(var(--hx-spacing)*1)}.hx\:py-1\.5{padding-block:calc(var(--hx-spacing)*1.5)}.hx\:py-2{padding-block:calc(var(--hx-spacing)*2)}.hx\:py-2\.5{padding-block:calc(var(--hx-spacing)*2.5)}.hx\:py-3{padding-block:calc(var(--hx-spacing)*3)}.hx\:py-4{padding-block:calc(var(--hx-spacing)*4)}.hx\:py-12{padding-block:calc(var(--hx-spacing)*12)}.hx\:pt-4{padding-top:calc(var(--hx-spacing)*4)}.hx\:pt-6{padding-top:calc(var(--hx-spacing)*6)}.hx\:pt-8{padding-top:calc(var(--hx-spacing)*8)}.hx\:pr-2{padding-right:calc(var(--hx-spacing)*2)}.hx\:pr-4{padding-right:calc(var(--hx-spacing)*4)}.hx\:pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-left),1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.hx\:pb-8{padding-bottom:calc(var(--hx-spacing)*8)}.hx\:pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.hx\:pb-px{padding-bottom:1px}.hx\:pl-6{padding-left:calc(var(--hx-spacing)*6)}.hx\:pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.hx\:text-center{text-align:center}.hx\:text-left{text-align:left}.hx\:align-\[-2\.5px\]{vertical-align:-2.5px}.hx\:align-baseline{vertical-align:baseline}.hx\:align-middle{vertical-align:middle}.hx\:align-text-bottom{vertical-align:text-bottom}.hx\:font-mono{font-family:var(--hx-font-mono)}.hx\:text-2xl{font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height))}.hx\:text-4xl{font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height))}.hx\:text-base{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height))}.hx\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}.hx\:text-xs{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height))}.hx\:text-\[\.65rem\]{font-size:.65rem}.hx\:text-\[10px\]{font-size:10px}.hx\:leading-5{--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5)}.hx\:leading-6{--tw-leading:calc(var(--hx-spacing)*6);line-height:calc(var(--hx-spacing)*6)}.hx\:leading-7{--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hx\:leading-none{--tw-leading:1;line-height:1}.hx\:leading-tight{--tw-leading:var(--hx-leading-tight);line-height:var(--hx-leading-tight)}.hx\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:font-extrabold{--tw-font-weight:var(--hx-font-weight-extrabold);font-weight:var(--hx-font-weight-extrabold)}.hx\:font-medium{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:font-normal{--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal)}.hx\:font-semibold{--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hx\:tracking-tight{--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight)}.hx\:tracking-tighter{--tw-tracking:var(--hx-tracking-tighter);letter-spacing:var(--hx-tracking-tighter)}.hx\:break-words,.hx\:wrap-break-word{overflow-wrap:break-word}.hx\:text-ellipsis{text-overflow:ellipsis}.hx\:whitespace-nowrap{white-space:nowrap}.hx\:text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\]{color:hsl(var(--primary-hue),100%,50%)}.hx\:text-amber-900{color:var(--hx-color-amber-900)}.hx\:text-blue-900{color:var(--hx-color-blue-900)}.hx\:text-current{color:currentColor}.hx\:text-gray-100{color:var(--hx-color-gray-100)}.hx\:text-gray-500{color:var(--hx-color-gray-500)}.hx\:text-gray-600{color:var(--hx-color-gray-600)}.hx\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:text-green-900{color:var(--hx-color-green-900)}.hx\:text-indigo-900{color:var(--hx-color-indigo-900)}.hx\:text-orange-800{color:var(--hx-color-orange-800)}.hx\:text-primary-800{color:var(--hx-color-primary-800)}.hx\:text-purple-900{color:var(--hx-color-purple-900)}.hx\:text-red-900{color:var(--hx-color-red-900)}.hx\:text-slate-50{color:var(--hx-color-slate-50)}.hx\:text-slate-900{color:var(--hx-color-slate-900)}.hx\:text-transparent{color:#0000}.hx\:text-white{color:var(--hx-color-white)}.hx\:text-yellow-900{color:var(--hx-color-yellow-900)}.hx\:capitalize{text-transform:capitalize}.hx\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.hx\:no-underline{text-decoration-line:none}.hx\:underline{text-decoration-line:underline}.hx\:decoration-from-font{text-decoration-thickness:from-font}.hx\:underline-offset-2{text-underline-offset:2px}.hx\:opacity-0{opacity:0}.hx\:opacity-50{opacity:.5}.hx\:opacity-80{opacity:.8}.hx\:shadow-\[0_-12px_16px_\#fff\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,white);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\]{--tw-shadow:0 2px 4px var(--tw-shadow-color,#00000005),0 1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hextra-focus-visible:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}.hx\:hextra-focus-visible:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}.hx\:hextra-focus-visible-inset:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.hx\:hextra-focus-visible-inset:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800)}.hx\:shadow-gray-100{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}.hx\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:duration-75{--tw-duration:75ms;transition-duration:75ms}.hx\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hx\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hx\:ease-in{--tw-ease:var(--hx-ease-in);transition-timing-function:var(--hx-ease-in)}.hx\:ease-in-out{--tw-ease:var(--hx-ease-in-out);transition-timing-function:var(--hx-ease-in-out)}.hx\:outline-none{--tw-outline-style:none;outline-style:none}.hx\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hx\:group-hover\:text-gray-900:is(:where(.hx\:group):hover *){color:var(--hx-color-gray-900)}.hx\:group-hover\:underline:is(:where(.hx\:group):hover *){text-decoration-line:underline}.hx\:group-hover\/code\:opacity-100:is(:where(.hx\:group\/code):hover *){opacity:1}}.hx\:group-data-\[active\=true\]\:text-primary-800:is(:where(.hx\:group)[data-active=true] *){color:var(--hx-color-primary-800)}.hx\:group-data-\[theme\=dark\]\:hidden:is(:where(.hx\:group)[data-theme=dark] *),.hx\:group-data-\[theme\=light\]\:hidden:is(:where(.hx\:group)[data-theme=light] *),.hx\:group-data-\[theme\=system\]\:hidden:is(:where(.hx\:group)[data-theme=system] *){display:none}.hx\:group-\[\.copied\]\/copybtn\:block:is(:where(.hx\:group\/copybtn).copied *){display:block}.hx\:group-\[\.copied\]\/copybtn\:hidden:is(:where(.hx\:group\/copybtn).copied *){display:none}.hx\:placeholder\:text-gray-500::placeholder{color:var(--hx-color-gray-500)}.hx\:before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.hx\:before\:absolute:before{content:var(--tw-content);position:absolute}.hx\:before\:inset-0:before{content:var(--tw-content);inset:calc(var(--hx-spacing)*0)}.hx\:before\:inset-y-1:before{content:var(--tw-content);inset-block:calc(var(--hx-spacing)*1)}.hx\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--hx-spacing)*1)}.hx\:before\:inline-block:before{content:var(--tw-content);display:inline-block}.hx\:before\:w-px:before{content:var(--tw-content);width:1px}.hx\:before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--hx-color-gray-200)}.hx\:before\:opacity-25:before{content:var(--tw-content);opacity:.25}.hx\:before\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\'\#\'\]:before{--tw-content:"#";content:var(--tw-content)}.hx\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.hx\:group-open\:before\:rotate-90:is(:where(.hx\:group):is([open],:popover-open,:open) *):before{content:var(--tw-content);rotate:90deg}.hx\:first\:mt-0:first-child{margin-top:calc(var(--hx-spacing)*0)}.hx\:last-of-type\:mb-0:last-of-type{margin-bottom:calc(var(--hx-spacing)*0)}@media(hover:hover){.hx\:hover\:border-gray-200:hover{border-color:var(--hx-color-gray-200)}.hx\:hover\:border-gray-300:hover{border-color:var(--hx-color-gray-300)}.hx\:hover\:border-gray-400:hover{border-color:var(--hx-color-gray-400)}.hx\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}.hx\:hover\:bg-gray-100:hover{background-color:var(--hx-color-gray-100)}.hx\:hover\:bg-gray-800\/5:hover{background-color:var(--hx-color-gray-800)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:bg-gray-800\/5:hover{background-color:color-mix(in oklab,var(--hx-color-gray-800)5%,transparent)}}.hx\:hover\:bg-primary-700:hover{background-color:var(--hx-color-primary-700)}.hx\:hover\:bg-slate-50:hover{background-color:var(--hx-color-slate-50)}.hx\:hover\:text-black:hover{color:var(--hx-color-black)}.hx\:hover\:text-gray-700:hover{color:var(--hx-color-gray-700)}.hx\:hover\:text-gray-800:hover{color:var(--hx-color-gray-800)}.hx\:hover\:text-gray-900:hover{color:var(--hx-color-gray-900)}.hx\:hover\:text-primary-600:hover{color:var(--hx-color-primary-600)}.hx\:hover\:opacity-60:hover{opacity:.6}.hx\:hover\:opacity-75:hover{opacity:.75}.hx\:hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}}.hx\:focus-visible\:not-sr-only:focus-visible{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.hx\:focus-visible\:fixed:focus-visible{position:fixed}.hx\:focus-visible\:top-2:focus-visible{top:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:left-2:focus-visible{left:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:z-50:focus-visible{z-index:50}.hx\:focus-visible\:rounded-md:focus-visible{border-radius:var(--hx-radius-md)}.hx\:focus-visible\:bg-primary-500:focus-visible{background-color:var(--hx-color-primary-500)}.hx\:focus-visible\:bg-white:focus-visible{background-color:var(--hx-color-white)}.hx\:focus-visible\:px-4:focus-visible{padding-inline:calc(var(--hx-spacing)*4)}.hx\:focus-visible\:py-2:focus-visible{padding-block:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:text-sm:focus-visible{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:focus-visible\:font-medium:focus-visible{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:focus-visible\:text-white:focus-visible{color:var(--hx-color-white)}.hx\:active\:bg-gray-400\/20:active{background-color:var(--hx-color-gray-400)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:bg-gray-400\/20:active{background-color:color-mix(in oklab,var(--hx-color-gray-400)20%,transparent)}}.hx\:active\:opacity-50:active{opacity:.5}.hx\:active\:shadow-sm:active{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:active\:shadow-gray-200:active{--tw-shadow-color:var(--hx-color-gray-200)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:shadow-gray-200:active{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-200)var(--tw-shadow-alpha),transparent)}}.hx\:data-\[state\=closed\]\:hidden[data-state=closed],.hx\:data-\[state\=open\]\:hidden[data-state=open]{display:none}.hx\:data-\[state\=selected\]\:block[data-state=selected]{display:block}.hx\:data-\[state\=selected\]\:border-primary-500[data-state=selected]{border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:text-primary-600[data-state=selected]{color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:contrast-more\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:contrast-more\:border-current{border-color:initial}.hx\:contrast-more\:border-gray-800{border-color:var(--hx-color-gray-800)}.hx\:contrast-more\:border-gray-900{border-color:var(--hx-color-gray-900)}.hx\:contrast-more\:border-neutral-400{border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:border-primary-500{border-color:var(--hx-color-primary-500)}.hx\:contrast-more\:border-transparent{border-color:#0000}.hx\:contrast-more\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:contrast-more\:text-current{color:currentColor}.hx\:contrast-more\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:contrast-more\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:contrast-more\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:contrast-more\:underline{text-decoration-line:underline}.hx\:contrast-more\:shadow-\[0_0_0_1px_\#000\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}}}@media not all and (min-width:80rem){.hx\:max-xl\:hidden{display:none}}@media not all and (min-width:64rem){.hx\:max-lg\:min-h-\[340px\]{min-height:340px}}@media not all and (min-width:48rem){.hx\:max-md\:sticky{position:sticky}.hx\:max-md\:hidden{display:none}.hx\:max-md\:min-h-\[340px\]{min-height:340px}.hx\:max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\]{transform:translateY(-100%)}.hx\:max-md\:\[transform\:translate3d\(0\,0\,0\)\]{transform:translate(0)}}@media not all and (min-width:40rem){.hx\:max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(min-width:40rem){.hx\:sm\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:sm\:left-auto{left:auto}.hx\:sm\:block{display:block}.hx\:sm\:flex{display:flex}.hx\:sm\:w-\[110\%\]{width:110%}.hx\:sm\:flex-row{flex-direction:row}.hx\:sm\:items-center{align-items:center}.hx\:sm\:items-start{align-items:flex-start}.hx\:sm\:justify-between{justify-content:space-between}.hx\:sm\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}@media not all and (min-width:64rem){.hx\:sm\:max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@media(min-width:48rem){.hx\:md\:sticky{position:sticky}.hx\:md\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:md\:mr-0{margin-right:calc(var(--hx-spacing)*0)}.hx\:md\:hidden{display:none}.hx\:md\:inline-block{display:inline-block}.hx\:md\:inline-flex{display:inline-flex}.hx\:md\:aspect-\[1\.1\/1\]{aspect-ratio:1.1}.hx\:md\:h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\]{height:calc(100vh - var(--navbar-height) - var(--menu-height))}.hx\:md\:max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px)}.hx\:md\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:md\:shrink-0{flex-shrink:0}.hx\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hx\:md\:justify-start{justify-content:flex-start}.hx\:md\:self-start{align-self:flex-start}.hx\:md\:overflow-auto{overflow:auto}.hx\:md\:px-12{padding-inline:calc(var(--hx-spacing)*12)}.hx\:md\:pt-12{padding-top:calc(var(--hx-spacing)*12)}.hx\:md\:text-3xl{font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height))}.hx\:md\:text-5xl{font-size:var(--hx-text-5xl);line-height:var(--tw-leading,var(--hx-text-5xl--line-height))}.hx\:md\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:md\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}}@media(min-width:64rem){.hx\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:80rem){.hx\:xl\:block{display:block}.hx\:xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.hx\:ltr\:right-1\.5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*1.5)}.hx\:ltr\:right-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*2)}.hx\:ltr\:right-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*3)}.hx\:ltr\:-mr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:calc(var(--hx-spacing)*-4)}.hx\:ltr\:mr-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:auto}.hx\:ltr\:ml-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.hx\:ltr\:ml-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:ml-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:auto}.hx\:ltr\:rotate-180:where(:dir(ltr),[dir=ltr],[dir=ltr] *){rotate:180deg}.hx\:ltr\:rounded-l-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:ltr\:rounded-r-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:ltr\:border-l:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);border-left-width:1px}.hx\:ltr\:pr-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*0)}.hx\:ltr\:pr-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*1)}.hx\:ltr\:pr-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*2)}.hx\:ltr\:pr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:ltr\:pr-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:ltr\:pr-9:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*9)}.hx\:ltr\:pl-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:pl-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:ltr\:pl-5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*5)}.hx\:ltr\:pl-6:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*6)}.hx\:ltr\:pl-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:ltr\:pl-12:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*12)}.hx\:ltr\:pl-16:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*16)}.hx\:ltr\:text-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){text-align:right}.hx\:ltr\:before\:left-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);left:calc(var(--hx-spacing)*0)}@media(min-width:48rem){.hx\:ltr\:md\:left-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){left:auto}}.hx\:rtl\:left-1\.5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*1.5)}.hx\:rtl\:left-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*2)}.hx\:rtl\:left-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}.hx\:rtl\:mr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.hx\:rtl\:-ml-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--hx-spacing)*-4)}.hx\:rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.hx\:rtl\:-rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-180deg}.hx\:rtl\:rotate-270:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:270deg}.hx\:rtl\:rounded-l-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:rtl\:rounded-r-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:rtl\:border-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);border-right-width:1px}.hx\:rtl\:pr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:pr-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:rtl\:pr-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*5)}.hx\:rtl\:pr-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*6)}.hx\:rtl\:pr-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:rtl\:pr-12:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*12)}.hx\:rtl\:pr-16:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*16)}.hx\:rtl\:pl-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*0)}.hx\:rtl\:pl-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*1)}.hx\:rtl\:pl-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*2)}.hx\:rtl\:pl-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:rtl\:pl-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:rtl\:pl-9:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*9)}.hx\:rtl\:text-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.hx\:rtl\:before\:right-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);right:calc(var(--hx-spacing)*0)}.hx\:rtl\:before\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);rotate:180deg}@media(min-width:48rem){.hx\:rtl\:md\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}}.hx\:dark\:block:where(.dark,.dark *){display:block}.hx\:dark\:hidden:where(.dark,.dark *){display:none}.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:var(--hx-color-amber-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-amber-200)30%,transparent)}}.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:var(--hx-color-blue-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-blue-200)30%,transparent)}}.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-gray-100)20%,transparent)}}.hx\:dark\:border-gray-400:where(.dark,.dark *){border-color:var(--hx-color-gray-400)}.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:var(--hx-color-green-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-green-200)30%,transparent)}}.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:var(--hx-color-indigo-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-indigo-200)30%,transparent)}}.hx\:dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--hx-color-neutral-700)}.hx\:dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-orange-400)30%,transparent)}}.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:var(--hx-color-purple-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-purple-200)30%,transparent)}}.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:var(--hx-color-red-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-red-200)30%,transparent)}}.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:var(--hx-color-yellow-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-yellow-200)30%,transparent)}}.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:var(--hx-color-amber-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-amber-900)30%,transparent)}}.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:var(--hx-color-blue-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-blue-900)30%,transparent)}}.hx\:dark\:bg-dark:where(.dark,.dark *),.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:var(--hx-color-dark)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)50%,transparent)}}.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:var(--hx-color-gray-50)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-50)10%,transparent)}}.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:var(--hx-color-green-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-green-900)30%,transparent)}}.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:var(--hx-color-indigo-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-indigo-900)30%,transparent)}}.hx\:dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--hx-color-neutral-700)}.hx\:dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--hx-color-neutral-800)}.hx\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--hx-color-neutral-900)}.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-orange-400)20%,transparent)}}.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-400)10%,transparent)}}.hx\:dark\:bg-primary-600:where(.dark,.dark *){background-color:var(--hx-color-primary-600)}.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:var(--hx-color-purple-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-purple-900)30%,transparent)}}.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:var(--hx-color-red-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-red-900)30%,transparent)}}.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:var(--hx-color-yellow-700)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-yellow-700)30%,transparent)}}.hx\:dark\:from-gray-100:where(.dark,.dark *){--tw-gradient-from:var(--hx-color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:to-gray-400:where(.dark,.dark *){--tw-gradient-to:var(--hx-color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:text-amber-200:where(.dark,.dark *){color:var(--hx-color-amber-200)}.hx\:dark\:text-blue-200:where(.dark,.dark *){color:var(--hx-color-blue-200)}.hx\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:dark\:text-gray-200:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hx\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:dark\:text-gray-400:where(.dark,.dark *){color:var(--hx-color-gray-400)}.hx\:dark\:text-green-200:where(.dark,.dark *){color:var(--hx-color-green-200)}.hx\:dark\:text-indigo-200:where(.dark,.dark *){color:var(--hx-color-indigo-200)}.hx\:dark\:text-neutral-200:where(.dark,.dark *){color:var(--hx-color-neutral-200)}.hx\:dark\:text-neutral-400:where(.dark,.dark *){color:var(--hx-color-neutral-400)}.hx\:dark\:text-orange-300:where(.dark,.dark *){color:var(--hx-color-orange-300)}.hx\:dark\:text-primary-600:where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:text-purple-200:where(.dark,.dark *){color:var(--hx-color-purple-200)}.hx\:dark\:text-red-200:where(.dark,.dark *){color:var(--hx-color-red-200)}.hx\:dark\:text-slate-100:where(.dark,.dark *){color:var(--hx-color-slate-100)}.hx\:dark\:text-white:where(.dark,.dark *){color:var(--hx-color-white)}.hx\:dark\:text-yellow-200:where(.dark,.dark *){color:var(--hx-color-yellow-200)}.hx\:dark\:opacity-80:where(.dark,.dark *){opacity:.8}.hx\:dark\:shadow-\[0_-1px_0_rgba\(255\,255\,255\,\.1\)_inset\]:where(.dark,.dark *){--tw-shadow:0 -1px 0 var(--tw-shadow-color,#ffffff1a)inset;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-\[0_-12px_16px_\#111\]:where(.dark,.dark *){--tw-shadow:0 -12px 16px var(--tw-shadow-color,#111);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:dark\:group-hover\:text-gray-50:where(.dark,.dark *):is(:where(.hx\:group):hover *){color:var(--hx-color-gray-50)}}.hx\:group-data-\[active\=true\]\:dark\:text-primary-600:is(:where(.hx\:group)[data-active=true] *):where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:placeholder\:text-gray-400:where(.dark,.dark *)::placeholder{color:var(--hx-color-gray-400)}.hx\:dark\:before\:bg-neutral-800:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hx\:dark\:before\:invert:where(.dark,.dark *):before{content:var(--tw-content);--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.hx\:dark\:hover\:border-gray-100:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-100)}.hx\:dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-600)}.hx\:dark\:hover\:border-neutral-500:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-500)}.hx\:dark\:hover\:border-neutral-700:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:border-neutral-800:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-gray-100)5%,transparent)}}.hx\:dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:bg-neutral-800:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-neutral-900:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-900)}.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-primary-100)5%,transparent)}}.hx\:dark\:hover\:bg-primary-700:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-700)}.hx\:dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--hx-color-gray-50)}.hx\:dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--hx-color-gray-100)}.hx\:dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--hx-color-gray-200)}.hx\:dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--hx-color-gray-300)}.hx\:dark\:hover\:text-neutral-50:where(.dark,.dark *):hover{color:var(--hx-color-neutral-50)}.hx\:dark\:hover\:text-primary-400:where(.dark,.dark *):hover{color:var(--hx-color-primary-400)}.hx\:dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--hx-color-white)}.hx\:dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.hx\:dark\:focus-visible\:bg-dark:where(.dark,.dark *):focus-visible{background-color:var(--hx-color-dark)}.hx\:data-\[state\=selected\]\:dark\:border-primary-500[data-state=selected]:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:dark\:text-primary-600[data-state=selected]:where(.dark,.dark *){color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:dark\:border-current:where(.dark,.dark *){border-color:initial}.hx\:contrast-more\:dark\:border-gray-50:where(.dark,.dark *){border-color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:border-primary-500:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:dark\:contrast-more\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:text-current:where(.dark,.dark *){color:currentColor}.hx\:contrast-more\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:contrast-more\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:contrast-more\:dark\:shadow-\[0_0_0_1px_\#fff\]:where(.dark,.dark *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:dark\:hover\:border-gray-50:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-50)}}}@media print{.hx\:print\:\[display\:none\],.hx\:print\:hidden{display:none}.hx\:print\:bg-transparent{background-color:#0000}}}html{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--hx-color-white);width:100%}body:where(.dark,.dark *){background-color:var(--hx-color-dark);color:var(--hx-color-gray-100)}:root{--primary-hue:212deg;--primary-saturation:100%;--primary-lightness:50%;--navbar-height:4rem;--hextra-banner-height:2rem;--menu-height:3.75rem}.dark{--primary-hue:204deg;--primary-saturation:100%;--primary-lightness:50%}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*2);font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height));--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*10);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-neutral-200)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-neutral-200)70%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:calc(var(--hx-spacing)*1);font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--hx-color-neutral-400)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)10%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--hx-color-primary-600);text-decoration-line:underline;text-decoration-thickness:from-font}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);border-color:var(--hx-color-gray-300);color:var(--hx-color-gray-700);font-style:italic}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);padding-left:calc(var(--hx-spacing)*6);border-left-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);padding-right:calc(var(--hx-spacing)*6);border-right-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-gray-700);color:var(--hx-color-gray-400)}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--hx-spacing)*4);--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*6);border-collapse:collapse;width:100%;padding:calc(var(--hx-spacing)*0);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);display:block;overflow-x:auto}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead{background-color:var(--hx-color-gray-50)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:var(--hx-color-gray-600)}@supports(color:color-mix(in lab,red,red)){.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-600)20%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr{margin:calc(var(--hx-spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:decimal}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:disc}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):has(li input[type=checkbox]){list-style-type:none}.content :where(ul,ol)>li>:where(ul,ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*0)}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:#0000;border-radius:0}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:#0000}.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-inline:auto;margin-block:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-md)}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption{margin-top:calc(var(--hx-spacing)*2);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-500);display:block}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:where(.dark,.dark *){color:var(--hx-color-gray-400)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt{margin-top:calc(var(--hx-spacing)*6);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd{margin-block:calc(var(--hx-spacing)*2);padding-inline-start:calc(var(--hx-spacing)*6)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*10);border-color:var(--hx-color-gray-200)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .footnotes{margin-top:calc(var(--hx-spacing)*12);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.content .footnotes hr{border-color:var(--hx-color-gray-200)}.content .footnotes hr:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .subheading-anchor{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.content .subheading-anchor:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.content .subheading-anchor:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}span:target+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor),.content .subheading-anchor:focus-visible{opacity:1}span+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor){text-decoration-line:none!important}.content .subheading-anchor:after{content:var(--tw-content);color:var(--hx-color-gray-300)}.content .subheading-anchor:where(.dark,.dark *):after{content:var(--tw-content);color:var(--hx-color-neutral-700)}.content .subheading-anchor:after{padding-inline:calc(var(--hx-spacing)*1);--tw-content:"#";content:var(--tw-content)}span:target+:is(){color:var(--hx-color-gray-400)}span:target+:is():where(.dark,.dark *){color:var(--hx-color-neutral-500)}article details>summary::-webkit-details-marker{display:none}article details>summary:before{vertical-align:-4px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx:h-5 hx:w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E");width:1.2em;height:1.2em;padding:0 .6em}:lang(fa) ol{list-style-type:persian}.highlight .chroma .err{color:#a61717;background-color:#e3d2d2}.highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.highlight .chroma .line{display:flex}.highlight .chroma .k,.highlight .chroma .kc,.highlight .chroma .kd,.highlight .chroma .kn,.highlight .chroma .kp,.highlight .chroma .kr{color:#000;font-weight:700}.highlight .chroma .kt{color:#458;font-weight:700}.highlight .chroma .na{color:teal}.highlight .chroma .nb{color:#0086b3}.highlight .chroma .bp{color:#999}.highlight .chroma .nc{color:#458;font-weight:700}.highlight .chroma .no{color:teal}.highlight .chroma .nd{color:#3c5d5d;font-weight:700}.highlight .chroma .ni{color:purple}.highlight .chroma .ne,.highlight .chroma .nf,.highlight .chroma .nl{color:#900;font-weight:700}.highlight .chroma .nn{color:#555}.highlight .chroma .nt{color:navy}.highlight .chroma .nv,.highlight .chroma .vc,.highlight .chroma .vg,.highlight .chroma .vi{color:teal}.highlight .chroma .s,.highlight .chroma .sa,.highlight .chroma .sb,.highlight .chroma .sc,.highlight .chroma .dl,.highlight .chroma .sd,.highlight .chroma .s2,.highlight .chroma .se,.highlight .chroma .sh,.highlight .chroma .si,.highlight .chroma .sx{color:#d14}.highlight .chroma .sr{color:#009926}.highlight .chroma .s1{color:#d14}.highlight .chroma .ss{color:#990073}.highlight .chroma .m,.highlight .chroma .mb,.highlight .chroma .mf,.highlight .chroma .mh,.highlight .chroma .mi,.highlight .chroma .il,.highlight .chroma .mo{color:#099}.highlight .chroma .o,.highlight .chroma .ow{color:#000;font-weight:700}.highlight .chroma .c,.highlight .chroma .ch,.highlight .chroma .cm,.highlight .chroma .c1{color:#998;font-style:italic}.highlight .chroma .cs,.highlight .chroma .cp,.highlight .chroma .cpf{color:#999;font-style:italic;font-weight:700}.highlight .chroma .gd{color:#000;background-color:#fdd}.highlight .chroma .ge{color:#000;font-style:italic}.highlight .chroma .gr{color:#a00}.highlight .chroma .gh{color:#999}.highlight .chroma .gi{color:#000;background-color:#dfd}.highlight .chroma .go{color:#888}.highlight .chroma .gp{color:#555}.highlight .chroma .gs{font-weight:700}.highlight .chroma .gu{color:#aaa}.highlight .chroma .gt{color:#a00}.highlight .chroma .gl{text-decoration:underline}.highlight .chroma .w{color:#bbb}.dark .highlight .chroma .err{color:#f85149}.dark .highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.dark .highlight .chroma .line{display:flex}.dark .highlight .chroma .k{color:#ff7b72}.dark .highlight .chroma .kc{color:#79c0ff}.dark .highlight .chroma .kd,.dark .highlight .chroma .kn{color:#ff7b72}.dark .highlight .chroma .kp{color:#79c0ff}.dark .highlight .chroma .kr,.dark .highlight .chroma .kt{color:#ff7b72}.dark .highlight .chroma .nc{color:#f0883e;font-weight:700}.dark .highlight .chroma .no{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nd{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .ni{color:#ffa657}.dark .highlight .chroma .ne{color:#f0883e;font-weight:700}.dark .highlight .chroma .nf{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .nl{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nn{color:#ff7b72}.dark .highlight .chroma .py{color:#79c0ff}.dark .highlight .chroma .nt{color:#7ee787}.dark .highlight .chroma .nv{color:#79c0ff}.dark .highlight .chroma .l{color:#a5d6ff}.dark .highlight .chroma .ld{color:#79c0ff}.dark .highlight .chroma .s{color:#a5d6ff}.dark .highlight .chroma .sa{color:#79c0ff}.dark .highlight .chroma .sb,.dark .highlight .chroma .sc{color:#a5d6ff}.dark .highlight .chroma .dl{color:#79c0ff}.dark .highlight .chroma .sd,.dark .highlight .chroma .s2{color:#a5d6ff}.dark .highlight .chroma .se,.dark .highlight .chroma .sh{color:#79c0ff}.dark .highlight .chroma .si,.dark .highlight .chroma .sx{color:#a5d6ff}.dark .highlight .chroma .sr{color:#79c0ff}.dark .highlight .chroma .s1,.dark .highlight .chroma .ss,.dark .highlight .chroma .m,.dark .highlight .chroma .mb,.dark .highlight .chroma .mf,.dark .highlight .chroma .mh,.dark .highlight .chroma .mi,.dark .highlight .chroma .il,.dark .highlight .chroma .mo{color:#a5d6ff}.dark .highlight .chroma .o,.dark .highlight .chroma .ow{color:#ff7b72;font-weight:700}.dark .highlight .chroma .c,.dark .highlight .chroma .ch,.dark .highlight .chroma .cm,.dark .highlight .chroma .c1{color:#8b949e;font-style:italic}.dark .highlight .chroma .cs,.dark .highlight .chroma .cp,.dark .highlight .chroma .cpf{color:#8b949e;font-style:italic;font-weight:700}.dark .highlight .chroma .gd{color:#ffa198;background-color:#490202}.dark .highlight .chroma .ge{color:inherit;font-style:italic}.dark .highlight .chroma .gr{color:#ffa198}.dark .highlight .chroma .gh{color:#79c0ff;font-weight:700}.dark .highlight .chroma .gi{color:#56d364;background-color:#0f5323}.dark .highlight .chroma .go,.dark .highlight .chroma .gp{color:#8b949e}.dark .highlight .chroma .gs{font-weight:700}.dark .highlight .chroma .gu{color:#79c0ff}.dark .highlight .chroma .gt{color:#ff7b72}.dark .highlight .chroma .gl{text-decoration:underline}.dark .highlight .chroma .w{color:#6e7681}.hextra-code-block{--tw-leading:calc(var(--hx-spacing)*5);font-size:.9em;line-height:calc(var(--hx-spacing)*5)}.hextra-code-block pre{background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block pre{--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.hextra-code-block pre{border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.hextra-code-block pre{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.hextra-code-block pre:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.hextra-code-block pre:where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.hextra-code-block .hextra-code-filename{top:calc(var(--hx-spacing)*0);z-index:1;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:var(--hx-radius-xl);border-top-right-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);width:100%;position:absolute;overflow:hidden}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block .hextra-code-filename{padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*2);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));color:var(--hx-color-gray-700)}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hextra-code-block .hextra-code-filename+pre:not(.lntable pre){padding-top:calc(var(--hx-spacing)*12)}.hextra-code-block pre:not(.lntable pre){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*4)}.hextra-code-block div:nth-of-type(2) pre{padding-top:calc(var(--hx-spacing)*12);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .lntable{margin:calc(var(--hx-spacing)*0);border-radius:var(--hx-radius-xl);width:auto;display:block;overflow:auto}.chroma .lntable pre{padding-top:calc(var(--hx-spacing)*4);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line){min-width:2.6rem;padding-right:calc(var(--hx-spacing)*4);padding-left:calc(var(--hx-spacing)*4);color:var(--hx-color-neutral-600)}:is(.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line)):where(.dark,.dark *){color:var(--hx-color-neutral-300)}.chroma .lntd{padding:calc(var(--hx-spacing)*0);vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{background-color:var(--hx-color-primary-800);width:100%;display:block}@supports(color:color-mix(in lab,red,red)){.chroma .hl{background-color:color-mix(in oklab,var(--hx-color-primary-800)10%,transparent)}}.hextra-cards{grid-template-columns:repeat(auto-fill,minmax(max(250px,calc((100% - 1rem*2)/var(--hextra-cards-grid-cols))),1fr))}.hextra-card{position:relative}.hextra-card img{-webkit-user-select:none;user-select:none}.hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card .hextra-card-icon svg{color:#0003;width:1.5rem;transition:color .3s}.hextra-card p{margin-top:.5rem;position:relative}.dark .hextra-card .hextra-card-icon svg{color:#fff6}.dark .hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card-tag{z-index:10;position:absolute;top:5px}.hextra-card-tag:where(:dir(ltr)){right:5px}.hextra-card-tag:where(:dir(rtl)){left:5px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker){counter-increment:step}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);margin-left:-41px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);margin-right:-44px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);background-color:var(--hx-color-gray-100)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:4px;border-color:var(--hx-color-white)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);border-color:var(--hx-color-dark)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step);text-align:center;text-indent:-1px;width:33px;height:33px;font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal);color:var(--hx-color-neutral-400);border-radius:340282e33px;position:absolute}:lang(fa) .hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step,persian)}.hextra-search-wrapper li{margin-inline:calc(var(--hx-spacing)*2.5);border-radius:var(--hx-radius-md);overflow-wrap:break-word;color:var(--hx-color-gray-800)}@media(prefers-contrast:more){.hextra-search-wrapper li{border-style:var(--tw-border-style);border-width:1px;border-color:#0000}}.hextra-search-wrapper li:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hextra-search-wrapper li a{scroll-margin:calc(var(--hx-spacing)*12);padding-inline:calc(var(--hx-spacing)*2.5);padding-block:calc(var(--hx-spacing)*2);display:block}.hextra-search-wrapper li a:focus-visible{--tw-outline-style:none;outline-style:none}.hextra-search-wrapper li .hextra-search-title{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hextra-search-wrapper li .hextra-search-active{border-radius:var(--hx-radius-md);background-color:var(--hx-color-primary-500)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper li .hextra-search-active{background-color:color-mix(in oklab,var(--hx-color-primary-500)10%,transparent)}}@media(prefers-contrast:more){.hextra-search-wrapper li .hextra-search-active{border-color:var(--hx-color-primary-500)}}.hextra-search-wrapper .hextra-search-no-result{padding:calc(var(--hx-spacing)*8);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-400);-webkit-user-select:none;user-select:none;display:block}.hextra-search-wrapper .hextra-search-prefix{margin-inline:calc(var(--hx-spacing)*2.5);margin-top:calc(var(--hx-spacing)*6);margin-bottom:calc(var(--hx-spacing)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix{border-color:color-mix(in oklab,var(--hx-color-black)10%,transparent)}}.hextra-search-wrapper .hextra-search-prefix{padding-inline:calc(var(--hx-spacing)*2.5);padding-bottom:calc(var(--hx-spacing)*1.5);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);color:var(--hx-color-gray-500);text-transform:uppercase;-webkit-user-select:none;user-select:none}.hextra-search-wrapper .hextra-search-prefix:first-child{margin-top:calc(var(--hx-spacing)*0)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix{border-color:var(--hx-color-gray-600);color:var(--hx-color-gray-900)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)20%,transparent)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){color:var(--hx-color-gray-300)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-gray-50);color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{margin-top:calc(var(--hx-spacing)*1);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:1.35rem;text-overflow:ellipsis;color:var(--hx-color-gray-600);line-height:1.35rem;overflow:hidden}.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-400)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box}.hextra-search-wrapper .hextra-search-match{color:var(--hx-color-primary-600)}@media(max-width:48rem){.hextra-sidebar-container{top:calc(var(--hx-spacing)*0);bottom:calc(var(--hx-spacing)*0);z-index:15;overscroll-behavior:contain;background-color:var(--hx-color-white);width:100%;padding-top:calc(var(--navbar-height) + var(--hextra-banner-height));position:fixed}.hextra-sidebar-container:where(.dark,.dark *){background-color:var(--hx-color-dark)}.hextra-sidebar-container{will-change:transform,opacity;contain:layout style;backface-visibility:hidden;transition:transform .4s cubic-bezier(.52,.16,.04,1)}}.hextra-sidebar-container li>.hextra-sidebar-children{height:calc(var(--hx-spacing)*0)}.hextra-sidebar-container li.open>.hextra-sidebar-children{height:auto;padding-top:calc(var(--hx-spacing)*1)}.hextra-sidebar-container li.open>.hextra-sidebar-item>.hextra-sidebar-collapsible-button>svg>path{rotate:90deg}.hextra-banner-hidden .hextra-banner{display:none}.hextra-banner :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline;text-decoration-thickness:from-font}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}nav .hextra-search-wrapper{display:none}@media(min-width:48rem){nav .hextra-search-wrapper{display:inline-block}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-nav-container-blur{background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur{background-color:color-mix(in oklab,var(--hx-color-white)85%,transparent)}}.hextra-nav-container-blur{--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-nav-container-blur:where(.dark,.dark *){background-color:var(--hx-color-dark)!important}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)80%,transparent)!important}}}.hextra-hamburger-menu svg g{transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg path{opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open path{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:0s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open g{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open>path{opacity:0}.hextra-hamburger-menu svg.open>g:first-of-type{rotate:45deg}.hextra-hamburger-menu svg.open>g:first-of-type path{--tw-translate-y:calc(var(--hx-spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-hamburger-menu svg.open>g:nth-of-type(2){rotate:-45deg}.hextra-hamburger-menu svg.open>g:nth-of-type(2) path{--tw-translate-y:calc(var(--hx-spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-scrollbar,.hextra-scrollbar *{scrollbar-width:thin;scrollbar-color:oklch(55.55% 0 0/.4)transparent;scrollbar-gutter:stable}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar{height:calc(var(--hx-spacing)*3);width:calc(var(--hx-spacing)*3)}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-track{background-color:#0000}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-thumb{border-radius:10px}:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{background-color:var(--tw-shadow-color);--tw-shadow-color:var(--hx-color-neutral-500);background-clip:content-box;border:3px solid #0000}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}@media(hover:hover){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:var(--hx-color-neutral-500)}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)40%,transparent)var(--tw-shadow-alpha),transparent)}}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-code-copy-btn{opacity:.85;--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-code-copy-btn:where(.dark,.dark *){opacity:.8}}@media(min-width:1024px){.hextra-feature-grid{grid-template-columns:repeat(var(--hextra-feature-grid-cols),minmax(0,1fr))}}.hextra-jupyter-code-cell{scrollbar-gutter:auto;margin-top:calc(var(--hx-spacing)*6)}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:hidden}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs{max-height:50vh;overflow:auto}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre{max-width:100%;font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:auto}.hextra-badge{align-items:center;display:inline-flex}.hextra-toc a.hextra-toc-active{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.2s;transition-duration:.2s;color:var(--hx-color-gray-900)!important}.hextra-toc a.hextra-toc-active:where(.dark,.dark *){color:var(--hx-color-gray-50)!important}.hextra-archive-timeline{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline{border-color:color-mix(in oklab,var(--hx-color-black)15%,transparent)}}.hextra-archive-timeline:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)15%,transparent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false} \ No newline at end of file diff --git a/public/css/compiled/main.min.1ad8bafe4bcdf3c97beba654bef9e5fe4247509e3e27ac1143012be7f29fcb95.css b/public/css/compiled/main.min.1ad8bafe4bcdf3c97beba654bef9e5fe4247509e3e27ac1143012be7f29fcb95.css deleted file mode 100644 index 2d65929..0000000 --- a/public/css/compiled/main.min.1ad8bafe4bcdf3c97beba654bef9e5fe4247509e3e27ac1143012be7f29fcb95.css +++ /dev/null @@ -1 +0,0 @@ -:root{--hextra-max-page-width:80rem;--hextra-max-content-width:72rem;--hextra-max-navbar-width:80rem;--hextra-max-footer-width:80rem}.hextra-max-page-width{max-width:var(--hextra-max-page-width)}.hextra-max-content-width{max-width:var(--hextra-max-content-width)}.hextra-max-navbar-width{max-width:var(--hextra-max-navbar-width)}.hextra-max-footer-width{max-width:var(--hextra-max-footer-width)}/*!tailwindcss v4.1.18 | MIT License | https://tailwindcss.com*/@layer properties{@supports(((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--hx-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--hx-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--hx-color-red-100:oklch(93.6% .032 17.717);--hx-color-red-200:oklch(88.5% .062 18.334);--hx-color-red-900:oklch(39.6% .141 25.723);--hx-color-orange-50:oklch(98% .016 73.684);--hx-color-orange-100:oklch(95.4% .038 75.164);--hx-color-orange-300:oklch(83.7% .128 66.29);--hx-color-orange-400:oklch(75% .183 55.934);--hx-color-orange-800:oklch(47% .157 37.304);--hx-color-amber-100:oklch(96.2% .059 95.617);--hx-color-amber-200:oklch(92.4% .12 95.746);--hx-color-amber-900:oklch(41.4% .112 45.904);--hx-color-yellow-50:oklch(98.7% .026 102.212);--hx-color-yellow-100:oklch(97.3% .071 103.193);--hx-color-yellow-200:oklch(94.5% .129 101.54);--hx-color-yellow-700:oklch(55.4% .135 66.442);--hx-color-yellow-900:oklch(42.1% .095 57.708);--hx-color-green-100:oklch(96.2% .044 156.743);--hx-color-green-200:oklch(92.5% .084 155.995);--hx-color-green-900:oklch(39.3% .095 152.535);--hx-color-blue-100:oklch(93.2% .032 255.585);--hx-color-blue-200:oklch(88.2% .059 254.128);--hx-color-blue-900:oklch(37.9% .146 265.522);--hx-color-indigo-100:oklch(93% .034 272.788);--hx-color-indigo-200:oklch(87% .065 274.039);--hx-color-indigo-900:oklch(35.9% .144 278.697);--hx-color-purple-100:oklch(94.6% .033 307.174);--hx-color-purple-200:oklch(90.2% .063 306.703);--hx-color-purple-900:oklch(38.1% .176 304.987);--hx-color-slate-50:oklch(98.4% .003 247.858);--hx-color-slate-100:oklch(96.8% .007 247.896);--hx-color-slate-900:oklch(20.8% .042 265.755);--hx-color-gray-50:oklch(98.5% .002 247.839);--hx-color-gray-100:oklch(96.7% .003 264.542);--hx-color-gray-200:oklch(92.8% .006 264.531);--hx-color-gray-300:oklch(87.2% .01 258.338);--hx-color-gray-400:oklch(70.7% .022 261.325);--hx-color-gray-500:oklch(55.1% .027 264.364);--hx-color-gray-600:oklch(44.6% .03 256.802);--hx-color-gray-700:oklch(37.3% .034 259.733);--hx-color-gray-800:oklch(27.8% .033 256.848);--hx-color-gray-900:oklch(21% .034 264.665);--hx-color-neutral-50:oklch(98.5% 0 0);--hx-color-neutral-200:oklch(92.2% 0 0);--hx-color-neutral-300:oklch(87% 0 0);--hx-color-neutral-400:oklch(70.8% 0 0);--hx-color-neutral-500:oklch(55.6% 0 0);--hx-color-neutral-600:oklch(43.9% 0 0);--hx-color-neutral-700:oklch(37.1% 0 0);--hx-color-neutral-800:oklch(26.9% 0 0);--hx-color-neutral-900:oklch(20.5% 0 0);--hx-color-black:#000;--hx-color-white:#fff;--hx-spacing:.25rem;--hx-breakpoint-xl:80rem;--hx-text-xs:.75rem;--hx-text-xs--line-height:calc(1/.75);--hx-text-sm:.875rem;--hx-text-sm--line-height:calc(1.25/.875);--hx-text-base:1rem;--hx-text-base--line-height:calc(1.5/1);--hx-text-lg:1.125rem;--hx-text-lg--line-height:calc(1.75/1.125);--hx-text-xl:1.25rem;--hx-text-xl--line-height:calc(1.75/1.25);--hx-text-2xl:1.5rem;--hx-text-2xl--line-height:calc(2/1.5);--hx-text-3xl:1.875rem;--hx-text-3xl--line-height:calc(2.25/1.875);--hx-text-4xl:2.25rem;--hx-text-4xl--line-height:calc(2.5/2.25);--hx-text-5xl:3rem;--hx-text-5xl--line-height:1;--hx-font-weight-normal:400;--hx-font-weight-medium:500;--hx-font-weight-semibold:600;--hx-font-weight-bold:700;--hx-font-weight-extrabold:800;--hx-tracking-tighter:-.05em;--hx-tracking-tight:-.025em;--hx-leading-tight:1.25;--hx-radius-xs:.125rem;--hx-radius-sm:.25rem;--hx-radius-md:.375rem;--hx-radius-lg:.5rem;--hx-radius-xl:.75rem;--hx-radius-3xl:1.5rem;--hx-ease-in:cubic-bezier(.4,0,1,1);--hx-ease-out:cubic-bezier(0,0,.2,1);--hx-ease-in-out:cubic-bezier(.4,0,.2,1);--hx-blur-md:12px;--hx-default-transition-duration:.15s;--hx-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--hx-default-font-family:var(--hx-font-sans);--hx-default-mono-font-family:var(--hx-font-mono);--hx-color-primary-100:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*44));--hx-color-primary-200:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*36));--hx-color-primary-300:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*27));--hx-color-primary-400:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*16));--hx-color-primary-500:hsl(var(--primary-hue)var(--primary-saturation)var(--primary-lightness));--hx-color-primary-600:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*45));--hx-color-primary-700:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*39));--hx-color-primary-800:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*32));--hx-color-primary-900:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*24));--hx-color-dark:#111}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--hx-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--hx-default-font-feature-settings,normal);font-variation-settings:var(--hx-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hx-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--hx-default-mono-font-feature-settings,normal);font-variation-settings:var(--hx-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports(not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports(color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}abbr:where([title]){cursor:help}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible:where(.dark,.dark *){--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}}@layer components;@layer utilities{.hx\:pointer-events-none{pointer-events:none}.hx\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hx\:absolute{position:absolute}.hx\:relative{position:relative}.hx\:sticky{position:sticky}.hx\:inset-x-0{inset-inline:calc(var(--hx-spacing)*0)}.hx\:inset-y-0{inset-block:calc(var(--hx-spacing)*0)}.hx\:top-0{top:calc(var(--hx-spacing)*0)}.hx\:top-1\/2{top:50%}.hx\:top-8{top:calc(var(--hx-spacing)*8)}.hx\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:top-\[40\%\]{top:40%}.hx\:top-full{top:100%}.hx\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:bottom-0{bottom:calc(var(--hx-spacing)*0)}.hx\:left-0{left:calc(var(--hx-spacing)*0)}.hx\:left-\[24px\]{left:24px}.hx\:left-\[36px\]{left:36px}.hx\:z-20{z-index:20}.hx\:z-\[-1\]{z-index:-1}.hx\:order-last{order:9999}.hx\:m-\[11px\]{margin:11px}.hx\:mx-1{margin-inline:calc(var(--hx-spacing)*1)}.hx\:mx-4{margin-inline:calc(var(--hx-spacing)*4)}.hx\:mx-auto{margin-inline:auto}.hx\:my-1{margin-block:calc(var(--hx-spacing)*1)}.hx\:my-1\.5{margin-block:calc(var(--hx-spacing)*1.5)}.hx\:my-2{margin-block:calc(var(--hx-spacing)*2)}.hx\:-mt-20{margin-top:calc(var(--hx-spacing)*-20)}.hx\:mt-1{margin-top:calc(var(--hx-spacing)*1)}.hx\:mt-1\.5{margin-top:calc(var(--hx-spacing)*1.5)}.hx\:mt-2{margin-top:calc(var(--hx-spacing)*2)}.hx\:mt-4{margin-top:calc(var(--hx-spacing)*4)}.hx\:mt-5{margin-top:calc(var(--hx-spacing)*5)}.hx\:mt-6{margin-top:calc(var(--hx-spacing)*6)}.hx\:mt-8{margin-top:calc(var(--hx-spacing)*8)}.hx\:mt-12{margin-top:calc(var(--hx-spacing)*12)}.hx\:mt-16{margin-top:calc(var(--hx-spacing)*16)}.hx\:mt-auto{margin-top:auto}.hx\:-mr-2{margin-right:calc(var(--hx-spacing)*-2)}.hx\:mr-1{margin-right:calc(var(--hx-spacing)*1)}.hx\:mr-2{margin-right:calc(var(--hx-spacing)*2)}.hx\:-mb-0\.5{margin-bottom:calc(var(--hx-spacing)*-.5)}.hx\:mb-0{margin-bottom:calc(var(--hx-spacing)*0)}.hx\:mb-2{margin-bottom:calc(var(--hx-spacing)*2)}.hx\:mb-4{margin-bottom:calc(var(--hx-spacing)*4)}.hx\:mb-6{margin-bottom:calc(var(--hx-spacing)*6)}.hx\:mb-8{margin-bottom:calc(var(--hx-spacing)*8)}.hx\:mb-10{margin-bottom:calc(var(--hx-spacing)*10)}.hx\:mb-12{margin-bottom:calc(var(--hx-spacing)*12)}.hx\:mb-16{margin-bottom:calc(var(--hx-spacing)*16)}.hx\:-ml-2{margin-left:calc(var(--hx-spacing)*-2)}.hx\:ml-2{margin-left:calc(var(--hx-spacing)*2)}.hx\:ml-4{margin-left:calc(var(--hx-spacing)*4)}.hx\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hx\:block{display:block}.hx\:flex{display:flex}.hx\:grid{display:grid}.hx\:hidden{display:none}.hx\:inline{display:inline}.hx\:inline-block{display:inline-block}.hx\:inline-flex{display:inline-flex}.hx\:aspect-auto{aspect-ratio:auto}.hx\:size-4{width:calc(var(--hx-spacing)*4);height:calc(var(--hx-spacing)*4)}.hx\:h-0{height:calc(var(--hx-spacing)*0)}.hx\:h-2{height:calc(var(--hx-spacing)*2)}.hx\:h-3\.5{height:calc(var(--hx-spacing)*3.5)}.hx\:h-4{height:calc(var(--hx-spacing)*4)}.hx\:h-5{height:calc(var(--hx-spacing)*5)}.hx\:h-7{height:calc(var(--hx-spacing)*7)}.hx\:h-10{height:calc(var(--hx-spacing)*10)}.hx\:h-16{height:calc(var(--hx-spacing)*16)}.hx\:h-\[18px\]{height:18px}.hx\:h-full{height:100%}.hx\:h-px{height:1px}.hx\:max-h-\(--menu-height\){max-height:var(--menu-height)}.hx\:max-h-64{max-height:calc(var(--hx-spacing)*64)}.hx\:max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom))}.hx\:max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}.hx\:min-h-\[100px\]{min-height:100px}.hx\:min-h-\[calc\(100vh-var\(--navbar-height\)\)\]{min-height:calc(100vh - var(--navbar-height))}.hx\:w-2{width:calc(var(--hx-spacing)*2)}.hx\:w-3\.5{width:calc(var(--hx-spacing)*3.5)}.hx\:w-4{width:calc(var(--hx-spacing)*4)}.hx\:w-10{width:calc(var(--hx-spacing)*10)}.hx\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:w-\[110\%\]{width:110%}.hx\:w-\[180\%\]{width:180%}.hx\:w-full{width:100%}.hx\:w-max{width:max-content}.hx\:w-screen{width:100vw}.hx\:max-w-\[50\%\]{max-width:50%}.hx\:max-w-\[90rem\]{max-width:90rem}.hx\:max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\]{max-width:min(100vw - 2rem,100% + 20rem)}.hx\:max-w-full{max-width:100%}.hx\:max-w-none{max-width:none}.hx\:max-w-screen-xl{max-width:var(--hx-breakpoint-xl)}.hx\:min-w-0{min-width:calc(var(--hx-spacing)*0)}.hx\:min-w-\[18px\]{min-width:18px}.hx\:min-w-\[24px\]{min-width:24px}.hx\:min-w-full{min-width:100%}.hx\:shrink-0{flex-shrink:0}.hx\:grow{flex-grow:1}.hx\:origin-center{transform-origin:50%}.hx\:-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hx\:cursor-default{cursor:default}.hx\:cursor-pointer{cursor:pointer}.hx\:scroll-my-6{scroll-margin-block:calc(var(--hx-spacing)*6)}.hx\:scroll-py-6{scroll-padding-block:calc(var(--hx-spacing)*6)}.hx\:list-none{list-style-type:none}.hx\:appearance-none{appearance:none}.hx\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.hx\:flex-col{flex-direction:column}.hx\:flex-wrap{flex-wrap:wrap}.hx\:items-baseline{align-items:baseline}.hx\:items-center{align-items:center}.hx\:items-start{align-items:flex-start}.hx\:justify-between{justify-content:space-between}.hx\:justify-center{justify-content:center}.hx\:justify-end{justify-content:flex-end}.hx\:justify-start{justify-content:flex-start}.hx\:justify-items-start{justify-items:start}.hx\:gap-1{gap:calc(var(--hx-spacing)*1)}.hx\:gap-1\.5{gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-2{gap:calc(var(--hx-spacing)*2)}.hx\:gap-4{gap:calc(var(--hx-spacing)*4)}.hx\:gap-x-1\.5{column-gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-x-2{column-gap:calc(var(--hx-spacing)*2)}.hx\:gap-y-1{row-gap:calc(var(--hx-spacing)*1)}.hx\:gap-y-2{row-gap:calc(var(--hx-spacing)*2)}.hx\:overflow-auto{overflow:auto}.hx\:overflow-hidden{overflow:hidden}.hx\:overflow-x-auto{overflow-x:auto}.hx\:overflow-x-hidden{overflow-x:hidden}.hx\:overflow-y-auto{overflow-y:auto}.hx\:overflow-y-hidden{overflow-y:hidden}.hx\:overscroll-contain{overscroll-behavior:contain}.hx\:overscroll-x-contain{overscroll-behavior-x:contain}.hx\:rounded-3xl{border-radius:var(--hx-radius-3xl)}.hx\:rounded-full{border-radius:340282e33px}.hx\:rounded-lg{border-radius:var(--hx-radius-lg)}.hx\:rounded-md{border-radius:var(--hx-radius-md)}.hx\:rounded-sm{border-radius:var(--hx-radius-sm)}.hx\:rounded-xl{border-radius:var(--hx-radius-xl)}.hx\:rounded-xs{border-radius:var(--hx-radius-xs)}.hx\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.hx\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:border-0{border-style:var(--tw-border-style);border-width:0}.hx\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.hx\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hx\:border-amber-200{border-color:var(--hx-color-amber-200)}.hx\:border-black\/5{border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:border-black\/5{border-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:border-blue-200{border-color:var(--hx-color-blue-200)}.hx\:border-gray-200{border-color:var(--hx-color-gray-200)}.hx\:border-gray-500{border-color:var(--hx-color-gray-500)}.hx\:border-green-200{border-color:var(--hx-color-green-200)}.hx\:border-indigo-200{border-color:var(--hx-color-indigo-200)}.hx\:border-orange-100{border-color:var(--hx-color-orange-100)}.hx\:border-purple-200{border-color:var(--hx-color-purple-200)}.hx\:border-red-200{border-color:var(--hx-color-red-200)}.hx\:border-transparent{border-color:#0000}.hx\:border-yellow-100{border-color:var(--hx-color-yellow-100)}.hx\:bg-amber-100{background-color:var(--hx-color-amber-100)}.hx\:bg-black\/\[\.05\]{background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-black\/\[\.05\]{background-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:bg-blue-100{background-color:var(--hx-color-blue-100)}.hx\:bg-gray-100{background-color:var(--hx-color-gray-100)}.hx\:bg-gray-200{background-color:var(--hx-color-gray-200)}.hx\:bg-green-100{background-color:var(--hx-color-green-100)}.hx\:bg-indigo-100{background-color:var(--hx-color-indigo-100)}.hx\:bg-neutral-50{background-color:var(--hx-color-neutral-50)}.hx\:bg-neutral-900{background-color:var(--hx-color-neutral-900)}.hx\:bg-orange-50{background-color:var(--hx-color-orange-50)}.hx\:bg-primary-100{background-color:var(--hx-color-primary-100)}.hx\:bg-primary-400{background-color:var(--hx-color-primary-400)}.hx\:bg-primary-600{background-color:var(--hx-color-primary-600)}.hx\:bg-primary-700\/5{background-color:var(--hx-color-primary-700)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-primary-700\/5{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hx\:bg-purple-100{background-color:var(--hx-color-purple-100)}.hx\:bg-red-100{background-color:var(--hx-color-red-100)}.hx\:bg-transparent{background-color:#0000}.hx\:bg-white{background-color:var(--hx-color-white)}.hx\:bg-yellow-50{background-color:var(--hx-color-yellow-50)}.hx\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hx\:from-gray-900{--tw-gradient-from:var(--hx-color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:to-gray-600{--tw-gradient-to:var(--hx-color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.hx\:p-0{padding:calc(var(--hx-spacing)*0)}.hx\:p-0\.5{padding:calc(var(--hx-spacing)*.5)}.hx\:p-1{padding:calc(var(--hx-spacing)*1)}.hx\:p-1\.5{padding:calc(var(--hx-spacing)*1.5)}.hx\:p-2{padding:calc(var(--hx-spacing)*2)}.hx\:p-4{padding:calc(var(--hx-spacing)*4)}.hx\:p-6{padding:calc(var(--hx-spacing)*6)}.hx\:px-1\.5{padding-inline:calc(var(--hx-spacing)*1.5)}.hx\:px-2{padding-inline:calc(var(--hx-spacing)*2)}.hx\:px-2\.5{padding-inline:calc(var(--hx-spacing)*2.5)}.hx\:px-3{padding-inline:calc(var(--hx-spacing)*3)}.hx\:px-4{padding-inline:calc(var(--hx-spacing)*4)}.hx\:px-6{padding-inline:calc(var(--hx-spacing)*6)}.hx\:px-8{padding-inline:calc(var(--hx-spacing)*8)}.hx\:py-1{padding-block:calc(var(--hx-spacing)*1)}.hx\:py-1\.5{padding-block:calc(var(--hx-spacing)*1.5)}.hx\:py-2{padding-block:calc(var(--hx-spacing)*2)}.hx\:py-2\.5{padding-block:calc(var(--hx-spacing)*2.5)}.hx\:py-3{padding-block:calc(var(--hx-spacing)*3)}.hx\:py-4{padding-block:calc(var(--hx-spacing)*4)}.hx\:py-12{padding-block:calc(var(--hx-spacing)*12)}.hx\:pt-4{padding-top:calc(var(--hx-spacing)*4)}.hx\:pt-6{padding-top:calc(var(--hx-spacing)*6)}.hx\:pt-8{padding-top:calc(var(--hx-spacing)*8)}.hx\:pr-2{padding-right:calc(var(--hx-spacing)*2)}.hx\:pr-4{padding-right:calc(var(--hx-spacing)*4)}.hx\:pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-left),1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.hx\:pb-8{padding-bottom:calc(var(--hx-spacing)*8)}.hx\:pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.hx\:pb-px{padding-bottom:1px}.hx\:pl-6{padding-left:calc(var(--hx-spacing)*6)}.hx\:pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.hx\:text-center{text-align:center}.hx\:text-left{text-align:left}.hx\:align-\[-2\.5px\]{vertical-align:-2.5px}.hx\:align-baseline{vertical-align:baseline}.hx\:align-middle{vertical-align:middle}.hx\:align-text-bottom{vertical-align:text-bottom}.hx\:font-mono{font-family:var(--hx-font-mono)}.hx\:text-2xl{font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height))}.hx\:text-4xl{font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height))}.hx\:text-base{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height))}.hx\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}.hx\:text-xs{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height))}.hx\:text-\[\.65rem\]{font-size:.65rem}.hx\:text-\[10px\]{font-size:10px}.hx\:leading-5{--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5)}.hx\:leading-6{--tw-leading:calc(var(--hx-spacing)*6);line-height:calc(var(--hx-spacing)*6)}.hx\:leading-7{--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hx\:leading-none{--tw-leading:1;line-height:1}.hx\:leading-tight{--tw-leading:var(--hx-leading-tight);line-height:var(--hx-leading-tight)}.hx\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:font-extrabold{--tw-font-weight:var(--hx-font-weight-extrabold);font-weight:var(--hx-font-weight-extrabold)}.hx\:font-medium{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:font-normal{--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal)}.hx\:font-semibold{--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hx\:tracking-tight{--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight)}.hx\:tracking-tighter{--tw-tracking:var(--hx-tracking-tighter);letter-spacing:var(--hx-tracking-tighter)}.hx\:break-words,.hx\:wrap-break-word{overflow-wrap:break-word}.hx\:text-ellipsis{text-overflow:ellipsis}.hx\:whitespace-nowrap{white-space:nowrap}.hx\:text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\]{color:hsl(var(--primary-hue),100%,50%)}.hx\:text-amber-900{color:var(--hx-color-amber-900)}.hx\:text-blue-900{color:var(--hx-color-blue-900)}.hx\:text-current{color:currentColor}.hx\:text-gray-100{color:var(--hx-color-gray-100)}.hx\:text-gray-500{color:var(--hx-color-gray-500)}.hx\:text-gray-600{color:var(--hx-color-gray-600)}.hx\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:text-green-900{color:var(--hx-color-green-900)}.hx\:text-indigo-900{color:var(--hx-color-indigo-900)}.hx\:text-orange-800{color:var(--hx-color-orange-800)}.hx\:text-primary-800{color:var(--hx-color-primary-800)}.hx\:text-purple-900{color:var(--hx-color-purple-900)}.hx\:text-red-900{color:var(--hx-color-red-900)}.hx\:text-slate-50{color:var(--hx-color-slate-50)}.hx\:text-slate-900{color:var(--hx-color-slate-900)}.hx\:text-transparent{color:#0000}.hx\:text-white{color:var(--hx-color-white)}.hx\:text-yellow-900{color:var(--hx-color-yellow-900)}.hx\:capitalize{text-transform:capitalize}.hx\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.hx\:no-underline{text-decoration-line:none}.hx\:underline{text-decoration-line:underline}.hx\:decoration-from-font{text-decoration-thickness:from-font}.hx\:underline-offset-2{text-underline-offset:2px}.hx\:opacity-0{opacity:0}.hx\:opacity-50{opacity:.5}.hx\:opacity-80{opacity:.8}.hx\:shadow-\[0_-12px_16px_\#fff\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,white);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\]{--tw-shadow:0 2px 4px var(--tw-shadow-color,#00000005),0 1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hextra-focus-visible:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}.hx\:hextra-focus-visible:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}.hx\:hextra-focus-visible-inset:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.hx\:hextra-focus-visible-inset:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800)}.hx\:shadow-gray-100{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}.hx\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:duration-75{--tw-duration:75ms;transition-duration:75ms}.hx\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hx\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hx\:ease-in{--tw-ease:var(--hx-ease-in);transition-timing-function:var(--hx-ease-in)}.hx\:ease-in-out{--tw-ease:var(--hx-ease-in-out);transition-timing-function:var(--hx-ease-in-out)}.hx\:outline-none{--tw-outline-style:none;outline-style:none}.hx\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hx\:group-hover\:text-gray-900:is(:where(.hx\:group):hover *){color:var(--hx-color-gray-900)}.hx\:group-hover\:underline:is(:where(.hx\:group):hover *){text-decoration-line:underline}.hx\:group-hover\/code\:opacity-100:is(:where(.hx\:group\/code):hover *){opacity:1}}.hx\:group-data-\[active\=true\]\:text-primary-800:is(:where(.hx\:group)[data-active=true] *){color:var(--hx-color-primary-800)}.hx\:group-data-\[theme\=dark\]\:hidden:is(:where(.hx\:group)[data-theme=dark] *),.hx\:group-data-\[theme\=light\]\:hidden:is(:where(.hx\:group)[data-theme=light] *),.hx\:group-data-\[theme\=system\]\:hidden:is(:where(.hx\:group)[data-theme=system] *){display:none}.hx\:group-\[\.copied\]\/copybtn\:block:is(:where(.hx\:group\/copybtn).copied *){display:block}.hx\:group-\[\.copied\]\/copybtn\:hidden:is(:where(.hx\:group\/copybtn).copied *){display:none}.hx\:placeholder\:text-gray-500::placeholder{color:var(--hx-color-gray-500)}.hx\:before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.hx\:before\:absolute:before{content:var(--tw-content);position:absolute}.hx\:before\:inset-0:before{content:var(--tw-content);inset:calc(var(--hx-spacing)*0)}.hx\:before\:inset-y-1:before{content:var(--tw-content);inset-block:calc(var(--hx-spacing)*1)}.hx\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--hx-spacing)*1)}.hx\:before\:inline-block:before{content:var(--tw-content);display:inline-block}.hx\:before\:w-px:before{content:var(--tw-content);width:1px}.hx\:before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--hx-color-gray-200)}.hx\:before\:opacity-25:before{content:var(--tw-content);opacity:.25}.hx\:before\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\'\#\'\]:before{--tw-content:"#";content:var(--tw-content)}.hx\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.hx\:group-open\:before\:rotate-90:is(:where(.hx\:group):is([open],:popover-open,:open) *):before{content:var(--tw-content);rotate:90deg}.hx\:first\:mt-0:first-child{margin-top:calc(var(--hx-spacing)*0)}.hx\:last-of-type\:mb-0:last-of-type{margin-bottom:calc(var(--hx-spacing)*0)}@media(hover:hover){.hx\:hover\:border-gray-200:hover{border-color:var(--hx-color-gray-200)}.hx\:hover\:border-gray-300:hover{border-color:var(--hx-color-gray-300)}.hx\:hover\:border-gray-400:hover{border-color:var(--hx-color-gray-400)}.hx\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}.hx\:hover\:bg-gray-100:hover{background-color:var(--hx-color-gray-100)}.hx\:hover\:bg-gray-800\/5:hover{background-color:var(--hx-color-gray-800)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:bg-gray-800\/5:hover{background-color:color-mix(in oklab,var(--hx-color-gray-800)5%,transparent)}}.hx\:hover\:bg-primary-700:hover{background-color:var(--hx-color-primary-700)}.hx\:hover\:bg-slate-50:hover{background-color:var(--hx-color-slate-50)}.hx\:hover\:text-black:hover{color:var(--hx-color-black)}.hx\:hover\:text-gray-700:hover{color:var(--hx-color-gray-700)}.hx\:hover\:text-gray-800:hover{color:var(--hx-color-gray-800)}.hx\:hover\:text-gray-900:hover{color:var(--hx-color-gray-900)}.hx\:hover\:text-primary-600:hover{color:var(--hx-color-primary-600)}.hx\:hover\:opacity-60:hover{opacity:.6}.hx\:hover\:opacity-75:hover{opacity:.75}.hx\:hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}}.hx\:focus-visible\:not-sr-only:focus-visible{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.hx\:focus-visible\:fixed:focus-visible{position:fixed}.hx\:focus-visible\:top-2:focus-visible{top:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:left-2:focus-visible{left:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:z-50:focus-visible{z-index:50}.hx\:focus-visible\:rounded-md:focus-visible{border-radius:var(--hx-radius-md)}.hx\:focus-visible\:bg-primary-500:focus-visible{background-color:var(--hx-color-primary-500)}.hx\:focus-visible\:bg-white:focus-visible{background-color:var(--hx-color-white)}.hx\:focus-visible\:px-4:focus-visible{padding-inline:calc(var(--hx-spacing)*4)}.hx\:focus-visible\:py-2:focus-visible{padding-block:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:text-sm:focus-visible{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:focus-visible\:font-medium:focus-visible{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:focus-visible\:text-white:focus-visible{color:var(--hx-color-white)}.hx\:active\:bg-gray-400\/20:active{background-color:var(--hx-color-gray-400)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:bg-gray-400\/20:active{background-color:color-mix(in oklab,var(--hx-color-gray-400)20%,transparent)}}.hx\:active\:opacity-50:active{opacity:.5}.hx\:active\:shadow-sm:active{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:active\:shadow-gray-200:active{--tw-shadow-color:var(--hx-color-gray-200)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:shadow-gray-200:active{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-200)var(--tw-shadow-alpha),transparent)}}.hx\:data-\[state\=closed\]\:hidden[data-state=closed],.hx\:data-\[state\=open\]\:hidden[data-state=open]{display:none}.hx\:data-\[state\=selected\]\:block[data-state=selected]{display:block}.hx\:data-\[state\=selected\]\:border-primary-500[data-state=selected]{border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:text-primary-600[data-state=selected]{color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:contrast-more\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:contrast-more\:border-current{border-color:initial}.hx\:contrast-more\:border-gray-800{border-color:var(--hx-color-gray-800)}.hx\:contrast-more\:border-gray-900{border-color:var(--hx-color-gray-900)}.hx\:contrast-more\:border-neutral-400{border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:border-primary-500{border-color:var(--hx-color-primary-500)}.hx\:contrast-more\:border-transparent{border-color:#0000}.hx\:contrast-more\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:contrast-more\:text-current{color:currentColor}.hx\:contrast-more\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:contrast-more\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:contrast-more\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:contrast-more\:underline{text-decoration-line:underline}.hx\:contrast-more\:shadow-\[0_0_0_1px_\#000\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}}}@media not all and (min-width:80rem){.hx\:max-xl\:hidden{display:none}}@media not all and (min-width:64rem){.hx\:max-lg\:min-h-\[340px\]{min-height:340px}}@media not all and (min-width:48rem){.hx\:max-md\:sticky{position:sticky}.hx\:max-md\:hidden{display:none}.hx\:max-md\:min-h-\[340px\]{min-height:340px}.hx\:max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\]{transform:translateY(-100%)}.hx\:max-md\:\[transform\:translate3d\(0\,0\,0\)\]{transform:translate(0)}}@media not all and (min-width:40rem){.hx\:max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(min-width:40rem){.hx\:sm\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:sm\:left-auto{left:auto}.hx\:sm\:block{display:block}.hx\:sm\:flex{display:flex}.hx\:sm\:w-\[110\%\]{width:110%}.hx\:sm\:flex-row{flex-direction:row}.hx\:sm\:items-center{align-items:center}.hx\:sm\:items-start{align-items:flex-start}.hx\:sm\:justify-between{justify-content:space-between}.hx\:sm\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}@media not all and (min-width:64rem){.hx\:sm\:max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@media(min-width:48rem){.hx\:md\:sticky{position:sticky}.hx\:md\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:md\:mr-0{margin-right:calc(var(--hx-spacing)*0)}.hx\:md\:hidden{display:none}.hx\:md\:inline-block{display:inline-block}.hx\:md\:inline-flex{display:inline-flex}.hx\:md\:aspect-\[1\.1\/1\]{aspect-ratio:1.1}.hx\:md\:h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\]{height:calc(100vh - var(--navbar-height) - var(--menu-height))}.hx\:md\:max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px)}.hx\:md\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:md\:shrink-0{flex-shrink:0}.hx\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hx\:md\:justify-start{justify-content:flex-start}.hx\:md\:self-start{align-self:flex-start}.hx\:md\:overflow-auto{overflow:auto}.hx\:md\:px-12{padding-inline:calc(var(--hx-spacing)*12)}.hx\:md\:pt-12{padding-top:calc(var(--hx-spacing)*12)}.hx\:md\:text-3xl{font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height))}.hx\:md\:text-5xl{font-size:var(--hx-text-5xl);line-height:var(--tw-leading,var(--hx-text-5xl--line-height))}.hx\:md\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:md\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}}@media(min-width:64rem){.hx\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:80rem){.hx\:xl\:block{display:block}.hx\:xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.hx\:ltr\:right-1\.5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*1.5)}.hx\:ltr\:right-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*2)}.hx\:ltr\:right-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*3)}.hx\:ltr\:-mr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:calc(var(--hx-spacing)*-4)}.hx\:ltr\:mr-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:auto}.hx\:ltr\:ml-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.hx\:ltr\:ml-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:ml-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:auto}.hx\:ltr\:rotate-180:where(:dir(ltr),[dir=ltr],[dir=ltr] *){rotate:180deg}.hx\:ltr\:rounded-l-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:ltr\:rounded-r-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:ltr\:border-l:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);border-left-width:1px}.hx\:ltr\:pr-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*0)}.hx\:ltr\:pr-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*1)}.hx\:ltr\:pr-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*2)}.hx\:ltr\:pr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:ltr\:pr-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:ltr\:pr-9:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*9)}.hx\:ltr\:pl-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:pl-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:ltr\:pl-5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*5)}.hx\:ltr\:pl-6:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*6)}.hx\:ltr\:pl-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:ltr\:pl-12:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*12)}.hx\:ltr\:pl-16:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*16)}.hx\:ltr\:text-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){text-align:right}.hx\:ltr\:before\:left-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);left:calc(var(--hx-spacing)*0)}@media(min-width:48rem){.hx\:ltr\:md\:left-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){left:auto}}.hx\:rtl\:left-1\.5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*1.5)}.hx\:rtl\:left-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*2)}.hx\:rtl\:left-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}.hx\:rtl\:mr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.hx\:rtl\:-ml-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--hx-spacing)*-4)}.hx\:rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.hx\:rtl\:-rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-180deg}.hx\:rtl\:rotate-270:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:270deg}.hx\:rtl\:rounded-l-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:rtl\:rounded-r-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:rtl\:border-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);border-right-width:1px}.hx\:rtl\:pr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:pr-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:rtl\:pr-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*5)}.hx\:rtl\:pr-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*6)}.hx\:rtl\:pr-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:rtl\:pr-12:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*12)}.hx\:rtl\:pr-16:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*16)}.hx\:rtl\:pl-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*0)}.hx\:rtl\:pl-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*1)}.hx\:rtl\:pl-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*2)}.hx\:rtl\:pl-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:rtl\:pl-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:rtl\:pl-9:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*9)}.hx\:rtl\:text-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.hx\:rtl\:before\:right-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);right:calc(var(--hx-spacing)*0)}.hx\:rtl\:before\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);rotate:180deg}@media(min-width:48rem){.hx\:rtl\:md\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}}.hx\:dark\:block:where(.dark,.dark *){display:block}.hx\:dark\:hidden:where(.dark,.dark *){display:none}.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:var(--hx-color-amber-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-amber-200)30%,transparent)}}.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:var(--hx-color-blue-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-blue-200)30%,transparent)}}.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-gray-100)20%,transparent)}}.hx\:dark\:border-gray-400:where(.dark,.dark *){border-color:var(--hx-color-gray-400)}.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:var(--hx-color-green-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-green-200)30%,transparent)}}.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:var(--hx-color-indigo-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-indigo-200)30%,transparent)}}.hx\:dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--hx-color-neutral-700)}.hx\:dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-orange-400)30%,transparent)}}.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:var(--hx-color-purple-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-purple-200)30%,transparent)}}.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:var(--hx-color-red-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-red-200)30%,transparent)}}.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:var(--hx-color-yellow-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-yellow-200)30%,transparent)}}.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:var(--hx-color-amber-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-amber-900)30%,transparent)}}.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:var(--hx-color-blue-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-blue-900)30%,transparent)}}.hx\:dark\:bg-dark:where(.dark,.dark *),.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:var(--hx-color-dark)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)50%,transparent)}}.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:var(--hx-color-gray-50)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-50)10%,transparent)}}.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:var(--hx-color-green-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-green-900)30%,transparent)}}.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:var(--hx-color-indigo-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-indigo-900)30%,transparent)}}.hx\:dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--hx-color-neutral-700)}.hx\:dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--hx-color-neutral-800)}.hx\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--hx-color-neutral-900)}.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-orange-400)20%,transparent)}}.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-400)10%,transparent)}}.hx\:dark\:bg-primary-600:where(.dark,.dark *){background-color:var(--hx-color-primary-600)}.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:var(--hx-color-purple-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-purple-900)30%,transparent)}}.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:var(--hx-color-red-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-red-900)30%,transparent)}}.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:var(--hx-color-yellow-700)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-yellow-700)30%,transparent)}}.hx\:dark\:from-gray-100:where(.dark,.dark *){--tw-gradient-from:var(--hx-color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:to-gray-400:where(.dark,.dark *){--tw-gradient-to:var(--hx-color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:text-amber-200:where(.dark,.dark *){color:var(--hx-color-amber-200)}.hx\:dark\:text-blue-200:where(.dark,.dark *){color:var(--hx-color-blue-200)}.hx\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:dark\:text-gray-200:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hx\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:dark\:text-gray-400:where(.dark,.dark *){color:var(--hx-color-gray-400)}.hx\:dark\:text-green-200:where(.dark,.dark *){color:var(--hx-color-green-200)}.hx\:dark\:text-indigo-200:where(.dark,.dark *){color:var(--hx-color-indigo-200)}.hx\:dark\:text-neutral-200:where(.dark,.dark *){color:var(--hx-color-neutral-200)}.hx\:dark\:text-neutral-400:where(.dark,.dark *){color:var(--hx-color-neutral-400)}.hx\:dark\:text-orange-300:where(.dark,.dark *){color:var(--hx-color-orange-300)}.hx\:dark\:text-primary-600:where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:text-purple-200:where(.dark,.dark *){color:var(--hx-color-purple-200)}.hx\:dark\:text-red-200:where(.dark,.dark *){color:var(--hx-color-red-200)}.hx\:dark\:text-slate-100:where(.dark,.dark *){color:var(--hx-color-slate-100)}.hx\:dark\:text-white:where(.dark,.dark *){color:var(--hx-color-white)}.hx\:dark\:text-yellow-200:where(.dark,.dark *){color:var(--hx-color-yellow-200)}.hx\:dark\:opacity-80:where(.dark,.dark *){opacity:.8}.hx\:dark\:shadow-\[0_-1px_0_rgba\(255\,255\,255\,\.1\)_inset\]:where(.dark,.dark *){--tw-shadow:0 -1px 0 var(--tw-shadow-color,#ffffff1a)inset;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-\[0_-12px_16px_\#111\]:where(.dark,.dark *){--tw-shadow:0 -12px 16px var(--tw-shadow-color,#111);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:dark\:group-hover\:text-gray-50:where(.dark,.dark *):is(:where(.hx\:group):hover *){color:var(--hx-color-gray-50)}}.hx\:group-data-\[active\=true\]\:dark\:text-primary-600:is(:where(.hx\:group)[data-active=true] *):where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:placeholder\:text-gray-400:where(.dark,.dark *)::placeholder{color:var(--hx-color-gray-400)}.hx\:dark\:before\:bg-neutral-800:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hx\:dark\:before\:invert:where(.dark,.dark *):before{content:var(--tw-content);--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.hx\:dark\:hover\:border-gray-100:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-100)}.hx\:dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-600)}.hx\:dark\:hover\:border-neutral-500:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-500)}.hx\:dark\:hover\:border-neutral-700:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:border-neutral-800:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-gray-100)5%,transparent)}}.hx\:dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:bg-neutral-800:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-neutral-900:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-900)}.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-primary-100)5%,transparent)}}.hx\:dark\:hover\:bg-primary-700:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-700)}.hx\:dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--hx-color-gray-50)}.hx\:dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--hx-color-gray-100)}.hx\:dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--hx-color-gray-200)}.hx\:dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--hx-color-gray-300)}.hx\:dark\:hover\:text-neutral-50:where(.dark,.dark *):hover{color:var(--hx-color-neutral-50)}.hx\:dark\:hover\:text-primary-400:where(.dark,.dark *):hover{color:var(--hx-color-primary-400)}.hx\:dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--hx-color-white)}.hx\:dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.hx\:dark\:focus-visible\:bg-dark:where(.dark,.dark *):focus-visible{background-color:var(--hx-color-dark)}.hx\:data-\[state\=selected\]\:dark\:border-primary-500[data-state=selected]:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:dark\:text-primary-600[data-state=selected]:where(.dark,.dark *){color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:dark\:border-current:where(.dark,.dark *){border-color:initial}.hx\:contrast-more\:dark\:border-gray-50:where(.dark,.dark *){border-color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:border-primary-500:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:dark\:contrast-more\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:text-current:where(.dark,.dark *){color:currentColor}.hx\:contrast-more\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:contrast-more\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:contrast-more\:dark\:shadow-\[0_0_0_1px_\#fff\]:where(.dark,.dark *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:dark\:hover\:border-gray-50:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-50)}}}@media print{.hx\:print\:\[display\:none\],.hx\:print\:hidden{display:none}.hx\:print\:bg-transparent{background-color:#0000}}}html{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--hx-color-white);width:100%}body:where(.dark,.dark *){background-color:var(--hx-color-dark);color:var(--hx-color-gray-100)}:root{--primary-hue:212deg;--primary-saturation:100%;--primary-lightness:50%;--navbar-height:4rem;--hextra-banner-height:2rem;--menu-height:3.75rem}.dark{--primary-hue:204deg;--primary-saturation:100%;--primary-lightness:50%}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*2);font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height));--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*10);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-neutral-200)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-neutral-200)70%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:calc(var(--hx-spacing)*1);font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--hx-color-neutral-400)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)10%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--hx-color-primary-600);text-decoration-line:underline;text-decoration-thickness:from-font}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);border-color:var(--hx-color-gray-300);color:var(--hx-color-gray-700);font-style:italic}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);padding-left:calc(var(--hx-spacing)*6);border-left-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);padding-right:calc(var(--hx-spacing)*6);border-right-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-gray-700);color:var(--hx-color-gray-400)}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--hx-spacing)*4);--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*6);border-collapse:collapse;width:100%;padding:calc(var(--hx-spacing)*0);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);display:block;overflow-x:auto}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead{background-color:var(--hx-color-gray-50)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:var(--hx-color-gray-600)}@supports(color:color-mix(in lab,red,red)){.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-600)20%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr{margin:calc(var(--hx-spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:decimal}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:disc}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):has(li input[type=checkbox]){list-style-type:none}.content :where(ul,ol)>li>:where(ul,ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*0)}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:#0000;border-radius:0}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:#0000}.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-inline:auto;margin-block:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-md)}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption{margin-top:calc(var(--hx-spacing)*2);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-500);display:block}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:where(.dark,.dark *){color:var(--hx-color-gray-400)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt{margin-top:calc(var(--hx-spacing)*6);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd{margin-block:calc(var(--hx-spacing)*2);padding-inline-start:calc(var(--hx-spacing)*6)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*10);border-color:var(--hx-color-gray-200)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .footnotes{margin-top:calc(var(--hx-spacing)*12);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.content .footnotes hr{border-color:var(--hx-color-gray-200)}.content .footnotes hr:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .subheading-anchor{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.content .subheading-anchor:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.content .subheading-anchor:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}span:target+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor),.content .subheading-anchor:focus-visible{opacity:1}span+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor){text-decoration-line:none!important}.content .subheading-anchor:after{content:var(--tw-content);color:var(--hx-color-gray-300)}.content .subheading-anchor:where(.dark,.dark *):after{content:var(--tw-content);color:var(--hx-color-neutral-700)}.content .subheading-anchor:after{padding-inline:calc(var(--hx-spacing)*1);--tw-content:"#";content:var(--tw-content)}span:target+:is(){color:var(--hx-color-gray-400)}span:target+:is():where(.dark,.dark *){color:var(--hx-color-neutral-500)}article details>summary::-webkit-details-marker{display:none}article details>summary:before{vertical-align:-4px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx:h-5 hx:w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E");width:1.2em;height:1.2em;padding:0 .6em}:lang(fa) ol{list-style-type:persian}.highlight .chroma .err{color:#a61717;background-color:#e3d2d2}.highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.highlight .chroma .line{display:flex}.highlight .chroma .k,.highlight .chroma .kc,.highlight .chroma .kd,.highlight .chroma .kn,.highlight .chroma .kp,.highlight .chroma .kr{color:#000;font-weight:700}.highlight .chroma .kt{color:#458;font-weight:700}.highlight .chroma .na{color:teal}.highlight .chroma .nb{color:#0086b3}.highlight .chroma .bp{color:#999}.highlight .chroma .nc{color:#458;font-weight:700}.highlight .chroma .no{color:teal}.highlight .chroma .nd{color:#3c5d5d;font-weight:700}.highlight .chroma .ni{color:purple}.highlight .chroma .ne,.highlight .chroma .nf,.highlight .chroma .nl{color:#900;font-weight:700}.highlight .chroma .nn{color:#555}.highlight .chroma .nt{color:navy}.highlight .chroma .nv,.highlight .chroma .vc,.highlight .chroma .vg,.highlight .chroma .vi{color:teal}.highlight .chroma .s,.highlight .chroma .sa,.highlight .chroma .sb,.highlight .chroma .sc,.highlight .chroma .dl,.highlight .chroma .sd,.highlight .chroma .s2,.highlight .chroma .se,.highlight .chroma .sh,.highlight .chroma .si,.highlight .chroma .sx{color:#d14}.highlight .chroma .sr{color:#009926}.highlight .chroma .s1{color:#d14}.highlight .chroma .ss{color:#990073}.highlight .chroma .m,.highlight .chroma .mb,.highlight .chroma .mf,.highlight .chroma .mh,.highlight .chroma .mi,.highlight .chroma .il,.highlight .chroma .mo{color:#099}.highlight .chroma .o,.highlight .chroma .ow{color:#000;font-weight:700}.highlight .chroma .c,.highlight .chroma .ch,.highlight .chroma .cm,.highlight .chroma .c1{color:#998;font-style:italic}.highlight .chroma .cs,.highlight .chroma .cp,.highlight .chroma .cpf{color:#999;font-style:italic;font-weight:700}.highlight .chroma .gd{color:#000;background-color:#fdd}.highlight .chroma .ge{color:#000;font-style:italic}.highlight .chroma .gr{color:#a00}.highlight .chroma .gh{color:#999}.highlight .chroma .gi{color:#000;background-color:#dfd}.highlight .chroma .go{color:#888}.highlight .chroma .gp{color:#555}.highlight .chroma .gs{font-weight:700}.highlight .chroma .gu{color:#aaa}.highlight .chroma .gt{color:#a00}.highlight .chroma .gl{text-decoration:underline}.highlight .chroma .w{color:#bbb}.dark .highlight .chroma .err{color:#f85149}.dark .highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.dark .highlight .chroma .line{display:flex}.dark .highlight .chroma .k{color:#ff7b72}.dark .highlight .chroma .kc{color:#79c0ff}.dark .highlight .chroma .kd,.dark .highlight .chroma .kn{color:#ff7b72}.dark .highlight .chroma .kp{color:#79c0ff}.dark .highlight .chroma .kr,.dark .highlight .chroma .kt{color:#ff7b72}.dark .highlight .chroma .nc{color:#f0883e;font-weight:700}.dark .highlight .chroma .no{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nd{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .ni{color:#ffa657}.dark .highlight .chroma .ne{color:#f0883e;font-weight:700}.dark .highlight .chroma .nf{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .nl{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nn{color:#ff7b72}.dark .highlight .chroma .py{color:#79c0ff}.dark .highlight .chroma .nt{color:#7ee787}.dark .highlight .chroma .nv{color:#79c0ff}.dark .highlight .chroma .l{color:#a5d6ff}.dark .highlight .chroma .ld{color:#79c0ff}.dark .highlight .chroma .s{color:#a5d6ff}.dark .highlight .chroma .sa{color:#79c0ff}.dark .highlight .chroma .sb,.dark .highlight .chroma .sc{color:#a5d6ff}.dark .highlight .chroma .dl{color:#79c0ff}.dark .highlight .chroma .sd,.dark .highlight .chroma .s2{color:#a5d6ff}.dark .highlight .chroma .se,.dark .highlight .chroma .sh{color:#79c0ff}.dark .highlight .chroma .si,.dark .highlight .chroma .sx{color:#a5d6ff}.dark .highlight .chroma .sr{color:#79c0ff}.dark .highlight .chroma .s1,.dark .highlight .chroma .ss,.dark .highlight .chroma .m,.dark .highlight .chroma .mb,.dark .highlight .chroma .mf,.dark .highlight .chroma .mh,.dark .highlight .chroma .mi,.dark .highlight .chroma .il,.dark .highlight .chroma .mo{color:#a5d6ff}.dark .highlight .chroma .o,.dark .highlight .chroma .ow{color:#ff7b72;font-weight:700}.dark .highlight .chroma .c,.dark .highlight .chroma .ch,.dark .highlight .chroma .cm,.dark .highlight .chroma .c1{color:#8b949e;font-style:italic}.dark .highlight .chroma .cs,.dark .highlight .chroma .cp,.dark .highlight .chroma .cpf{color:#8b949e;font-style:italic;font-weight:700}.dark .highlight .chroma .gd{color:#ffa198;background-color:#490202}.dark .highlight .chroma .ge{color:inherit;font-style:italic}.dark .highlight .chroma .gr{color:#ffa198}.dark .highlight .chroma .gh{color:#79c0ff;font-weight:700}.dark .highlight .chroma .gi{color:#56d364;background-color:#0f5323}.dark .highlight .chroma .go,.dark .highlight .chroma .gp{color:#8b949e}.dark .highlight .chroma .gs{font-weight:700}.dark .highlight .chroma .gu{color:#79c0ff}.dark .highlight .chroma .gt{color:#ff7b72}.dark .highlight .chroma .gl{text-decoration:underline}.dark .highlight .chroma .w{color:#6e7681}.hextra-code-block{--tw-leading:calc(var(--hx-spacing)*5);font-size:.9em;line-height:calc(var(--hx-spacing)*5)}.hextra-code-block pre{background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block pre{--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.hextra-code-block pre{border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.hextra-code-block pre{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.hextra-code-block pre:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.hextra-code-block pre:where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.hextra-code-block .hextra-code-filename{top:calc(var(--hx-spacing)*0);z-index:1;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:var(--hx-radius-xl);border-top-right-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);width:100%;position:absolute;overflow:hidden}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block .hextra-code-filename{padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*2);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));color:var(--hx-color-gray-700)}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hextra-code-block .hextra-code-filename+pre:not(.lntable pre){padding-top:calc(var(--hx-spacing)*12)}.hextra-code-block pre:not(.lntable pre){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*4)}.hextra-code-block div:nth-of-type(2) pre{padding-top:calc(var(--hx-spacing)*12);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .lntable{margin:calc(var(--hx-spacing)*0);border-radius:var(--hx-radius-xl);width:auto;display:block;overflow:auto}.chroma .lntable pre{padding-top:calc(var(--hx-spacing)*4);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line){min-width:2.6rem;padding-right:calc(var(--hx-spacing)*4);padding-left:calc(var(--hx-spacing)*4);color:var(--hx-color-neutral-600)}:is(.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line)):where(.dark,.dark *){color:var(--hx-color-neutral-300)}.chroma .lntd{padding:calc(var(--hx-spacing)*0);vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{background-color:var(--hx-color-primary-800);width:100%;display:block}@supports(color:color-mix(in lab,red,red)){.chroma .hl{background-color:color-mix(in oklab,var(--hx-color-primary-800)10%,transparent)}}.hextra-cards{grid-template-columns:repeat(auto-fill,minmax(max(250px,calc((100% - 1rem*2)/var(--hextra-cards-grid-cols))),1fr))}.hextra-card{position:relative}.hextra-card img{-webkit-user-select:none;user-select:none}.hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card .hextra-card-icon svg{color:#0003;width:1.5rem;transition:color .3s}.hextra-card p{margin-top:.5rem;position:relative}.dark .hextra-card .hextra-card-icon svg{color:#fff6}.dark .hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card-tag{z-index:10;position:absolute;top:5px}.hextra-card-tag:where(:dir(ltr)){right:5px}.hextra-card-tag:where(:dir(rtl)){left:5px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker){counter-increment:step}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);margin-left:-41px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);margin-right:-44px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);background-color:var(--hx-color-gray-100)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:4px;border-color:var(--hx-color-white)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);border-color:var(--hx-color-dark)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step);text-align:center;text-indent:-1px;width:33px;height:33px;font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal);color:var(--hx-color-neutral-400);border-radius:340282e33px;position:absolute}:lang(fa) .hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step,persian)}.hextra-search-wrapper li{margin-inline:calc(var(--hx-spacing)*2.5);border-radius:var(--hx-radius-md);overflow-wrap:break-word;color:var(--hx-color-gray-800)}@media(prefers-contrast:more){.hextra-search-wrapper li{border-style:var(--tw-border-style);border-width:1px;border-color:#0000}}.hextra-search-wrapper li:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hextra-search-wrapper li a{scroll-margin:calc(var(--hx-spacing)*12);padding-inline:calc(var(--hx-spacing)*2.5);padding-block:calc(var(--hx-spacing)*2);display:block}.hextra-search-wrapper li a:focus-visible{--tw-outline-style:none;outline-style:none}.hextra-search-wrapper li .hextra-search-title{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hextra-search-wrapper li .hextra-search-active{border-radius:var(--hx-radius-md);background-color:var(--hx-color-primary-500)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper li .hextra-search-active{background-color:color-mix(in oklab,var(--hx-color-primary-500)10%,transparent)}}@media(prefers-contrast:more){.hextra-search-wrapper li .hextra-search-active{border-color:var(--hx-color-primary-500)}}.hextra-search-wrapper .hextra-search-no-result{padding:calc(var(--hx-spacing)*8);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-400);-webkit-user-select:none;user-select:none;display:block}.hextra-search-wrapper .hextra-search-prefix{margin-inline:calc(var(--hx-spacing)*2.5);margin-top:calc(var(--hx-spacing)*6);margin-bottom:calc(var(--hx-spacing)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix{border-color:color-mix(in oklab,var(--hx-color-black)10%,transparent)}}.hextra-search-wrapper .hextra-search-prefix{padding-inline:calc(var(--hx-spacing)*2.5);padding-bottom:calc(var(--hx-spacing)*1.5);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);color:var(--hx-color-gray-500);text-transform:uppercase;-webkit-user-select:none;user-select:none}.hextra-search-wrapper .hextra-search-prefix:first-child{margin-top:calc(var(--hx-spacing)*0)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix{border-color:var(--hx-color-gray-600);color:var(--hx-color-gray-900)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)20%,transparent)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){color:var(--hx-color-gray-300)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-gray-50);color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{margin-top:calc(var(--hx-spacing)*1);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:1.35rem;text-overflow:ellipsis;color:var(--hx-color-gray-600);line-height:1.35rem;overflow:hidden}.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-400)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box}.hextra-search-wrapper .hextra-search-match{color:var(--hx-color-primary-600)}@media(max-width:48rem){.hextra-sidebar-container{top:calc(var(--hx-spacing)*0);bottom:calc(var(--hx-spacing)*0);z-index:15;overscroll-behavior:contain;background-color:var(--hx-color-white);width:100%;padding-top:calc(var(--navbar-height) + var(--hextra-banner-height));position:fixed}.hextra-sidebar-container:where(.dark,.dark *){background-color:var(--hx-color-dark)}.hextra-sidebar-container{will-change:transform,opacity;contain:layout style;backface-visibility:hidden;transition:transform .4s cubic-bezier(.52,.16,.04,1)}}.hextra-sidebar-container li>.hextra-sidebar-children{height:calc(var(--hx-spacing)*0)}.hextra-sidebar-container li.open>.hextra-sidebar-children{height:auto;padding-top:calc(var(--hx-spacing)*1)}.hextra-sidebar-container li.open>.hextra-sidebar-item>.hextra-sidebar-collapsible-button>svg>path{rotate:90deg}.hextra-banner-hidden .hextra-banner{display:none}.hextra-banner :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline;text-decoration-thickness:from-font}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}nav .hextra-search-wrapper{display:none}@media(min-width:48rem){nav .hextra-search-wrapper{display:inline-block}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-nav-container-blur{background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur{background-color:color-mix(in oklab,var(--hx-color-white)85%,transparent)}}.hextra-nav-container-blur{--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-nav-container-blur:where(.dark,.dark *){background-color:var(--hx-color-dark)!important}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)80%,transparent)!important}}}.hextra-hamburger-menu svg g{transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg path{opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open path{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:0s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open g{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open>path{opacity:0}.hextra-hamburger-menu svg.open>g:first-of-type{rotate:45deg}.hextra-hamburger-menu svg.open>g:first-of-type path{--tw-translate-y:calc(var(--hx-spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-hamburger-menu svg.open>g:nth-of-type(2){rotate:-45deg}.hextra-hamburger-menu svg.open>g:nth-of-type(2) path{--tw-translate-y:calc(var(--hx-spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-scrollbar,.hextra-scrollbar *{scrollbar-width:thin;scrollbar-color:oklch(55.55% 0 0/.4)transparent;scrollbar-gutter:stable}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar{height:calc(var(--hx-spacing)*3);width:calc(var(--hx-spacing)*3)}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-track{background-color:#0000}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-thumb{border-radius:10px}:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{background-color:var(--tw-shadow-color);--tw-shadow-color:var(--hx-color-neutral-500);background-clip:content-box;border:3px solid #0000}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}@media(hover:hover){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:var(--hx-color-neutral-500)}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)40%,transparent)var(--tw-shadow-alpha),transparent)}}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-code-copy-btn{opacity:.85;--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-code-copy-btn:where(.dark,.dark *){opacity:.8}}@media(min-width:1024px){.hextra-feature-grid{grid-template-columns:repeat(var(--hextra-feature-grid-cols),minmax(0,1fr))}}.hextra-jupyter-code-cell{scrollbar-gutter:auto;margin-top:calc(var(--hx-spacing)*6)}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:hidden}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs{max-height:50vh;overflow:auto}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre{max-width:100%;font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:auto}.hextra-badge{align-items:center;display:inline-flex}.hextra-toc a.hextra-toc-active{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.2s;transition-duration:.2s;color:var(--hx-color-gray-900)!important}.hextra-toc a.hextra-toc-active:where(.dark,.dark *){color:var(--hx-color-gray-50)!important}.hextra-archive-timeline{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline{border-color:color-mix(in oklab,var(--hx-color-black)15%,transparent)}}.hextra-archive-timeline:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)15%,transparent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}:root{--hextra-navbar-height:80px}.hextra-nav-container nav{min-height:80px!important;height:80px!important}.hextra-feature-card>img{max-width:160px;max-height:160px;width:auto;height:auto;object-fit:contain} \ No newline at end of file diff --git a/public/css/compiled/main.min.90b97d9fd24b4b64d77532889559f61e388dc6e7e1c40110b315ef477b5ff042.css b/public/css/compiled/main.min.90b97d9fd24b4b64d77532889559f61e388dc6e7e1c40110b315ef477b5ff042.css deleted file mode 100644 index 09d8dd3..0000000 --- a/public/css/compiled/main.min.90b97d9fd24b4b64d77532889559f61e388dc6e7e1c40110b315ef477b5ff042.css +++ /dev/null @@ -1 +0,0 @@ -:root{--hextra-max-page-width:80rem;--hextra-max-content-width:72rem;--hextra-max-navbar-width:80rem;--hextra-max-footer-width:80rem}.hextra-max-page-width{max-width:var(--hextra-max-page-width)}.hextra-max-content-width{max-width:var(--hextra-max-content-width)}.hextra-max-navbar-width{max-width:var(--hextra-max-navbar-width)}.hextra-max-footer-width{max-width:var(--hextra-max-footer-width)}/*!tailwindcss v4.1.18 | MIT License | https://tailwindcss.com*/@layer properties{@supports(((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--hx-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--hx-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--hx-color-red-100:oklch(93.6% .032 17.717);--hx-color-red-200:oklch(88.5% .062 18.334);--hx-color-red-900:oklch(39.6% .141 25.723);--hx-color-orange-50:oklch(98% .016 73.684);--hx-color-orange-100:oklch(95.4% .038 75.164);--hx-color-orange-300:oklch(83.7% .128 66.29);--hx-color-orange-400:oklch(75% .183 55.934);--hx-color-orange-800:oklch(47% .157 37.304);--hx-color-amber-100:oklch(96.2% .059 95.617);--hx-color-amber-200:oklch(92.4% .12 95.746);--hx-color-amber-900:oklch(41.4% .112 45.904);--hx-color-yellow-50:oklch(98.7% .026 102.212);--hx-color-yellow-100:oklch(97.3% .071 103.193);--hx-color-yellow-200:oklch(94.5% .129 101.54);--hx-color-yellow-700:oklch(55.4% .135 66.442);--hx-color-yellow-900:oklch(42.1% .095 57.708);--hx-color-green-100:oklch(96.2% .044 156.743);--hx-color-green-200:oklch(92.5% .084 155.995);--hx-color-green-900:oklch(39.3% .095 152.535);--hx-color-blue-100:oklch(93.2% .032 255.585);--hx-color-blue-200:oklch(88.2% .059 254.128);--hx-color-blue-900:oklch(37.9% .146 265.522);--hx-color-indigo-100:oklch(93% .034 272.788);--hx-color-indigo-200:oklch(87% .065 274.039);--hx-color-indigo-900:oklch(35.9% .144 278.697);--hx-color-purple-100:oklch(94.6% .033 307.174);--hx-color-purple-200:oklch(90.2% .063 306.703);--hx-color-purple-900:oklch(38.1% .176 304.987);--hx-color-slate-50:oklch(98.4% .003 247.858);--hx-color-slate-100:oklch(96.8% .007 247.896);--hx-color-slate-900:oklch(20.8% .042 265.755);--hx-color-gray-50:oklch(98.5% .002 247.839);--hx-color-gray-100:oklch(96.7% .003 264.542);--hx-color-gray-200:oklch(92.8% .006 264.531);--hx-color-gray-300:oklch(87.2% .01 258.338);--hx-color-gray-400:oklch(70.7% .022 261.325);--hx-color-gray-500:oklch(55.1% .027 264.364);--hx-color-gray-600:oklch(44.6% .03 256.802);--hx-color-gray-700:oklch(37.3% .034 259.733);--hx-color-gray-800:oklch(27.8% .033 256.848);--hx-color-gray-900:oklch(21% .034 264.665);--hx-color-neutral-50:oklch(98.5% 0 0);--hx-color-neutral-200:oklch(92.2% 0 0);--hx-color-neutral-300:oklch(87% 0 0);--hx-color-neutral-400:oklch(70.8% 0 0);--hx-color-neutral-500:oklch(55.6% 0 0);--hx-color-neutral-600:oklch(43.9% 0 0);--hx-color-neutral-700:oklch(37.1% 0 0);--hx-color-neutral-800:oklch(26.9% 0 0);--hx-color-neutral-900:oklch(20.5% 0 0);--hx-color-black:#000;--hx-color-white:#fff;--hx-spacing:.25rem;--hx-breakpoint-xl:80rem;--hx-text-xs:.75rem;--hx-text-xs--line-height:calc(1/.75);--hx-text-sm:.875rem;--hx-text-sm--line-height:calc(1.25/.875);--hx-text-base:1rem;--hx-text-base--line-height:calc(1.5/1);--hx-text-lg:1.125rem;--hx-text-lg--line-height:calc(1.75/1.125);--hx-text-xl:1.25rem;--hx-text-xl--line-height:calc(1.75/1.25);--hx-text-2xl:1.5rem;--hx-text-2xl--line-height:calc(2/1.5);--hx-text-3xl:1.875rem;--hx-text-3xl--line-height:calc(2.25/1.875);--hx-text-4xl:2.25rem;--hx-text-4xl--line-height:calc(2.5/2.25);--hx-text-5xl:3rem;--hx-text-5xl--line-height:1;--hx-font-weight-normal:400;--hx-font-weight-medium:500;--hx-font-weight-semibold:600;--hx-font-weight-bold:700;--hx-font-weight-extrabold:800;--hx-tracking-tighter:-.05em;--hx-tracking-tight:-.025em;--hx-leading-tight:1.25;--hx-radius-xs:.125rem;--hx-radius-sm:.25rem;--hx-radius-md:.375rem;--hx-radius-lg:.5rem;--hx-radius-xl:.75rem;--hx-radius-3xl:1.5rem;--hx-ease-in:cubic-bezier(.4,0,1,1);--hx-ease-out:cubic-bezier(0,0,.2,1);--hx-ease-in-out:cubic-bezier(.4,0,.2,1);--hx-blur-md:12px;--hx-default-transition-duration:.15s;--hx-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--hx-default-font-family:var(--hx-font-sans);--hx-default-mono-font-family:var(--hx-font-mono);--hx-color-primary-100:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*44));--hx-color-primary-200:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*36));--hx-color-primary-300:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*27));--hx-color-primary-400:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*16));--hx-color-primary-500:hsl(var(--primary-hue)var(--primary-saturation)var(--primary-lightness));--hx-color-primary-600:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*45));--hx-color-primary-700:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*39));--hx-color-primary-800:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*32));--hx-color-primary-900:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*24));--hx-color-dark:#111}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--hx-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--hx-default-font-feature-settings,normal);font-variation-settings:var(--hx-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hx-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--hx-default-mono-font-feature-settings,normal);font-variation-settings:var(--hx-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports(not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports(color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}abbr:where([title]){cursor:help}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible:where(.dark,.dark *){--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}}@layer components;@layer utilities{.hx\:pointer-events-none{pointer-events:none}.hx\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hx\:absolute{position:absolute}.hx\:relative{position:relative}.hx\:sticky{position:sticky}.hx\:inset-x-0{inset-inline:calc(var(--hx-spacing)*0)}.hx\:inset-y-0{inset-block:calc(var(--hx-spacing)*0)}.hx\:top-0{top:calc(var(--hx-spacing)*0)}.hx\:top-1\/2{top:50%}.hx\:top-8{top:calc(var(--hx-spacing)*8)}.hx\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:top-\[40\%\]{top:40%}.hx\:top-full{top:100%}.hx\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:bottom-0{bottom:calc(var(--hx-spacing)*0)}.hx\:left-0{left:calc(var(--hx-spacing)*0)}.hx\:left-\[24px\]{left:24px}.hx\:left-\[36px\]{left:36px}.hx\:z-20{z-index:20}.hx\:z-\[-1\]{z-index:-1}.hx\:order-last{order:9999}.hx\:m-\[11px\]{margin:11px}.hx\:mx-1{margin-inline:calc(var(--hx-spacing)*1)}.hx\:mx-4{margin-inline:calc(var(--hx-spacing)*4)}.hx\:mx-auto{margin-inline:auto}.hx\:my-1{margin-block:calc(var(--hx-spacing)*1)}.hx\:my-1\.5{margin-block:calc(var(--hx-spacing)*1.5)}.hx\:my-2{margin-block:calc(var(--hx-spacing)*2)}.hx\:-mt-20{margin-top:calc(var(--hx-spacing)*-20)}.hx\:mt-1{margin-top:calc(var(--hx-spacing)*1)}.hx\:mt-1\.5{margin-top:calc(var(--hx-spacing)*1.5)}.hx\:mt-2{margin-top:calc(var(--hx-spacing)*2)}.hx\:mt-4{margin-top:calc(var(--hx-spacing)*4)}.hx\:mt-5{margin-top:calc(var(--hx-spacing)*5)}.hx\:mt-6{margin-top:calc(var(--hx-spacing)*6)}.hx\:mt-8{margin-top:calc(var(--hx-spacing)*8)}.hx\:mt-12{margin-top:calc(var(--hx-spacing)*12)}.hx\:mt-16{margin-top:calc(var(--hx-spacing)*16)}.hx\:mt-auto{margin-top:auto}.hx\:-mr-2{margin-right:calc(var(--hx-spacing)*-2)}.hx\:mr-1{margin-right:calc(var(--hx-spacing)*1)}.hx\:mr-2{margin-right:calc(var(--hx-spacing)*2)}.hx\:-mb-0\.5{margin-bottom:calc(var(--hx-spacing)*-.5)}.hx\:mb-0{margin-bottom:calc(var(--hx-spacing)*0)}.hx\:mb-2{margin-bottom:calc(var(--hx-spacing)*2)}.hx\:mb-4{margin-bottom:calc(var(--hx-spacing)*4)}.hx\:mb-6{margin-bottom:calc(var(--hx-spacing)*6)}.hx\:mb-8{margin-bottom:calc(var(--hx-spacing)*8)}.hx\:mb-10{margin-bottom:calc(var(--hx-spacing)*10)}.hx\:mb-12{margin-bottom:calc(var(--hx-spacing)*12)}.hx\:mb-16{margin-bottom:calc(var(--hx-spacing)*16)}.hx\:-ml-2{margin-left:calc(var(--hx-spacing)*-2)}.hx\:ml-2{margin-left:calc(var(--hx-spacing)*2)}.hx\:ml-4{margin-left:calc(var(--hx-spacing)*4)}.hx\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hx\:block{display:block}.hx\:flex{display:flex}.hx\:grid{display:grid}.hx\:hidden{display:none}.hx\:inline{display:inline}.hx\:inline-block{display:inline-block}.hx\:inline-flex{display:inline-flex}.hx\:aspect-auto{aspect-ratio:auto}.hx\:size-4{width:calc(var(--hx-spacing)*4);height:calc(var(--hx-spacing)*4)}.hx\:h-0{height:calc(var(--hx-spacing)*0)}.hx\:h-2{height:calc(var(--hx-spacing)*2)}.hx\:h-3\.5{height:calc(var(--hx-spacing)*3.5)}.hx\:h-4{height:calc(var(--hx-spacing)*4)}.hx\:h-5{height:calc(var(--hx-spacing)*5)}.hx\:h-7{height:calc(var(--hx-spacing)*7)}.hx\:h-10{height:calc(var(--hx-spacing)*10)}.hx\:h-16{height:calc(var(--hx-spacing)*16)}.hx\:h-\[18px\]{height:18px}.hx\:h-full{height:100%}.hx\:h-px{height:1px}.hx\:max-h-\(--menu-height\){max-height:var(--menu-height)}.hx\:max-h-64{max-height:calc(var(--hx-spacing)*64)}.hx\:max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom))}.hx\:max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}.hx\:min-h-\[100px\]{min-height:100px}.hx\:min-h-\[calc\(100vh-var\(--navbar-height\)\)\]{min-height:calc(100vh - var(--navbar-height))}.hx\:w-2{width:calc(var(--hx-spacing)*2)}.hx\:w-3\.5{width:calc(var(--hx-spacing)*3.5)}.hx\:w-4{width:calc(var(--hx-spacing)*4)}.hx\:w-10{width:calc(var(--hx-spacing)*10)}.hx\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:w-\[110\%\]{width:110%}.hx\:w-\[180\%\]{width:180%}.hx\:w-full{width:100%}.hx\:w-max{width:max-content}.hx\:w-screen{width:100vw}.hx\:max-w-\[50\%\]{max-width:50%}.hx\:max-w-\[90rem\]{max-width:90rem}.hx\:max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\]{max-width:min(100vw - 2rem,100% + 20rem)}.hx\:max-w-full{max-width:100%}.hx\:max-w-none{max-width:none}.hx\:max-w-screen-xl{max-width:var(--hx-breakpoint-xl)}.hx\:min-w-0{min-width:calc(var(--hx-spacing)*0)}.hx\:min-w-\[18px\]{min-width:18px}.hx\:min-w-\[24px\]{min-width:24px}.hx\:min-w-full{min-width:100%}.hx\:shrink-0{flex-shrink:0}.hx\:grow{flex-grow:1}.hx\:origin-center{transform-origin:50%}.hx\:-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hx\:cursor-default{cursor:default}.hx\:cursor-pointer{cursor:pointer}.hx\:scroll-my-6{scroll-margin-block:calc(var(--hx-spacing)*6)}.hx\:scroll-py-6{scroll-padding-block:calc(var(--hx-spacing)*6)}.hx\:list-none{list-style-type:none}.hx\:appearance-none{appearance:none}.hx\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.hx\:flex-col{flex-direction:column}.hx\:flex-wrap{flex-wrap:wrap}.hx\:items-baseline{align-items:baseline}.hx\:items-center{align-items:center}.hx\:items-start{align-items:flex-start}.hx\:justify-between{justify-content:space-between}.hx\:justify-center{justify-content:center}.hx\:justify-end{justify-content:flex-end}.hx\:justify-start{justify-content:flex-start}.hx\:justify-items-start{justify-items:start}.hx\:gap-1{gap:calc(var(--hx-spacing)*1)}.hx\:gap-1\.5{gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-2{gap:calc(var(--hx-spacing)*2)}.hx\:gap-4{gap:calc(var(--hx-spacing)*4)}.hx\:gap-x-1\.5{column-gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-x-2{column-gap:calc(var(--hx-spacing)*2)}.hx\:gap-y-1{row-gap:calc(var(--hx-spacing)*1)}.hx\:gap-y-2{row-gap:calc(var(--hx-spacing)*2)}.hx\:overflow-auto{overflow:auto}.hx\:overflow-hidden{overflow:hidden}.hx\:overflow-x-auto{overflow-x:auto}.hx\:overflow-x-hidden{overflow-x:hidden}.hx\:overflow-y-auto{overflow-y:auto}.hx\:overflow-y-hidden{overflow-y:hidden}.hx\:overscroll-contain{overscroll-behavior:contain}.hx\:overscroll-x-contain{overscroll-behavior-x:contain}.hx\:rounded-3xl{border-radius:var(--hx-radius-3xl)}.hx\:rounded-full{border-radius:340282e33px}.hx\:rounded-lg{border-radius:var(--hx-radius-lg)}.hx\:rounded-md{border-radius:var(--hx-radius-md)}.hx\:rounded-sm{border-radius:var(--hx-radius-sm)}.hx\:rounded-xl{border-radius:var(--hx-radius-xl)}.hx\:rounded-xs{border-radius:var(--hx-radius-xs)}.hx\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.hx\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:border-0{border-style:var(--tw-border-style);border-width:0}.hx\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.hx\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hx\:border-amber-200{border-color:var(--hx-color-amber-200)}.hx\:border-black\/5{border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:border-black\/5{border-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:border-blue-200{border-color:var(--hx-color-blue-200)}.hx\:border-gray-200{border-color:var(--hx-color-gray-200)}.hx\:border-gray-500{border-color:var(--hx-color-gray-500)}.hx\:border-green-200{border-color:var(--hx-color-green-200)}.hx\:border-indigo-200{border-color:var(--hx-color-indigo-200)}.hx\:border-orange-100{border-color:var(--hx-color-orange-100)}.hx\:border-purple-200{border-color:var(--hx-color-purple-200)}.hx\:border-red-200{border-color:var(--hx-color-red-200)}.hx\:border-transparent{border-color:#0000}.hx\:border-yellow-100{border-color:var(--hx-color-yellow-100)}.hx\:bg-amber-100{background-color:var(--hx-color-amber-100)}.hx\:bg-black\/\[\.05\]{background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-black\/\[\.05\]{background-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:bg-blue-100{background-color:var(--hx-color-blue-100)}.hx\:bg-gray-100{background-color:var(--hx-color-gray-100)}.hx\:bg-gray-200{background-color:var(--hx-color-gray-200)}.hx\:bg-green-100{background-color:var(--hx-color-green-100)}.hx\:bg-indigo-100{background-color:var(--hx-color-indigo-100)}.hx\:bg-neutral-50{background-color:var(--hx-color-neutral-50)}.hx\:bg-neutral-900{background-color:var(--hx-color-neutral-900)}.hx\:bg-orange-50{background-color:var(--hx-color-orange-50)}.hx\:bg-primary-100{background-color:var(--hx-color-primary-100)}.hx\:bg-primary-400{background-color:var(--hx-color-primary-400)}.hx\:bg-primary-600{background-color:var(--hx-color-primary-600)}.hx\:bg-primary-700\/5{background-color:var(--hx-color-primary-700)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-primary-700\/5{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hx\:bg-purple-100{background-color:var(--hx-color-purple-100)}.hx\:bg-red-100{background-color:var(--hx-color-red-100)}.hx\:bg-transparent{background-color:#0000}.hx\:bg-white{background-color:var(--hx-color-white)}.hx\:bg-yellow-50{background-color:var(--hx-color-yellow-50)}.hx\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hx\:from-gray-900{--tw-gradient-from:var(--hx-color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:to-gray-600{--tw-gradient-to:var(--hx-color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.hx\:p-0{padding:calc(var(--hx-spacing)*0)}.hx\:p-0\.5{padding:calc(var(--hx-spacing)*.5)}.hx\:p-1{padding:calc(var(--hx-spacing)*1)}.hx\:p-1\.5{padding:calc(var(--hx-spacing)*1.5)}.hx\:p-2{padding:calc(var(--hx-spacing)*2)}.hx\:p-4{padding:calc(var(--hx-spacing)*4)}.hx\:p-6{padding:calc(var(--hx-spacing)*6)}.hx\:px-1\.5{padding-inline:calc(var(--hx-spacing)*1.5)}.hx\:px-2{padding-inline:calc(var(--hx-spacing)*2)}.hx\:px-2\.5{padding-inline:calc(var(--hx-spacing)*2.5)}.hx\:px-3{padding-inline:calc(var(--hx-spacing)*3)}.hx\:px-4{padding-inline:calc(var(--hx-spacing)*4)}.hx\:px-6{padding-inline:calc(var(--hx-spacing)*6)}.hx\:px-8{padding-inline:calc(var(--hx-spacing)*8)}.hx\:py-1{padding-block:calc(var(--hx-spacing)*1)}.hx\:py-1\.5{padding-block:calc(var(--hx-spacing)*1.5)}.hx\:py-2{padding-block:calc(var(--hx-spacing)*2)}.hx\:py-2\.5{padding-block:calc(var(--hx-spacing)*2.5)}.hx\:py-3{padding-block:calc(var(--hx-spacing)*3)}.hx\:py-4{padding-block:calc(var(--hx-spacing)*4)}.hx\:py-12{padding-block:calc(var(--hx-spacing)*12)}.hx\:pt-4{padding-top:calc(var(--hx-spacing)*4)}.hx\:pt-6{padding-top:calc(var(--hx-spacing)*6)}.hx\:pt-8{padding-top:calc(var(--hx-spacing)*8)}.hx\:pr-2{padding-right:calc(var(--hx-spacing)*2)}.hx\:pr-4{padding-right:calc(var(--hx-spacing)*4)}.hx\:pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-left),1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.hx\:pb-8{padding-bottom:calc(var(--hx-spacing)*8)}.hx\:pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.hx\:pb-px{padding-bottom:1px}.hx\:pl-6{padding-left:calc(var(--hx-spacing)*6)}.hx\:pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.hx\:text-center{text-align:center}.hx\:text-left{text-align:left}.hx\:align-\[-2\.5px\]{vertical-align:-2.5px}.hx\:align-baseline{vertical-align:baseline}.hx\:align-middle{vertical-align:middle}.hx\:align-text-bottom{vertical-align:text-bottom}.hx\:font-mono{font-family:var(--hx-font-mono)}.hx\:text-2xl{font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height))}.hx\:text-4xl{font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height))}.hx\:text-base{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height))}.hx\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}.hx\:text-xs{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height))}.hx\:text-\[\.65rem\]{font-size:.65rem}.hx\:text-\[10px\]{font-size:10px}.hx\:leading-5{--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5)}.hx\:leading-6{--tw-leading:calc(var(--hx-spacing)*6);line-height:calc(var(--hx-spacing)*6)}.hx\:leading-7{--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hx\:leading-none{--tw-leading:1;line-height:1}.hx\:leading-tight{--tw-leading:var(--hx-leading-tight);line-height:var(--hx-leading-tight)}.hx\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:font-extrabold{--tw-font-weight:var(--hx-font-weight-extrabold);font-weight:var(--hx-font-weight-extrabold)}.hx\:font-medium{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:font-normal{--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal)}.hx\:font-semibold{--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hx\:tracking-tight{--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight)}.hx\:tracking-tighter{--tw-tracking:var(--hx-tracking-tighter);letter-spacing:var(--hx-tracking-tighter)}.hx\:break-words,.hx\:wrap-break-word{overflow-wrap:break-word}.hx\:text-ellipsis{text-overflow:ellipsis}.hx\:whitespace-nowrap{white-space:nowrap}.hx\:text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\]{color:hsl(var(--primary-hue),100%,50%)}.hx\:text-amber-900{color:var(--hx-color-amber-900)}.hx\:text-blue-900{color:var(--hx-color-blue-900)}.hx\:text-current{color:currentColor}.hx\:text-gray-100{color:var(--hx-color-gray-100)}.hx\:text-gray-500{color:var(--hx-color-gray-500)}.hx\:text-gray-600{color:var(--hx-color-gray-600)}.hx\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:text-green-900{color:var(--hx-color-green-900)}.hx\:text-indigo-900{color:var(--hx-color-indigo-900)}.hx\:text-orange-800{color:var(--hx-color-orange-800)}.hx\:text-primary-800{color:var(--hx-color-primary-800)}.hx\:text-purple-900{color:var(--hx-color-purple-900)}.hx\:text-red-900{color:var(--hx-color-red-900)}.hx\:text-slate-50{color:var(--hx-color-slate-50)}.hx\:text-slate-900{color:var(--hx-color-slate-900)}.hx\:text-transparent{color:#0000}.hx\:text-white{color:var(--hx-color-white)}.hx\:text-yellow-900{color:var(--hx-color-yellow-900)}.hx\:capitalize{text-transform:capitalize}.hx\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.hx\:no-underline{text-decoration-line:none}.hx\:underline{text-decoration-line:underline}.hx\:decoration-from-font{text-decoration-thickness:from-font}.hx\:underline-offset-2{text-underline-offset:2px}.hx\:opacity-0{opacity:0}.hx\:opacity-50{opacity:.5}.hx\:opacity-80{opacity:.8}.hx\:shadow-\[0_-12px_16px_\#fff\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,white);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\]{--tw-shadow:0 2px 4px var(--tw-shadow-color,#00000005),0 1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hextra-focus-visible:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}.hx\:hextra-focus-visible:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}.hx\:hextra-focus-visible-inset:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.hx\:hextra-focus-visible-inset:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800)}.hx\:shadow-gray-100{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}.hx\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:duration-75{--tw-duration:75ms;transition-duration:75ms}.hx\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hx\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hx\:ease-in{--tw-ease:var(--hx-ease-in);transition-timing-function:var(--hx-ease-in)}.hx\:ease-in-out{--tw-ease:var(--hx-ease-in-out);transition-timing-function:var(--hx-ease-in-out)}.hx\:outline-none{--tw-outline-style:none;outline-style:none}.hx\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hx\:group-hover\:text-gray-900:is(:where(.hx\:group):hover *){color:var(--hx-color-gray-900)}.hx\:group-hover\:underline:is(:where(.hx\:group):hover *){text-decoration-line:underline}.hx\:group-hover\/code\:opacity-100:is(:where(.hx\:group\/code):hover *){opacity:1}}.hx\:group-data-\[active\=true\]\:text-primary-800:is(:where(.hx\:group)[data-active=true] *){color:var(--hx-color-primary-800)}.hx\:group-data-\[theme\=dark\]\:hidden:is(:where(.hx\:group)[data-theme=dark] *),.hx\:group-data-\[theme\=light\]\:hidden:is(:where(.hx\:group)[data-theme=light] *),.hx\:group-data-\[theme\=system\]\:hidden:is(:where(.hx\:group)[data-theme=system] *){display:none}.hx\:group-\[\.copied\]\/copybtn\:block:is(:where(.hx\:group\/copybtn).copied *){display:block}.hx\:group-\[\.copied\]\/copybtn\:hidden:is(:where(.hx\:group\/copybtn).copied *){display:none}.hx\:placeholder\:text-gray-500::placeholder{color:var(--hx-color-gray-500)}.hx\:before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.hx\:before\:absolute:before{content:var(--tw-content);position:absolute}.hx\:before\:inset-0:before{content:var(--tw-content);inset:calc(var(--hx-spacing)*0)}.hx\:before\:inset-y-1:before{content:var(--tw-content);inset-block:calc(var(--hx-spacing)*1)}.hx\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--hx-spacing)*1)}.hx\:before\:inline-block:before{content:var(--tw-content);display:inline-block}.hx\:before\:w-px:before{content:var(--tw-content);width:1px}.hx\:before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--hx-color-gray-200)}.hx\:before\:opacity-25:before{content:var(--tw-content);opacity:.25}.hx\:before\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\'\#\'\]:before{--tw-content:"#";content:var(--tw-content)}.hx\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.hx\:group-open\:before\:rotate-90:is(:where(.hx\:group):is([open],:popover-open,:open) *):before{content:var(--tw-content);rotate:90deg}.hx\:first\:mt-0:first-child{margin-top:calc(var(--hx-spacing)*0)}.hx\:last-of-type\:mb-0:last-of-type{margin-bottom:calc(var(--hx-spacing)*0)}@media(hover:hover){.hx\:hover\:border-gray-200:hover{border-color:var(--hx-color-gray-200)}.hx\:hover\:border-gray-300:hover{border-color:var(--hx-color-gray-300)}.hx\:hover\:border-gray-400:hover{border-color:var(--hx-color-gray-400)}.hx\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}.hx\:hover\:bg-gray-100:hover{background-color:var(--hx-color-gray-100)}.hx\:hover\:bg-gray-800\/5:hover{background-color:var(--hx-color-gray-800)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:bg-gray-800\/5:hover{background-color:color-mix(in oklab,var(--hx-color-gray-800)5%,transparent)}}.hx\:hover\:bg-primary-700:hover{background-color:var(--hx-color-primary-700)}.hx\:hover\:bg-slate-50:hover{background-color:var(--hx-color-slate-50)}.hx\:hover\:text-black:hover{color:var(--hx-color-black)}.hx\:hover\:text-gray-700:hover{color:var(--hx-color-gray-700)}.hx\:hover\:text-gray-800:hover{color:var(--hx-color-gray-800)}.hx\:hover\:text-gray-900:hover{color:var(--hx-color-gray-900)}.hx\:hover\:text-primary-600:hover{color:var(--hx-color-primary-600)}.hx\:hover\:opacity-60:hover{opacity:.6}.hx\:hover\:opacity-75:hover{opacity:.75}.hx\:hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}}.hx\:focus-visible\:not-sr-only:focus-visible{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.hx\:focus-visible\:fixed:focus-visible{position:fixed}.hx\:focus-visible\:top-2:focus-visible{top:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:left-2:focus-visible{left:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:z-50:focus-visible{z-index:50}.hx\:focus-visible\:rounded-md:focus-visible{border-radius:var(--hx-radius-md)}.hx\:focus-visible\:bg-primary-500:focus-visible{background-color:var(--hx-color-primary-500)}.hx\:focus-visible\:bg-white:focus-visible{background-color:var(--hx-color-white)}.hx\:focus-visible\:px-4:focus-visible{padding-inline:calc(var(--hx-spacing)*4)}.hx\:focus-visible\:py-2:focus-visible{padding-block:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:text-sm:focus-visible{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:focus-visible\:font-medium:focus-visible{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:focus-visible\:text-white:focus-visible{color:var(--hx-color-white)}.hx\:active\:bg-gray-400\/20:active{background-color:var(--hx-color-gray-400)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:bg-gray-400\/20:active{background-color:color-mix(in oklab,var(--hx-color-gray-400)20%,transparent)}}.hx\:active\:opacity-50:active{opacity:.5}.hx\:active\:shadow-sm:active{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:active\:shadow-gray-200:active{--tw-shadow-color:var(--hx-color-gray-200)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:shadow-gray-200:active{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-200)var(--tw-shadow-alpha),transparent)}}.hx\:data-\[state\=closed\]\:hidden[data-state=closed],.hx\:data-\[state\=open\]\:hidden[data-state=open]{display:none}.hx\:data-\[state\=selected\]\:block[data-state=selected]{display:block}.hx\:data-\[state\=selected\]\:border-primary-500[data-state=selected]{border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:text-primary-600[data-state=selected]{color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:contrast-more\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:contrast-more\:border-current{border-color:initial}.hx\:contrast-more\:border-gray-800{border-color:var(--hx-color-gray-800)}.hx\:contrast-more\:border-gray-900{border-color:var(--hx-color-gray-900)}.hx\:contrast-more\:border-neutral-400{border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:border-primary-500{border-color:var(--hx-color-primary-500)}.hx\:contrast-more\:border-transparent{border-color:#0000}.hx\:contrast-more\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:contrast-more\:text-current{color:currentColor}.hx\:contrast-more\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:contrast-more\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:contrast-more\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:contrast-more\:underline{text-decoration-line:underline}.hx\:contrast-more\:shadow-\[0_0_0_1px_\#000\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}}}@media not all and (min-width:80rem){.hx\:max-xl\:hidden{display:none}}@media not all and (min-width:64rem){.hx\:max-lg\:min-h-\[340px\]{min-height:340px}}@media not all and (min-width:48rem){.hx\:max-md\:sticky{position:sticky}.hx\:max-md\:hidden{display:none}.hx\:max-md\:min-h-\[340px\]{min-height:340px}.hx\:max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\]{transform:translateY(-100%)}.hx\:max-md\:\[transform\:translate3d\(0\,0\,0\)\]{transform:translate(0)}}@media not all and (min-width:40rem){.hx\:max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(min-width:40rem){.hx\:sm\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:sm\:left-auto{left:auto}.hx\:sm\:block{display:block}.hx\:sm\:flex{display:flex}.hx\:sm\:w-\[110\%\]{width:110%}.hx\:sm\:flex-row{flex-direction:row}.hx\:sm\:items-center{align-items:center}.hx\:sm\:items-start{align-items:flex-start}.hx\:sm\:justify-between{justify-content:space-between}.hx\:sm\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}@media not all and (min-width:64rem){.hx\:sm\:max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@media(min-width:48rem){.hx\:md\:sticky{position:sticky}.hx\:md\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:md\:mr-0{margin-right:calc(var(--hx-spacing)*0)}.hx\:md\:hidden{display:none}.hx\:md\:inline-block{display:inline-block}.hx\:md\:inline-flex{display:inline-flex}.hx\:md\:aspect-\[1\.1\/1\]{aspect-ratio:1.1}.hx\:md\:h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\]{height:calc(100vh - var(--navbar-height) - var(--menu-height))}.hx\:md\:max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px)}.hx\:md\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:md\:shrink-0{flex-shrink:0}.hx\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hx\:md\:justify-start{justify-content:flex-start}.hx\:md\:self-start{align-self:flex-start}.hx\:md\:overflow-auto{overflow:auto}.hx\:md\:px-12{padding-inline:calc(var(--hx-spacing)*12)}.hx\:md\:pt-12{padding-top:calc(var(--hx-spacing)*12)}.hx\:md\:text-3xl{font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height))}.hx\:md\:text-5xl{font-size:var(--hx-text-5xl);line-height:var(--tw-leading,var(--hx-text-5xl--line-height))}.hx\:md\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:md\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}}@media(min-width:64rem){.hx\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:80rem){.hx\:xl\:block{display:block}.hx\:xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.hx\:ltr\:right-1\.5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*1.5)}.hx\:ltr\:right-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*2)}.hx\:ltr\:right-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*3)}.hx\:ltr\:-mr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:calc(var(--hx-spacing)*-4)}.hx\:ltr\:mr-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:auto}.hx\:ltr\:ml-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.hx\:ltr\:ml-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:ml-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:auto}.hx\:ltr\:rotate-180:where(:dir(ltr),[dir=ltr],[dir=ltr] *){rotate:180deg}.hx\:ltr\:rounded-l-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:ltr\:rounded-r-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:ltr\:border-l:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);border-left-width:1px}.hx\:ltr\:pr-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*0)}.hx\:ltr\:pr-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*1)}.hx\:ltr\:pr-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*2)}.hx\:ltr\:pr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:ltr\:pr-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:ltr\:pr-9:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*9)}.hx\:ltr\:pl-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:pl-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:ltr\:pl-5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*5)}.hx\:ltr\:pl-6:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*6)}.hx\:ltr\:pl-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:ltr\:pl-12:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*12)}.hx\:ltr\:pl-16:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*16)}.hx\:ltr\:text-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){text-align:right}.hx\:ltr\:before\:left-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);left:calc(var(--hx-spacing)*0)}@media(min-width:48rem){.hx\:ltr\:md\:left-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){left:auto}}.hx\:rtl\:left-1\.5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*1.5)}.hx\:rtl\:left-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*2)}.hx\:rtl\:left-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}.hx\:rtl\:mr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.hx\:rtl\:-ml-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--hx-spacing)*-4)}.hx\:rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.hx\:rtl\:-rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-180deg}.hx\:rtl\:rotate-270:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:270deg}.hx\:rtl\:rounded-l-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:rtl\:rounded-r-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:rtl\:border-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);border-right-width:1px}.hx\:rtl\:pr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:pr-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:rtl\:pr-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*5)}.hx\:rtl\:pr-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*6)}.hx\:rtl\:pr-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:rtl\:pr-12:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*12)}.hx\:rtl\:pr-16:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*16)}.hx\:rtl\:pl-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*0)}.hx\:rtl\:pl-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*1)}.hx\:rtl\:pl-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*2)}.hx\:rtl\:pl-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:rtl\:pl-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:rtl\:pl-9:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*9)}.hx\:rtl\:text-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.hx\:rtl\:before\:right-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);right:calc(var(--hx-spacing)*0)}.hx\:rtl\:before\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);rotate:180deg}@media(min-width:48rem){.hx\:rtl\:md\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}}.hx\:dark\:block:where(.dark,.dark *){display:block}.hx\:dark\:hidden:where(.dark,.dark *){display:none}.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:var(--hx-color-amber-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-amber-200)30%,transparent)}}.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:var(--hx-color-blue-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-blue-200)30%,transparent)}}.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-gray-100)20%,transparent)}}.hx\:dark\:border-gray-400:where(.dark,.dark *){border-color:var(--hx-color-gray-400)}.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:var(--hx-color-green-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-green-200)30%,transparent)}}.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:var(--hx-color-indigo-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-indigo-200)30%,transparent)}}.hx\:dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--hx-color-neutral-700)}.hx\:dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-orange-400)30%,transparent)}}.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:var(--hx-color-purple-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-purple-200)30%,transparent)}}.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:var(--hx-color-red-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-red-200)30%,transparent)}}.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:var(--hx-color-yellow-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-yellow-200)30%,transparent)}}.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:var(--hx-color-amber-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-amber-900)30%,transparent)}}.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:var(--hx-color-blue-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-blue-900)30%,transparent)}}.hx\:dark\:bg-dark:where(.dark,.dark *),.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:var(--hx-color-dark)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)50%,transparent)}}.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:var(--hx-color-gray-50)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-50)10%,transparent)}}.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:var(--hx-color-green-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-green-900)30%,transparent)}}.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:var(--hx-color-indigo-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-indigo-900)30%,transparent)}}.hx\:dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--hx-color-neutral-700)}.hx\:dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--hx-color-neutral-800)}.hx\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--hx-color-neutral-900)}.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-orange-400)20%,transparent)}}.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-400)10%,transparent)}}.hx\:dark\:bg-primary-600:where(.dark,.dark *){background-color:var(--hx-color-primary-600)}.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:var(--hx-color-purple-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-purple-900)30%,transparent)}}.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:var(--hx-color-red-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-red-900)30%,transparent)}}.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:var(--hx-color-yellow-700)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-yellow-700)30%,transparent)}}.hx\:dark\:from-gray-100:where(.dark,.dark *){--tw-gradient-from:var(--hx-color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:to-gray-400:where(.dark,.dark *){--tw-gradient-to:var(--hx-color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:text-amber-200:where(.dark,.dark *){color:var(--hx-color-amber-200)}.hx\:dark\:text-blue-200:where(.dark,.dark *){color:var(--hx-color-blue-200)}.hx\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:dark\:text-gray-200:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hx\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:dark\:text-gray-400:where(.dark,.dark *){color:var(--hx-color-gray-400)}.hx\:dark\:text-green-200:where(.dark,.dark *){color:var(--hx-color-green-200)}.hx\:dark\:text-indigo-200:where(.dark,.dark *){color:var(--hx-color-indigo-200)}.hx\:dark\:text-neutral-200:where(.dark,.dark *){color:var(--hx-color-neutral-200)}.hx\:dark\:text-neutral-400:where(.dark,.dark *){color:var(--hx-color-neutral-400)}.hx\:dark\:text-orange-300:where(.dark,.dark *){color:var(--hx-color-orange-300)}.hx\:dark\:text-primary-600:where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:text-purple-200:where(.dark,.dark *){color:var(--hx-color-purple-200)}.hx\:dark\:text-red-200:where(.dark,.dark *){color:var(--hx-color-red-200)}.hx\:dark\:text-slate-100:where(.dark,.dark *){color:var(--hx-color-slate-100)}.hx\:dark\:text-white:where(.dark,.dark *){color:var(--hx-color-white)}.hx\:dark\:text-yellow-200:where(.dark,.dark *){color:var(--hx-color-yellow-200)}.hx\:dark\:opacity-80:where(.dark,.dark *){opacity:.8}.hx\:dark\:shadow-\[0_-1px_0_rgba\(255\,255\,255\,\.1\)_inset\]:where(.dark,.dark *){--tw-shadow:0 -1px 0 var(--tw-shadow-color,#ffffff1a)inset;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-\[0_-12px_16px_\#111\]:where(.dark,.dark *){--tw-shadow:0 -12px 16px var(--tw-shadow-color,#111);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:dark\:group-hover\:text-gray-50:where(.dark,.dark *):is(:where(.hx\:group):hover *){color:var(--hx-color-gray-50)}}.hx\:group-data-\[active\=true\]\:dark\:text-primary-600:is(:where(.hx\:group)[data-active=true] *):where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:placeholder\:text-gray-400:where(.dark,.dark *)::placeholder{color:var(--hx-color-gray-400)}.hx\:dark\:before\:bg-neutral-800:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hx\:dark\:before\:invert:where(.dark,.dark *):before{content:var(--tw-content);--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.hx\:dark\:hover\:border-gray-100:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-100)}.hx\:dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-600)}.hx\:dark\:hover\:border-neutral-500:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-500)}.hx\:dark\:hover\:border-neutral-700:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:border-neutral-800:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-gray-100)5%,transparent)}}.hx\:dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:bg-neutral-800:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-neutral-900:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-900)}.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-primary-100)5%,transparent)}}.hx\:dark\:hover\:bg-primary-700:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-700)}.hx\:dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--hx-color-gray-50)}.hx\:dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--hx-color-gray-100)}.hx\:dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--hx-color-gray-200)}.hx\:dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--hx-color-gray-300)}.hx\:dark\:hover\:text-neutral-50:where(.dark,.dark *):hover{color:var(--hx-color-neutral-50)}.hx\:dark\:hover\:text-primary-400:where(.dark,.dark *):hover{color:var(--hx-color-primary-400)}.hx\:dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--hx-color-white)}.hx\:dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.hx\:dark\:focus-visible\:bg-dark:where(.dark,.dark *):focus-visible{background-color:var(--hx-color-dark)}.hx\:data-\[state\=selected\]\:dark\:border-primary-500[data-state=selected]:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:dark\:text-primary-600[data-state=selected]:where(.dark,.dark *){color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:dark\:border-current:where(.dark,.dark *){border-color:initial}.hx\:contrast-more\:dark\:border-gray-50:where(.dark,.dark *){border-color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:border-primary-500:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:dark\:contrast-more\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:text-current:where(.dark,.dark *){color:currentColor}.hx\:contrast-more\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:contrast-more\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:contrast-more\:dark\:shadow-\[0_0_0_1px_\#fff\]:where(.dark,.dark *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:dark\:hover\:border-gray-50:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-50)}}}@media print{.hx\:print\:\[display\:none\],.hx\:print\:hidden{display:none}.hx\:print\:bg-transparent{background-color:#0000}}}html{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--hx-color-white);width:100%}body:where(.dark,.dark *){background-color:var(--hx-color-dark);color:var(--hx-color-gray-100)}:root{--primary-hue:212deg;--primary-saturation:100%;--primary-lightness:50%;--navbar-height:4rem;--hextra-banner-height:2rem;--menu-height:3.75rem}.dark{--primary-hue:204deg;--primary-saturation:100%;--primary-lightness:50%}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*2);font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height));--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*10);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-neutral-200)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-neutral-200)70%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:calc(var(--hx-spacing)*1);font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--hx-color-neutral-400)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)10%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--hx-color-primary-600);text-decoration-line:underline;text-decoration-thickness:from-font}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);border-color:var(--hx-color-gray-300);color:var(--hx-color-gray-700);font-style:italic}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);padding-left:calc(var(--hx-spacing)*6);border-left-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);padding-right:calc(var(--hx-spacing)*6);border-right-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-gray-700);color:var(--hx-color-gray-400)}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--hx-spacing)*4);--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*6);border-collapse:collapse;width:100%;padding:calc(var(--hx-spacing)*0);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);display:block;overflow-x:auto}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead{background-color:var(--hx-color-gray-50)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:var(--hx-color-gray-600)}@supports(color:color-mix(in lab,red,red)){.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-600)20%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr{margin:calc(var(--hx-spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:decimal}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:disc}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):has(li input[type=checkbox]){list-style-type:none}.content :where(ul,ol)>li>:where(ul,ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*0)}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:#0000;border-radius:0}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:#0000}.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-inline:auto;margin-block:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-md)}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption{margin-top:calc(var(--hx-spacing)*2);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-500);display:block}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:where(.dark,.dark *){color:var(--hx-color-gray-400)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt{margin-top:calc(var(--hx-spacing)*6);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd{margin-block:calc(var(--hx-spacing)*2);padding-inline-start:calc(var(--hx-spacing)*6)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*10);border-color:var(--hx-color-gray-200)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .footnotes{margin-top:calc(var(--hx-spacing)*12);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.content .footnotes hr{border-color:var(--hx-color-gray-200)}.content .footnotes hr:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .subheading-anchor{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.content .subheading-anchor:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.content .subheading-anchor:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}span:target+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor),.content .subheading-anchor:focus-visible{opacity:1}span+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor){text-decoration-line:none!important}.content .subheading-anchor:after{content:var(--tw-content);color:var(--hx-color-gray-300)}.content .subheading-anchor:where(.dark,.dark *):after{content:var(--tw-content);color:var(--hx-color-neutral-700)}.content .subheading-anchor:after{padding-inline:calc(var(--hx-spacing)*1);--tw-content:"#";content:var(--tw-content)}span:target+:is(){color:var(--hx-color-gray-400)}span:target+:is():where(.dark,.dark *){color:var(--hx-color-neutral-500)}article details>summary::-webkit-details-marker{display:none}article details>summary:before{vertical-align:-4px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx:h-5 hx:w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E");width:1.2em;height:1.2em;padding:0 .6em}:lang(fa) ol{list-style-type:persian}.highlight .chroma .err{color:#a61717;background-color:#e3d2d2}.highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.highlight .chroma .line{display:flex}.highlight .chroma .k,.highlight .chroma .kc,.highlight .chroma .kd,.highlight .chroma .kn,.highlight .chroma .kp,.highlight .chroma .kr{color:#000;font-weight:700}.highlight .chroma .kt{color:#458;font-weight:700}.highlight .chroma .na{color:teal}.highlight .chroma .nb{color:#0086b3}.highlight .chroma .bp{color:#999}.highlight .chroma .nc{color:#458;font-weight:700}.highlight .chroma .no{color:teal}.highlight .chroma .nd{color:#3c5d5d;font-weight:700}.highlight .chroma .ni{color:purple}.highlight .chroma .ne,.highlight .chroma .nf,.highlight .chroma .nl{color:#900;font-weight:700}.highlight .chroma .nn{color:#555}.highlight .chroma .nt{color:navy}.highlight .chroma .nv,.highlight .chroma .vc,.highlight .chroma .vg,.highlight .chroma .vi{color:teal}.highlight .chroma .s,.highlight .chroma .sa,.highlight .chroma .sb,.highlight .chroma .sc,.highlight .chroma .dl,.highlight .chroma .sd,.highlight .chroma .s2,.highlight .chroma .se,.highlight .chroma .sh,.highlight .chroma .si,.highlight .chroma .sx{color:#d14}.highlight .chroma .sr{color:#009926}.highlight .chroma .s1{color:#d14}.highlight .chroma .ss{color:#990073}.highlight .chroma .m,.highlight .chroma .mb,.highlight .chroma .mf,.highlight .chroma .mh,.highlight .chroma .mi,.highlight .chroma .il,.highlight .chroma .mo{color:#099}.highlight .chroma .o,.highlight .chroma .ow{color:#000;font-weight:700}.highlight .chroma .c,.highlight .chroma .ch,.highlight .chroma .cm,.highlight .chroma .c1{color:#998;font-style:italic}.highlight .chroma .cs,.highlight .chroma .cp,.highlight .chroma .cpf{color:#999;font-style:italic;font-weight:700}.highlight .chroma .gd{color:#000;background-color:#fdd}.highlight .chroma .ge{color:#000;font-style:italic}.highlight .chroma .gr{color:#a00}.highlight .chroma .gh{color:#999}.highlight .chroma .gi{color:#000;background-color:#dfd}.highlight .chroma .go{color:#888}.highlight .chroma .gp{color:#555}.highlight .chroma .gs{font-weight:700}.highlight .chroma .gu{color:#aaa}.highlight .chroma .gt{color:#a00}.highlight .chroma .gl{text-decoration:underline}.highlight .chroma .w{color:#bbb}.dark .highlight .chroma .err{color:#f85149}.dark .highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.dark .highlight .chroma .line{display:flex}.dark .highlight .chroma .k{color:#ff7b72}.dark .highlight .chroma .kc{color:#79c0ff}.dark .highlight .chroma .kd,.dark .highlight .chroma .kn{color:#ff7b72}.dark .highlight .chroma .kp{color:#79c0ff}.dark .highlight .chroma .kr,.dark .highlight .chroma .kt{color:#ff7b72}.dark .highlight .chroma .nc{color:#f0883e;font-weight:700}.dark .highlight .chroma .no{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nd{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .ni{color:#ffa657}.dark .highlight .chroma .ne{color:#f0883e;font-weight:700}.dark .highlight .chroma .nf{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .nl{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nn{color:#ff7b72}.dark .highlight .chroma .py{color:#79c0ff}.dark .highlight .chroma .nt{color:#7ee787}.dark .highlight .chroma .nv{color:#79c0ff}.dark .highlight .chroma .l{color:#a5d6ff}.dark .highlight .chroma .ld{color:#79c0ff}.dark .highlight .chroma .s{color:#a5d6ff}.dark .highlight .chroma .sa{color:#79c0ff}.dark .highlight .chroma .sb,.dark .highlight .chroma .sc{color:#a5d6ff}.dark .highlight .chroma .dl{color:#79c0ff}.dark .highlight .chroma .sd,.dark .highlight .chroma .s2{color:#a5d6ff}.dark .highlight .chroma .se,.dark .highlight .chroma .sh{color:#79c0ff}.dark .highlight .chroma .si,.dark .highlight .chroma .sx{color:#a5d6ff}.dark .highlight .chroma .sr{color:#79c0ff}.dark .highlight .chroma .s1,.dark .highlight .chroma .ss,.dark .highlight .chroma .m,.dark .highlight .chroma .mb,.dark .highlight .chroma .mf,.dark .highlight .chroma .mh,.dark .highlight .chroma .mi,.dark .highlight .chroma .il,.dark .highlight .chroma .mo{color:#a5d6ff}.dark .highlight .chroma .o,.dark .highlight .chroma .ow{color:#ff7b72;font-weight:700}.dark .highlight .chroma .c,.dark .highlight .chroma .ch,.dark .highlight .chroma .cm,.dark .highlight .chroma .c1{color:#8b949e;font-style:italic}.dark .highlight .chroma .cs,.dark .highlight .chroma .cp,.dark .highlight .chroma .cpf{color:#8b949e;font-style:italic;font-weight:700}.dark .highlight .chroma .gd{color:#ffa198;background-color:#490202}.dark .highlight .chroma .ge{color:inherit;font-style:italic}.dark .highlight .chroma .gr{color:#ffa198}.dark .highlight .chroma .gh{color:#79c0ff;font-weight:700}.dark .highlight .chroma .gi{color:#56d364;background-color:#0f5323}.dark .highlight .chroma .go,.dark .highlight .chroma .gp{color:#8b949e}.dark .highlight .chroma .gs{font-weight:700}.dark .highlight .chroma .gu{color:#79c0ff}.dark .highlight .chroma .gt{color:#ff7b72}.dark .highlight .chroma .gl{text-decoration:underline}.dark .highlight .chroma .w{color:#6e7681}.hextra-code-block{--tw-leading:calc(var(--hx-spacing)*5);font-size:.9em;line-height:calc(var(--hx-spacing)*5)}.hextra-code-block pre{background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block pre{--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.hextra-code-block pre{border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.hextra-code-block pre{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.hextra-code-block pre:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.hextra-code-block pre:where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.hextra-code-block .hextra-code-filename{top:calc(var(--hx-spacing)*0);z-index:1;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:var(--hx-radius-xl);border-top-right-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);width:100%;position:absolute;overflow:hidden}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block .hextra-code-filename{padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*2);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));color:var(--hx-color-gray-700)}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hextra-code-block .hextra-code-filename+pre:not(.lntable pre){padding-top:calc(var(--hx-spacing)*12)}.hextra-code-block pre:not(.lntable pre){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*4)}.hextra-code-block div:nth-of-type(2) pre{padding-top:calc(var(--hx-spacing)*12);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .lntable{margin:calc(var(--hx-spacing)*0);border-radius:var(--hx-radius-xl);width:auto;display:block;overflow:auto}.chroma .lntable pre{padding-top:calc(var(--hx-spacing)*4);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line){min-width:2.6rem;padding-right:calc(var(--hx-spacing)*4);padding-left:calc(var(--hx-spacing)*4);color:var(--hx-color-neutral-600)}:is(.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line)):where(.dark,.dark *){color:var(--hx-color-neutral-300)}.chroma .lntd{padding:calc(var(--hx-spacing)*0);vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{background-color:var(--hx-color-primary-800);width:100%;display:block}@supports(color:color-mix(in lab,red,red)){.chroma .hl{background-color:color-mix(in oklab,var(--hx-color-primary-800)10%,transparent)}}.hextra-cards{grid-template-columns:repeat(auto-fill,minmax(max(250px,calc((100% - 1rem*2)/var(--hextra-cards-grid-cols))),1fr))}.hextra-card{position:relative}.hextra-card img{-webkit-user-select:none;user-select:none}.hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card .hextra-card-icon svg{color:#0003;width:1.5rem;transition:color .3s}.hextra-card p{margin-top:.5rem;position:relative}.dark .hextra-card .hextra-card-icon svg{color:#fff6}.dark .hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card-tag{z-index:10;position:absolute;top:5px}.hextra-card-tag:where(:dir(ltr)){right:5px}.hextra-card-tag:where(:dir(rtl)){left:5px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker){counter-increment:step}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);margin-left:-41px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);margin-right:-44px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);background-color:var(--hx-color-gray-100)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:4px;border-color:var(--hx-color-white)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);border-color:var(--hx-color-dark)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step);text-align:center;text-indent:-1px;width:33px;height:33px;font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal);color:var(--hx-color-neutral-400);border-radius:340282e33px;position:absolute}:lang(fa) .hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step,persian)}.hextra-search-wrapper li{margin-inline:calc(var(--hx-spacing)*2.5);border-radius:var(--hx-radius-md);overflow-wrap:break-word;color:var(--hx-color-gray-800)}@media(prefers-contrast:more){.hextra-search-wrapper li{border-style:var(--tw-border-style);border-width:1px;border-color:#0000}}.hextra-search-wrapper li:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hextra-search-wrapper li a{scroll-margin:calc(var(--hx-spacing)*12);padding-inline:calc(var(--hx-spacing)*2.5);padding-block:calc(var(--hx-spacing)*2);display:block}.hextra-search-wrapper li a:focus-visible{--tw-outline-style:none;outline-style:none}.hextra-search-wrapper li .hextra-search-title{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hextra-search-wrapper li .hextra-search-active{border-radius:var(--hx-radius-md);background-color:var(--hx-color-primary-500)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper li .hextra-search-active{background-color:color-mix(in oklab,var(--hx-color-primary-500)10%,transparent)}}@media(prefers-contrast:more){.hextra-search-wrapper li .hextra-search-active{border-color:var(--hx-color-primary-500)}}.hextra-search-wrapper .hextra-search-no-result{padding:calc(var(--hx-spacing)*8);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-400);-webkit-user-select:none;user-select:none;display:block}.hextra-search-wrapper .hextra-search-prefix{margin-inline:calc(var(--hx-spacing)*2.5);margin-top:calc(var(--hx-spacing)*6);margin-bottom:calc(var(--hx-spacing)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix{border-color:color-mix(in oklab,var(--hx-color-black)10%,transparent)}}.hextra-search-wrapper .hextra-search-prefix{padding-inline:calc(var(--hx-spacing)*2.5);padding-bottom:calc(var(--hx-spacing)*1.5);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);color:var(--hx-color-gray-500);text-transform:uppercase;-webkit-user-select:none;user-select:none}.hextra-search-wrapper .hextra-search-prefix:first-child{margin-top:calc(var(--hx-spacing)*0)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix{border-color:var(--hx-color-gray-600);color:var(--hx-color-gray-900)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)20%,transparent)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){color:var(--hx-color-gray-300)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-gray-50);color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{margin-top:calc(var(--hx-spacing)*1);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:1.35rem;text-overflow:ellipsis;color:var(--hx-color-gray-600);line-height:1.35rem;overflow:hidden}.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-400)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box}.hextra-search-wrapper .hextra-search-match{color:var(--hx-color-primary-600)}@media(max-width:48rem){.hextra-sidebar-container{top:calc(var(--hx-spacing)*0);bottom:calc(var(--hx-spacing)*0);z-index:15;overscroll-behavior:contain;background-color:var(--hx-color-white);width:100%;padding-top:calc(var(--navbar-height) + var(--hextra-banner-height));position:fixed}.hextra-sidebar-container:where(.dark,.dark *){background-color:var(--hx-color-dark)}.hextra-sidebar-container{will-change:transform,opacity;contain:layout style;backface-visibility:hidden;transition:transform .4s cubic-bezier(.52,.16,.04,1)}}.hextra-sidebar-container li>.hextra-sidebar-children{height:calc(var(--hx-spacing)*0)}.hextra-sidebar-container li.open>.hextra-sidebar-children{height:auto;padding-top:calc(var(--hx-spacing)*1)}.hextra-sidebar-container li.open>.hextra-sidebar-item>.hextra-sidebar-collapsible-button>svg>path{rotate:90deg}.hextra-banner-hidden .hextra-banner{display:none}.hextra-banner :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline;text-decoration-thickness:from-font}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}nav .hextra-search-wrapper{display:none}@media(min-width:48rem){nav .hextra-search-wrapper{display:inline-block}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-nav-container-blur{background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur{background-color:color-mix(in oklab,var(--hx-color-white)85%,transparent)}}.hextra-nav-container-blur{--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-nav-container-blur:where(.dark,.dark *){background-color:var(--hx-color-dark)!important}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)80%,transparent)!important}}}.hextra-hamburger-menu svg g{transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg path{opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open path{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:0s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open g{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open>path{opacity:0}.hextra-hamburger-menu svg.open>g:first-of-type{rotate:45deg}.hextra-hamburger-menu svg.open>g:first-of-type path{--tw-translate-y:calc(var(--hx-spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-hamburger-menu svg.open>g:nth-of-type(2){rotate:-45deg}.hextra-hamburger-menu svg.open>g:nth-of-type(2) path{--tw-translate-y:calc(var(--hx-spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-scrollbar,.hextra-scrollbar *{scrollbar-width:thin;scrollbar-color:oklch(55.55% 0 0/.4)transparent;scrollbar-gutter:stable}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar{height:calc(var(--hx-spacing)*3);width:calc(var(--hx-spacing)*3)}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-track{background-color:#0000}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-thumb{border-radius:10px}:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{background-color:var(--tw-shadow-color);--tw-shadow-color:var(--hx-color-neutral-500);background-clip:content-box;border:3px solid #0000}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}@media(hover:hover){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:var(--hx-color-neutral-500)}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)40%,transparent)var(--tw-shadow-alpha),transparent)}}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-code-copy-btn{opacity:.85;--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-code-copy-btn:where(.dark,.dark *){opacity:.8}}@media(min-width:1024px){.hextra-feature-grid{grid-template-columns:repeat(var(--hextra-feature-grid-cols),minmax(0,1fr))}}.hextra-jupyter-code-cell{scrollbar-gutter:auto;margin-top:calc(var(--hx-spacing)*6)}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:hidden}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs{max-height:50vh;overflow:auto}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre{max-width:100%;font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:auto}.hextra-badge{align-items:center;display:inline-flex}.hextra-toc a.hextra-toc-active{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.2s;transition-duration:.2s;color:var(--hx-color-gray-900)!important}.hextra-toc a.hextra-toc-active:where(.dark,.dark *){color:var(--hx-color-gray-50)!important}.hextra-archive-timeline{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline{border-color:color-mix(in oklab,var(--hx-color-black)15%,transparent)}}.hextra-archive-timeline:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)15%,transparent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}:root{--hextra-navbar-height:10.5rem} \ No newline at end of file diff --git a/public/css/compiled/main.min.dd0a2e06153504ce1622d60dbc1c29c348f59a33b1a7ebefabee95a192584553.css b/public/css/compiled/main.min.dd0a2e06153504ce1622d60dbc1c29c348f59a33b1a7ebefabee95a192584553.css deleted file mode 100644 index 57ef37d..0000000 --- a/public/css/compiled/main.min.dd0a2e06153504ce1622d60dbc1c29c348f59a33b1a7ebefabee95a192584553.css +++ /dev/null @@ -1 +0,0 @@ -:root{--hextra-max-page-width:80rem;--hextra-max-content-width:72rem;--hextra-max-navbar-width:80rem;--hextra-max-footer-width:80rem}.hextra-max-page-width{max-width:var(--hextra-max-page-width)}.hextra-max-content-width{max-width:var(--hextra-max-content-width)}.hextra-max-navbar-width{max-width:var(--hextra-max-navbar-width)}.hextra-max-footer-width{max-width:var(--hextra-max-footer-width)}/*!tailwindcss v4.1.18 | MIT License | https://tailwindcss.com*/@layer properties{@supports(((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--hx-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--hx-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--hx-color-red-100:oklch(93.6% .032 17.717);--hx-color-red-200:oklch(88.5% .062 18.334);--hx-color-red-900:oklch(39.6% .141 25.723);--hx-color-orange-50:oklch(98% .016 73.684);--hx-color-orange-100:oklch(95.4% .038 75.164);--hx-color-orange-300:oklch(83.7% .128 66.29);--hx-color-orange-400:oklch(75% .183 55.934);--hx-color-orange-800:oklch(47% .157 37.304);--hx-color-amber-100:oklch(96.2% .059 95.617);--hx-color-amber-200:oklch(92.4% .12 95.746);--hx-color-amber-900:oklch(41.4% .112 45.904);--hx-color-yellow-50:oklch(98.7% .026 102.212);--hx-color-yellow-100:oklch(97.3% .071 103.193);--hx-color-yellow-200:oklch(94.5% .129 101.54);--hx-color-yellow-700:oklch(55.4% .135 66.442);--hx-color-yellow-900:oklch(42.1% .095 57.708);--hx-color-green-100:oklch(96.2% .044 156.743);--hx-color-green-200:oklch(92.5% .084 155.995);--hx-color-green-900:oklch(39.3% .095 152.535);--hx-color-blue-100:oklch(93.2% .032 255.585);--hx-color-blue-200:oklch(88.2% .059 254.128);--hx-color-blue-900:oklch(37.9% .146 265.522);--hx-color-indigo-100:oklch(93% .034 272.788);--hx-color-indigo-200:oklch(87% .065 274.039);--hx-color-indigo-900:oklch(35.9% .144 278.697);--hx-color-purple-100:oklch(94.6% .033 307.174);--hx-color-purple-200:oklch(90.2% .063 306.703);--hx-color-purple-900:oklch(38.1% .176 304.987);--hx-color-slate-50:oklch(98.4% .003 247.858);--hx-color-slate-100:oklch(96.8% .007 247.896);--hx-color-slate-900:oklch(20.8% .042 265.755);--hx-color-gray-50:oklch(98.5% .002 247.839);--hx-color-gray-100:oklch(96.7% .003 264.542);--hx-color-gray-200:oklch(92.8% .006 264.531);--hx-color-gray-300:oklch(87.2% .01 258.338);--hx-color-gray-400:oklch(70.7% .022 261.325);--hx-color-gray-500:oklch(55.1% .027 264.364);--hx-color-gray-600:oklch(44.6% .03 256.802);--hx-color-gray-700:oklch(37.3% .034 259.733);--hx-color-gray-800:oklch(27.8% .033 256.848);--hx-color-gray-900:oklch(21% .034 264.665);--hx-color-neutral-50:oklch(98.5% 0 0);--hx-color-neutral-200:oklch(92.2% 0 0);--hx-color-neutral-300:oklch(87% 0 0);--hx-color-neutral-400:oklch(70.8% 0 0);--hx-color-neutral-500:oklch(55.6% 0 0);--hx-color-neutral-600:oklch(43.9% 0 0);--hx-color-neutral-700:oklch(37.1% 0 0);--hx-color-neutral-800:oklch(26.9% 0 0);--hx-color-neutral-900:oklch(20.5% 0 0);--hx-color-black:#000;--hx-color-white:#fff;--hx-spacing:.25rem;--hx-breakpoint-xl:80rem;--hx-text-xs:.75rem;--hx-text-xs--line-height:calc(1/.75);--hx-text-sm:.875rem;--hx-text-sm--line-height:calc(1.25/.875);--hx-text-base:1rem;--hx-text-base--line-height:calc(1.5/1);--hx-text-lg:1.125rem;--hx-text-lg--line-height:calc(1.75/1.125);--hx-text-xl:1.25rem;--hx-text-xl--line-height:calc(1.75/1.25);--hx-text-2xl:1.5rem;--hx-text-2xl--line-height:calc(2/1.5);--hx-text-3xl:1.875rem;--hx-text-3xl--line-height:calc(2.25/1.875);--hx-text-4xl:2.25rem;--hx-text-4xl--line-height:calc(2.5/2.25);--hx-text-5xl:3rem;--hx-text-5xl--line-height:1;--hx-font-weight-normal:400;--hx-font-weight-medium:500;--hx-font-weight-semibold:600;--hx-font-weight-bold:700;--hx-font-weight-extrabold:800;--hx-tracking-tighter:-.05em;--hx-tracking-tight:-.025em;--hx-leading-tight:1.25;--hx-radius-xs:.125rem;--hx-radius-sm:.25rem;--hx-radius-md:.375rem;--hx-radius-lg:.5rem;--hx-radius-xl:.75rem;--hx-radius-3xl:1.5rem;--hx-ease-in:cubic-bezier(.4,0,1,1);--hx-ease-out:cubic-bezier(0,0,.2,1);--hx-ease-in-out:cubic-bezier(.4,0,.2,1);--hx-blur-md:12px;--hx-default-transition-duration:.15s;--hx-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--hx-default-font-family:var(--hx-font-sans);--hx-default-mono-font-family:var(--hx-font-mono);--hx-color-primary-100:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*44));--hx-color-primary-200:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*36));--hx-color-primary-300:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*27));--hx-color-primary-400:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*16));--hx-color-primary-500:hsl(var(--primary-hue)var(--primary-saturation)var(--primary-lightness));--hx-color-primary-600:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*45));--hx-color-primary-700:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*39));--hx-color-primary-800:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*32));--hx-color-primary-900:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*24));--hx-color-dark:#111}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--hx-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--hx-default-font-feature-settings,normal);font-variation-settings:var(--hx-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hx-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--hx-default-mono-font-feature-settings,normal);font-variation-settings:var(--hx-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports(not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports(color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}abbr:where([title]){cursor:help}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible:where(.dark,.dark *){--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}}@layer components;@layer utilities{.hx\:pointer-events-none{pointer-events:none}.hx\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hx\:absolute{position:absolute}.hx\:relative{position:relative}.hx\:sticky{position:sticky}.hx\:inset-x-0{inset-inline:calc(var(--hx-spacing)*0)}.hx\:inset-y-0{inset-block:calc(var(--hx-spacing)*0)}.hx\:top-0{top:calc(var(--hx-spacing)*0)}.hx\:top-1\/2{top:50%}.hx\:top-8{top:calc(var(--hx-spacing)*8)}.hx\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:top-\[40\%\]{top:40%}.hx\:top-full{top:100%}.hx\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:bottom-0{bottom:calc(var(--hx-spacing)*0)}.hx\:left-0{left:calc(var(--hx-spacing)*0)}.hx\:left-\[24px\]{left:24px}.hx\:left-\[36px\]{left:36px}.hx\:z-20{z-index:20}.hx\:z-\[-1\]{z-index:-1}.hx\:order-last{order:9999}.hx\:m-\[11px\]{margin:11px}.hx\:mx-1{margin-inline:calc(var(--hx-spacing)*1)}.hx\:mx-4{margin-inline:calc(var(--hx-spacing)*4)}.hx\:mx-auto{margin-inline:auto}.hx\:my-1{margin-block:calc(var(--hx-spacing)*1)}.hx\:my-1\.5{margin-block:calc(var(--hx-spacing)*1.5)}.hx\:my-2{margin-block:calc(var(--hx-spacing)*2)}.hx\:-mt-20{margin-top:calc(var(--hx-spacing)*-20)}.hx\:mt-1{margin-top:calc(var(--hx-spacing)*1)}.hx\:mt-1\.5{margin-top:calc(var(--hx-spacing)*1.5)}.hx\:mt-2{margin-top:calc(var(--hx-spacing)*2)}.hx\:mt-4{margin-top:calc(var(--hx-spacing)*4)}.hx\:mt-5{margin-top:calc(var(--hx-spacing)*5)}.hx\:mt-6{margin-top:calc(var(--hx-spacing)*6)}.hx\:mt-8{margin-top:calc(var(--hx-spacing)*8)}.hx\:mt-12{margin-top:calc(var(--hx-spacing)*12)}.hx\:mt-16{margin-top:calc(var(--hx-spacing)*16)}.hx\:mt-auto{margin-top:auto}.hx\:-mr-2{margin-right:calc(var(--hx-spacing)*-2)}.hx\:mr-1{margin-right:calc(var(--hx-spacing)*1)}.hx\:mr-2{margin-right:calc(var(--hx-spacing)*2)}.hx\:-mb-0\.5{margin-bottom:calc(var(--hx-spacing)*-.5)}.hx\:mb-0{margin-bottom:calc(var(--hx-spacing)*0)}.hx\:mb-2{margin-bottom:calc(var(--hx-spacing)*2)}.hx\:mb-4{margin-bottom:calc(var(--hx-spacing)*4)}.hx\:mb-6{margin-bottom:calc(var(--hx-spacing)*6)}.hx\:mb-8{margin-bottom:calc(var(--hx-spacing)*8)}.hx\:mb-10{margin-bottom:calc(var(--hx-spacing)*10)}.hx\:mb-12{margin-bottom:calc(var(--hx-spacing)*12)}.hx\:mb-16{margin-bottom:calc(var(--hx-spacing)*16)}.hx\:-ml-2{margin-left:calc(var(--hx-spacing)*-2)}.hx\:ml-2{margin-left:calc(var(--hx-spacing)*2)}.hx\:ml-4{margin-left:calc(var(--hx-spacing)*4)}.hx\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hx\:block{display:block}.hx\:flex{display:flex}.hx\:grid{display:grid}.hx\:hidden{display:none}.hx\:inline{display:inline}.hx\:inline-block{display:inline-block}.hx\:inline-flex{display:inline-flex}.hx\:aspect-auto{aspect-ratio:auto}.hx\:size-4{width:calc(var(--hx-spacing)*4);height:calc(var(--hx-spacing)*4)}.hx\:h-0{height:calc(var(--hx-spacing)*0)}.hx\:h-2{height:calc(var(--hx-spacing)*2)}.hx\:h-3\.5{height:calc(var(--hx-spacing)*3.5)}.hx\:h-4{height:calc(var(--hx-spacing)*4)}.hx\:h-5{height:calc(var(--hx-spacing)*5)}.hx\:h-7{height:calc(var(--hx-spacing)*7)}.hx\:h-10{height:calc(var(--hx-spacing)*10)}.hx\:h-16{height:calc(var(--hx-spacing)*16)}.hx\:h-\[18px\]{height:18px}.hx\:h-full{height:100%}.hx\:h-px{height:1px}.hx\:max-h-\(--menu-height\){max-height:var(--menu-height)}.hx\:max-h-64{max-height:calc(var(--hx-spacing)*64)}.hx\:max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom))}.hx\:max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}.hx\:min-h-\[100px\]{min-height:100px}.hx\:min-h-\[calc\(100vh-var\(--navbar-height\)\)\]{min-height:calc(100vh - var(--navbar-height))}.hx\:w-2{width:calc(var(--hx-spacing)*2)}.hx\:w-3\.5{width:calc(var(--hx-spacing)*3.5)}.hx\:w-4{width:calc(var(--hx-spacing)*4)}.hx\:w-10{width:calc(var(--hx-spacing)*10)}.hx\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:w-\[110\%\]{width:110%}.hx\:w-\[180\%\]{width:180%}.hx\:w-full{width:100%}.hx\:w-max{width:max-content}.hx\:w-screen{width:100vw}.hx\:max-w-\[50\%\]{max-width:50%}.hx\:max-w-\[90rem\]{max-width:90rem}.hx\:max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\]{max-width:min(100vw - 2rem,100% + 20rem)}.hx\:max-w-full{max-width:100%}.hx\:max-w-none{max-width:none}.hx\:max-w-screen-xl{max-width:var(--hx-breakpoint-xl)}.hx\:min-w-0{min-width:calc(var(--hx-spacing)*0)}.hx\:min-w-\[18px\]{min-width:18px}.hx\:min-w-\[24px\]{min-width:24px}.hx\:min-w-full{min-width:100%}.hx\:shrink-0{flex-shrink:0}.hx\:grow{flex-grow:1}.hx\:origin-center{transform-origin:50%}.hx\:-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hx\:cursor-default{cursor:default}.hx\:cursor-pointer{cursor:pointer}.hx\:scroll-my-6{scroll-margin-block:calc(var(--hx-spacing)*6)}.hx\:scroll-py-6{scroll-padding-block:calc(var(--hx-spacing)*6)}.hx\:list-none{list-style-type:none}.hx\:appearance-none{appearance:none}.hx\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.hx\:flex-col{flex-direction:column}.hx\:flex-wrap{flex-wrap:wrap}.hx\:items-baseline{align-items:baseline}.hx\:items-center{align-items:center}.hx\:items-start{align-items:flex-start}.hx\:justify-between{justify-content:space-between}.hx\:justify-center{justify-content:center}.hx\:justify-end{justify-content:flex-end}.hx\:justify-start{justify-content:flex-start}.hx\:justify-items-start{justify-items:start}.hx\:gap-1{gap:calc(var(--hx-spacing)*1)}.hx\:gap-1\.5{gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-2{gap:calc(var(--hx-spacing)*2)}.hx\:gap-4{gap:calc(var(--hx-spacing)*4)}.hx\:gap-x-1\.5{column-gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-x-2{column-gap:calc(var(--hx-spacing)*2)}.hx\:gap-y-1{row-gap:calc(var(--hx-spacing)*1)}.hx\:gap-y-2{row-gap:calc(var(--hx-spacing)*2)}.hx\:overflow-auto{overflow:auto}.hx\:overflow-hidden{overflow:hidden}.hx\:overflow-x-auto{overflow-x:auto}.hx\:overflow-x-hidden{overflow-x:hidden}.hx\:overflow-y-auto{overflow-y:auto}.hx\:overflow-y-hidden{overflow-y:hidden}.hx\:overscroll-contain{overscroll-behavior:contain}.hx\:overscroll-x-contain{overscroll-behavior-x:contain}.hx\:rounded-3xl{border-radius:var(--hx-radius-3xl)}.hx\:rounded-full{border-radius:340282e33px}.hx\:rounded-lg{border-radius:var(--hx-radius-lg)}.hx\:rounded-md{border-radius:var(--hx-radius-md)}.hx\:rounded-sm{border-radius:var(--hx-radius-sm)}.hx\:rounded-xl{border-radius:var(--hx-radius-xl)}.hx\:rounded-xs{border-radius:var(--hx-radius-xs)}.hx\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.hx\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:border-0{border-style:var(--tw-border-style);border-width:0}.hx\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.hx\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hx\:border-amber-200{border-color:var(--hx-color-amber-200)}.hx\:border-black\/5{border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:border-black\/5{border-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:border-blue-200{border-color:var(--hx-color-blue-200)}.hx\:border-gray-200{border-color:var(--hx-color-gray-200)}.hx\:border-gray-500{border-color:var(--hx-color-gray-500)}.hx\:border-green-200{border-color:var(--hx-color-green-200)}.hx\:border-indigo-200{border-color:var(--hx-color-indigo-200)}.hx\:border-orange-100{border-color:var(--hx-color-orange-100)}.hx\:border-purple-200{border-color:var(--hx-color-purple-200)}.hx\:border-red-200{border-color:var(--hx-color-red-200)}.hx\:border-transparent{border-color:#0000}.hx\:border-yellow-100{border-color:var(--hx-color-yellow-100)}.hx\:bg-amber-100{background-color:var(--hx-color-amber-100)}.hx\:bg-black\/\[\.05\]{background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-black\/\[\.05\]{background-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:bg-blue-100{background-color:var(--hx-color-blue-100)}.hx\:bg-gray-100{background-color:var(--hx-color-gray-100)}.hx\:bg-gray-200{background-color:var(--hx-color-gray-200)}.hx\:bg-green-100{background-color:var(--hx-color-green-100)}.hx\:bg-indigo-100{background-color:var(--hx-color-indigo-100)}.hx\:bg-neutral-50{background-color:var(--hx-color-neutral-50)}.hx\:bg-neutral-900{background-color:var(--hx-color-neutral-900)}.hx\:bg-orange-50{background-color:var(--hx-color-orange-50)}.hx\:bg-primary-100{background-color:var(--hx-color-primary-100)}.hx\:bg-primary-400{background-color:var(--hx-color-primary-400)}.hx\:bg-primary-600{background-color:var(--hx-color-primary-600)}.hx\:bg-primary-700\/5{background-color:var(--hx-color-primary-700)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-primary-700\/5{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hx\:bg-purple-100{background-color:var(--hx-color-purple-100)}.hx\:bg-red-100{background-color:var(--hx-color-red-100)}.hx\:bg-transparent{background-color:#0000}.hx\:bg-white{background-color:var(--hx-color-white)}.hx\:bg-yellow-50{background-color:var(--hx-color-yellow-50)}.hx\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hx\:from-gray-900{--tw-gradient-from:var(--hx-color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:to-gray-600{--tw-gradient-to:var(--hx-color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.hx\:p-0{padding:calc(var(--hx-spacing)*0)}.hx\:p-0\.5{padding:calc(var(--hx-spacing)*.5)}.hx\:p-1{padding:calc(var(--hx-spacing)*1)}.hx\:p-1\.5{padding:calc(var(--hx-spacing)*1.5)}.hx\:p-2{padding:calc(var(--hx-spacing)*2)}.hx\:p-4{padding:calc(var(--hx-spacing)*4)}.hx\:p-6{padding:calc(var(--hx-spacing)*6)}.hx\:px-1\.5{padding-inline:calc(var(--hx-spacing)*1.5)}.hx\:px-2{padding-inline:calc(var(--hx-spacing)*2)}.hx\:px-2\.5{padding-inline:calc(var(--hx-spacing)*2.5)}.hx\:px-3{padding-inline:calc(var(--hx-spacing)*3)}.hx\:px-4{padding-inline:calc(var(--hx-spacing)*4)}.hx\:px-6{padding-inline:calc(var(--hx-spacing)*6)}.hx\:px-8{padding-inline:calc(var(--hx-spacing)*8)}.hx\:py-1{padding-block:calc(var(--hx-spacing)*1)}.hx\:py-1\.5{padding-block:calc(var(--hx-spacing)*1.5)}.hx\:py-2{padding-block:calc(var(--hx-spacing)*2)}.hx\:py-2\.5{padding-block:calc(var(--hx-spacing)*2.5)}.hx\:py-3{padding-block:calc(var(--hx-spacing)*3)}.hx\:py-4{padding-block:calc(var(--hx-spacing)*4)}.hx\:py-12{padding-block:calc(var(--hx-spacing)*12)}.hx\:pt-4{padding-top:calc(var(--hx-spacing)*4)}.hx\:pt-6{padding-top:calc(var(--hx-spacing)*6)}.hx\:pt-8{padding-top:calc(var(--hx-spacing)*8)}.hx\:pr-2{padding-right:calc(var(--hx-spacing)*2)}.hx\:pr-4{padding-right:calc(var(--hx-spacing)*4)}.hx\:pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-left),1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.hx\:pb-8{padding-bottom:calc(var(--hx-spacing)*8)}.hx\:pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.hx\:pb-px{padding-bottom:1px}.hx\:pl-6{padding-left:calc(var(--hx-spacing)*6)}.hx\:pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.hx\:text-center{text-align:center}.hx\:text-left{text-align:left}.hx\:align-\[-2\.5px\]{vertical-align:-2.5px}.hx\:align-baseline{vertical-align:baseline}.hx\:align-middle{vertical-align:middle}.hx\:align-text-bottom{vertical-align:text-bottom}.hx\:font-mono{font-family:var(--hx-font-mono)}.hx\:text-2xl{font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height))}.hx\:text-4xl{font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height))}.hx\:text-base{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height))}.hx\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}.hx\:text-xs{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height))}.hx\:text-\[\.65rem\]{font-size:.65rem}.hx\:text-\[10px\]{font-size:10px}.hx\:leading-5{--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5)}.hx\:leading-6{--tw-leading:calc(var(--hx-spacing)*6);line-height:calc(var(--hx-spacing)*6)}.hx\:leading-7{--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hx\:leading-none{--tw-leading:1;line-height:1}.hx\:leading-tight{--tw-leading:var(--hx-leading-tight);line-height:var(--hx-leading-tight)}.hx\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:font-extrabold{--tw-font-weight:var(--hx-font-weight-extrabold);font-weight:var(--hx-font-weight-extrabold)}.hx\:font-medium{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:font-normal{--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal)}.hx\:font-semibold{--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hx\:tracking-tight{--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight)}.hx\:tracking-tighter{--tw-tracking:var(--hx-tracking-tighter);letter-spacing:var(--hx-tracking-tighter)}.hx\:break-words,.hx\:wrap-break-word{overflow-wrap:break-word}.hx\:text-ellipsis{text-overflow:ellipsis}.hx\:whitespace-nowrap{white-space:nowrap}.hx\:text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\]{color:hsl(var(--primary-hue),100%,50%)}.hx\:text-amber-900{color:var(--hx-color-amber-900)}.hx\:text-blue-900{color:var(--hx-color-blue-900)}.hx\:text-current{color:currentColor}.hx\:text-gray-100{color:var(--hx-color-gray-100)}.hx\:text-gray-500{color:var(--hx-color-gray-500)}.hx\:text-gray-600{color:var(--hx-color-gray-600)}.hx\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:text-green-900{color:var(--hx-color-green-900)}.hx\:text-indigo-900{color:var(--hx-color-indigo-900)}.hx\:text-orange-800{color:var(--hx-color-orange-800)}.hx\:text-primary-800{color:var(--hx-color-primary-800)}.hx\:text-purple-900{color:var(--hx-color-purple-900)}.hx\:text-red-900{color:var(--hx-color-red-900)}.hx\:text-slate-50{color:var(--hx-color-slate-50)}.hx\:text-slate-900{color:var(--hx-color-slate-900)}.hx\:text-transparent{color:#0000}.hx\:text-white{color:var(--hx-color-white)}.hx\:text-yellow-900{color:var(--hx-color-yellow-900)}.hx\:capitalize{text-transform:capitalize}.hx\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.hx\:no-underline{text-decoration-line:none}.hx\:underline{text-decoration-line:underline}.hx\:decoration-from-font{text-decoration-thickness:from-font}.hx\:underline-offset-2{text-underline-offset:2px}.hx\:opacity-0{opacity:0}.hx\:opacity-50{opacity:.5}.hx\:opacity-80{opacity:.8}.hx\:shadow-\[0_-12px_16px_\#fff\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,white);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\]{--tw-shadow:0 2px 4px var(--tw-shadow-color,#00000005),0 1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hextra-focus-visible:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}.hx\:hextra-focus-visible:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}.hx\:hextra-focus-visible-inset:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.hx\:hextra-focus-visible-inset:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800)}.hx\:shadow-gray-100{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}.hx\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:duration-75{--tw-duration:75ms;transition-duration:75ms}.hx\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hx\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hx\:ease-in{--tw-ease:var(--hx-ease-in);transition-timing-function:var(--hx-ease-in)}.hx\:ease-in-out{--tw-ease:var(--hx-ease-in-out);transition-timing-function:var(--hx-ease-in-out)}.hx\:outline-none{--tw-outline-style:none;outline-style:none}.hx\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hx\:group-hover\:text-gray-900:is(:where(.hx\:group):hover *){color:var(--hx-color-gray-900)}.hx\:group-hover\:underline:is(:where(.hx\:group):hover *){text-decoration-line:underline}.hx\:group-hover\/code\:opacity-100:is(:where(.hx\:group\/code):hover *){opacity:1}}.hx\:group-data-\[active\=true\]\:text-primary-800:is(:where(.hx\:group)[data-active=true] *){color:var(--hx-color-primary-800)}.hx\:group-data-\[theme\=dark\]\:hidden:is(:where(.hx\:group)[data-theme=dark] *),.hx\:group-data-\[theme\=light\]\:hidden:is(:where(.hx\:group)[data-theme=light] *),.hx\:group-data-\[theme\=system\]\:hidden:is(:where(.hx\:group)[data-theme=system] *){display:none}.hx\:group-\[\.copied\]\/copybtn\:block:is(:where(.hx\:group\/copybtn).copied *){display:block}.hx\:group-\[\.copied\]\/copybtn\:hidden:is(:where(.hx\:group\/copybtn).copied *){display:none}.hx\:placeholder\:text-gray-500::placeholder{color:var(--hx-color-gray-500)}.hx\:before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.hx\:before\:absolute:before{content:var(--tw-content);position:absolute}.hx\:before\:inset-0:before{content:var(--tw-content);inset:calc(var(--hx-spacing)*0)}.hx\:before\:inset-y-1:before{content:var(--tw-content);inset-block:calc(var(--hx-spacing)*1)}.hx\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--hx-spacing)*1)}.hx\:before\:inline-block:before{content:var(--tw-content);display:inline-block}.hx\:before\:w-px:before{content:var(--tw-content);width:1px}.hx\:before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--hx-color-gray-200)}.hx\:before\:opacity-25:before{content:var(--tw-content);opacity:.25}.hx\:before\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\'\#\'\]:before{--tw-content:"#";content:var(--tw-content)}.hx\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.hx\:group-open\:before\:rotate-90:is(:where(.hx\:group):is([open],:popover-open,:open) *):before{content:var(--tw-content);rotate:90deg}.hx\:first\:mt-0:first-child{margin-top:calc(var(--hx-spacing)*0)}.hx\:last-of-type\:mb-0:last-of-type{margin-bottom:calc(var(--hx-spacing)*0)}@media(hover:hover){.hx\:hover\:border-gray-200:hover{border-color:var(--hx-color-gray-200)}.hx\:hover\:border-gray-300:hover{border-color:var(--hx-color-gray-300)}.hx\:hover\:border-gray-400:hover{border-color:var(--hx-color-gray-400)}.hx\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}.hx\:hover\:bg-gray-100:hover{background-color:var(--hx-color-gray-100)}.hx\:hover\:bg-gray-800\/5:hover{background-color:var(--hx-color-gray-800)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:bg-gray-800\/5:hover{background-color:color-mix(in oklab,var(--hx-color-gray-800)5%,transparent)}}.hx\:hover\:bg-primary-700:hover{background-color:var(--hx-color-primary-700)}.hx\:hover\:bg-slate-50:hover{background-color:var(--hx-color-slate-50)}.hx\:hover\:text-black:hover{color:var(--hx-color-black)}.hx\:hover\:text-gray-700:hover{color:var(--hx-color-gray-700)}.hx\:hover\:text-gray-800:hover{color:var(--hx-color-gray-800)}.hx\:hover\:text-gray-900:hover{color:var(--hx-color-gray-900)}.hx\:hover\:text-primary-600:hover{color:var(--hx-color-primary-600)}.hx\:hover\:opacity-60:hover{opacity:.6}.hx\:hover\:opacity-75:hover{opacity:.75}.hx\:hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}}.hx\:focus-visible\:not-sr-only:focus-visible{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.hx\:focus-visible\:fixed:focus-visible{position:fixed}.hx\:focus-visible\:top-2:focus-visible{top:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:left-2:focus-visible{left:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:z-50:focus-visible{z-index:50}.hx\:focus-visible\:rounded-md:focus-visible{border-radius:var(--hx-radius-md)}.hx\:focus-visible\:bg-primary-500:focus-visible{background-color:var(--hx-color-primary-500)}.hx\:focus-visible\:bg-white:focus-visible{background-color:var(--hx-color-white)}.hx\:focus-visible\:px-4:focus-visible{padding-inline:calc(var(--hx-spacing)*4)}.hx\:focus-visible\:py-2:focus-visible{padding-block:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:text-sm:focus-visible{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:focus-visible\:font-medium:focus-visible{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:focus-visible\:text-white:focus-visible{color:var(--hx-color-white)}.hx\:active\:bg-gray-400\/20:active{background-color:var(--hx-color-gray-400)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:bg-gray-400\/20:active{background-color:color-mix(in oklab,var(--hx-color-gray-400)20%,transparent)}}.hx\:active\:opacity-50:active{opacity:.5}.hx\:active\:shadow-sm:active{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:active\:shadow-gray-200:active{--tw-shadow-color:var(--hx-color-gray-200)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:shadow-gray-200:active{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-200)var(--tw-shadow-alpha),transparent)}}.hx\:data-\[state\=closed\]\:hidden[data-state=closed],.hx\:data-\[state\=open\]\:hidden[data-state=open]{display:none}.hx\:data-\[state\=selected\]\:block[data-state=selected]{display:block}.hx\:data-\[state\=selected\]\:border-primary-500[data-state=selected]{border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:text-primary-600[data-state=selected]{color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:contrast-more\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:contrast-more\:border-current{border-color:initial}.hx\:contrast-more\:border-gray-800{border-color:var(--hx-color-gray-800)}.hx\:contrast-more\:border-gray-900{border-color:var(--hx-color-gray-900)}.hx\:contrast-more\:border-neutral-400{border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:border-primary-500{border-color:var(--hx-color-primary-500)}.hx\:contrast-more\:border-transparent{border-color:#0000}.hx\:contrast-more\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:contrast-more\:text-current{color:currentColor}.hx\:contrast-more\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:contrast-more\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:contrast-more\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:contrast-more\:underline{text-decoration-line:underline}.hx\:contrast-more\:shadow-\[0_0_0_1px_\#000\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}}}@media not all and (min-width:80rem){.hx\:max-xl\:hidden{display:none}}@media not all and (min-width:64rem){.hx\:max-lg\:min-h-\[340px\]{min-height:340px}}@media not all and (min-width:48rem){.hx\:max-md\:sticky{position:sticky}.hx\:max-md\:hidden{display:none}.hx\:max-md\:min-h-\[340px\]{min-height:340px}.hx\:max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\]{transform:translateY(-100%)}.hx\:max-md\:\[transform\:translate3d\(0\,0\,0\)\]{transform:translate(0)}}@media not all and (min-width:40rem){.hx\:max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(min-width:40rem){.hx\:sm\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:sm\:left-auto{left:auto}.hx\:sm\:block{display:block}.hx\:sm\:flex{display:flex}.hx\:sm\:w-\[110\%\]{width:110%}.hx\:sm\:flex-row{flex-direction:row}.hx\:sm\:items-center{align-items:center}.hx\:sm\:items-start{align-items:flex-start}.hx\:sm\:justify-between{justify-content:space-between}.hx\:sm\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}@media not all and (min-width:64rem){.hx\:sm\:max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@media(min-width:48rem){.hx\:md\:sticky{position:sticky}.hx\:md\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:md\:mr-0{margin-right:calc(var(--hx-spacing)*0)}.hx\:md\:hidden{display:none}.hx\:md\:inline-block{display:inline-block}.hx\:md\:inline-flex{display:inline-flex}.hx\:md\:aspect-\[1\.1\/1\]{aspect-ratio:1.1}.hx\:md\:h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\]{height:calc(100vh - var(--navbar-height) - var(--menu-height))}.hx\:md\:max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px)}.hx\:md\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:md\:shrink-0{flex-shrink:0}.hx\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hx\:md\:justify-start{justify-content:flex-start}.hx\:md\:self-start{align-self:flex-start}.hx\:md\:overflow-auto{overflow:auto}.hx\:md\:px-12{padding-inline:calc(var(--hx-spacing)*12)}.hx\:md\:pt-12{padding-top:calc(var(--hx-spacing)*12)}.hx\:md\:text-3xl{font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height))}.hx\:md\:text-5xl{font-size:var(--hx-text-5xl);line-height:var(--tw-leading,var(--hx-text-5xl--line-height))}.hx\:md\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:md\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}}@media(min-width:64rem){.hx\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:80rem){.hx\:xl\:block{display:block}.hx\:xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.hx\:ltr\:right-1\.5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*1.5)}.hx\:ltr\:right-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*2)}.hx\:ltr\:right-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*3)}.hx\:ltr\:-mr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:calc(var(--hx-spacing)*-4)}.hx\:ltr\:mr-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:auto}.hx\:ltr\:ml-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.hx\:ltr\:ml-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:ml-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:auto}.hx\:ltr\:rotate-180:where(:dir(ltr),[dir=ltr],[dir=ltr] *){rotate:180deg}.hx\:ltr\:rounded-l-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:ltr\:rounded-r-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:ltr\:border-l:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);border-left-width:1px}.hx\:ltr\:pr-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*0)}.hx\:ltr\:pr-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*1)}.hx\:ltr\:pr-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*2)}.hx\:ltr\:pr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:ltr\:pr-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:ltr\:pr-9:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*9)}.hx\:ltr\:pl-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:pl-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:ltr\:pl-5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*5)}.hx\:ltr\:pl-6:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*6)}.hx\:ltr\:pl-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:ltr\:pl-12:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*12)}.hx\:ltr\:pl-16:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*16)}.hx\:ltr\:text-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){text-align:right}.hx\:ltr\:before\:left-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);left:calc(var(--hx-spacing)*0)}@media(min-width:48rem){.hx\:ltr\:md\:left-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){left:auto}}.hx\:rtl\:left-1\.5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*1.5)}.hx\:rtl\:left-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*2)}.hx\:rtl\:left-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}.hx\:rtl\:mr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.hx\:rtl\:-ml-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--hx-spacing)*-4)}.hx\:rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.hx\:rtl\:-rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-180deg}.hx\:rtl\:rotate-270:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:270deg}.hx\:rtl\:rounded-l-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:rtl\:rounded-r-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:rtl\:border-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);border-right-width:1px}.hx\:rtl\:pr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:pr-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:rtl\:pr-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*5)}.hx\:rtl\:pr-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*6)}.hx\:rtl\:pr-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:rtl\:pr-12:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*12)}.hx\:rtl\:pr-16:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*16)}.hx\:rtl\:pl-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*0)}.hx\:rtl\:pl-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*1)}.hx\:rtl\:pl-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*2)}.hx\:rtl\:pl-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:rtl\:pl-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:rtl\:pl-9:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*9)}.hx\:rtl\:text-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.hx\:rtl\:before\:right-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);right:calc(var(--hx-spacing)*0)}.hx\:rtl\:before\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);rotate:180deg}@media(min-width:48rem){.hx\:rtl\:md\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}}.hx\:dark\:block:where(.dark,.dark *){display:block}.hx\:dark\:hidden:where(.dark,.dark *){display:none}.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:var(--hx-color-amber-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-amber-200)30%,transparent)}}.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:var(--hx-color-blue-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-blue-200)30%,transparent)}}.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-gray-100)20%,transparent)}}.hx\:dark\:border-gray-400:where(.dark,.dark *){border-color:var(--hx-color-gray-400)}.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:var(--hx-color-green-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-green-200)30%,transparent)}}.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:var(--hx-color-indigo-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-indigo-200)30%,transparent)}}.hx\:dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--hx-color-neutral-700)}.hx\:dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-orange-400)30%,transparent)}}.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:var(--hx-color-purple-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-purple-200)30%,transparent)}}.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:var(--hx-color-red-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-red-200)30%,transparent)}}.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:var(--hx-color-yellow-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-yellow-200)30%,transparent)}}.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:var(--hx-color-amber-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-amber-900)30%,transparent)}}.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:var(--hx-color-blue-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-blue-900)30%,transparent)}}.hx\:dark\:bg-dark:where(.dark,.dark *),.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:var(--hx-color-dark)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)50%,transparent)}}.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:var(--hx-color-gray-50)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-50)10%,transparent)}}.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:var(--hx-color-green-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-green-900)30%,transparent)}}.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:var(--hx-color-indigo-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-indigo-900)30%,transparent)}}.hx\:dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--hx-color-neutral-700)}.hx\:dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--hx-color-neutral-800)}.hx\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--hx-color-neutral-900)}.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-orange-400)20%,transparent)}}.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-400)10%,transparent)}}.hx\:dark\:bg-primary-600:where(.dark,.dark *){background-color:var(--hx-color-primary-600)}.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:var(--hx-color-purple-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-purple-900)30%,transparent)}}.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:var(--hx-color-red-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-red-900)30%,transparent)}}.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:var(--hx-color-yellow-700)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-yellow-700)30%,transparent)}}.hx\:dark\:from-gray-100:where(.dark,.dark *){--tw-gradient-from:var(--hx-color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:to-gray-400:where(.dark,.dark *){--tw-gradient-to:var(--hx-color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:text-amber-200:where(.dark,.dark *){color:var(--hx-color-amber-200)}.hx\:dark\:text-blue-200:where(.dark,.dark *){color:var(--hx-color-blue-200)}.hx\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:dark\:text-gray-200:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hx\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:dark\:text-gray-400:where(.dark,.dark *){color:var(--hx-color-gray-400)}.hx\:dark\:text-green-200:where(.dark,.dark *){color:var(--hx-color-green-200)}.hx\:dark\:text-indigo-200:where(.dark,.dark *){color:var(--hx-color-indigo-200)}.hx\:dark\:text-neutral-200:where(.dark,.dark *){color:var(--hx-color-neutral-200)}.hx\:dark\:text-neutral-400:where(.dark,.dark *){color:var(--hx-color-neutral-400)}.hx\:dark\:text-orange-300:where(.dark,.dark *){color:var(--hx-color-orange-300)}.hx\:dark\:text-primary-600:where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:text-purple-200:where(.dark,.dark *){color:var(--hx-color-purple-200)}.hx\:dark\:text-red-200:where(.dark,.dark *){color:var(--hx-color-red-200)}.hx\:dark\:text-slate-100:where(.dark,.dark *){color:var(--hx-color-slate-100)}.hx\:dark\:text-white:where(.dark,.dark *){color:var(--hx-color-white)}.hx\:dark\:text-yellow-200:where(.dark,.dark *){color:var(--hx-color-yellow-200)}.hx\:dark\:opacity-80:where(.dark,.dark *){opacity:.8}.hx\:dark\:shadow-\[0_-1px_0_rgba\(255\,255\,255\,\.1\)_inset\]:where(.dark,.dark *){--tw-shadow:0 -1px 0 var(--tw-shadow-color,#ffffff1a)inset;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-\[0_-12px_16px_\#111\]:where(.dark,.dark *){--tw-shadow:0 -12px 16px var(--tw-shadow-color,#111);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:dark\:group-hover\:text-gray-50:where(.dark,.dark *):is(:where(.hx\:group):hover *){color:var(--hx-color-gray-50)}}.hx\:group-data-\[active\=true\]\:dark\:text-primary-600:is(:where(.hx\:group)[data-active=true] *):where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:placeholder\:text-gray-400:where(.dark,.dark *)::placeholder{color:var(--hx-color-gray-400)}.hx\:dark\:before\:bg-neutral-800:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hx\:dark\:before\:invert:where(.dark,.dark *):before{content:var(--tw-content);--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.hx\:dark\:hover\:border-gray-100:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-100)}.hx\:dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-600)}.hx\:dark\:hover\:border-neutral-500:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-500)}.hx\:dark\:hover\:border-neutral-700:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:border-neutral-800:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-gray-100)5%,transparent)}}.hx\:dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:bg-neutral-800:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-neutral-900:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-900)}.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-primary-100)5%,transparent)}}.hx\:dark\:hover\:bg-primary-700:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-700)}.hx\:dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--hx-color-gray-50)}.hx\:dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--hx-color-gray-100)}.hx\:dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--hx-color-gray-200)}.hx\:dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--hx-color-gray-300)}.hx\:dark\:hover\:text-neutral-50:where(.dark,.dark *):hover{color:var(--hx-color-neutral-50)}.hx\:dark\:hover\:text-primary-400:where(.dark,.dark *):hover{color:var(--hx-color-primary-400)}.hx\:dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--hx-color-white)}.hx\:dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.hx\:dark\:focus-visible\:bg-dark:where(.dark,.dark *):focus-visible{background-color:var(--hx-color-dark)}.hx\:data-\[state\=selected\]\:dark\:border-primary-500[data-state=selected]:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:dark\:text-primary-600[data-state=selected]:where(.dark,.dark *){color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:dark\:border-current:where(.dark,.dark *){border-color:initial}.hx\:contrast-more\:dark\:border-gray-50:where(.dark,.dark *){border-color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:border-primary-500:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:dark\:contrast-more\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:text-current:where(.dark,.dark *){color:currentColor}.hx\:contrast-more\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:contrast-more\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:contrast-more\:dark\:shadow-\[0_0_0_1px_\#fff\]:where(.dark,.dark *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:dark\:hover\:border-gray-50:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-50)}}}@media print{.hx\:print\:\[display\:none\],.hx\:print\:hidden{display:none}.hx\:print\:bg-transparent{background-color:#0000}}}html{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--hx-color-white);width:100%}body:where(.dark,.dark *){background-color:var(--hx-color-dark);color:var(--hx-color-gray-100)}:root{--primary-hue:212deg;--primary-saturation:100%;--primary-lightness:50%;--navbar-height:4rem;--hextra-banner-height:2rem;--menu-height:3.75rem}.dark{--primary-hue:204deg;--primary-saturation:100%;--primary-lightness:50%}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*2);font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height));--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*10);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-neutral-200)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-neutral-200)70%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:calc(var(--hx-spacing)*1);font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--hx-color-neutral-400)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)10%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--hx-color-primary-600);text-decoration-line:underline;text-decoration-thickness:from-font}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);border-color:var(--hx-color-gray-300);color:var(--hx-color-gray-700);font-style:italic}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);padding-left:calc(var(--hx-spacing)*6);border-left-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);padding-right:calc(var(--hx-spacing)*6);border-right-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-gray-700);color:var(--hx-color-gray-400)}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--hx-spacing)*4);--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*6);border-collapse:collapse;width:100%;padding:calc(var(--hx-spacing)*0);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);display:block;overflow-x:auto}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead{background-color:var(--hx-color-gray-50)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:var(--hx-color-gray-600)}@supports(color:color-mix(in lab,red,red)){.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-600)20%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr{margin:calc(var(--hx-spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:decimal}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:disc}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):has(li input[type=checkbox]){list-style-type:none}.content :where(ul,ol)>li>:where(ul,ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*0)}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:#0000;border-radius:0}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:#0000}.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-inline:auto;margin-block:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-md)}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption{margin-top:calc(var(--hx-spacing)*2);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-500);display:block}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:where(.dark,.dark *){color:var(--hx-color-gray-400)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt{margin-top:calc(var(--hx-spacing)*6);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd{margin-block:calc(var(--hx-spacing)*2);padding-inline-start:calc(var(--hx-spacing)*6)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*10);border-color:var(--hx-color-gray-200)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .footnotes{margin-top:calc(var(--hx-spacing)*12);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.content .footnotes hr{border-color:var(--hx-color-gray-200)}.content .footnotes hr:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .subheading-anchor{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.content .subheading-anchor:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.content .subheading-anchor:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}span:target+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor),.content .subheading-anchor:focus-visible{opacity:1}span+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor){text-decoration-line:none!important}.content .subheading-anchor:after{content:var(--tw-content);color:var(--hx-color-gray-300)}.content .subheading-anchor:where(.dark,.dark *):after{content:var(--tw-content);color:var(--hx-color-neutral-700)}.content .subheading-anchor:after{padding-inline:calc(var(--hx-spacing)*1);--tw-content:"#";content:var(--tw-content)}span:target+:is(){color:var(--hx-color-gray-400)}span:target+:is():where(.dark,.dark *){color:var(--hx-color-neutral-500)}article details>summary::-webkit-details-marker{display:none}article details>summary:before{vertical-align:-4px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx:h-5 hx:w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E");width:1.2em;height:1.2em;padding:0 .6em}:lang(fa) ol{list-style-type:persian}.highlight .chroma .err{color:#a61717;background-color:#e3d2d2}.highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.highlight .chroma .line{display:flex}.highlight .chroma .k,.highlight .chroma .kc,.highlight .chroma .kd,.highlight .chroma .kn,.highlight .chroma .kp,.highlight .chroma .kr{color:#000;font-weight:700}.highlight .chroma .kt{color:#458;font-weight:700}.highlight .chroma .na{color:teal}.highlight .chroma .nb{color:#0086b3}.highlight .chroma .bp{color:#999}.highlight .chroma .nc{color:#458;font-weight:700}.highlight .chroma .no{color:teal}.highlight .chroma .nd{color:#3c5d5d;font-weight:700}.highlight .chroma .ni{color:purple}.highlight .chroma .ne,.highlight .chroma .nf,.highlight .chroma .nl{color:#900;font-weight:700}.highlight .chroma .nn{color:#555}.highlight .chroma .nt{color:navy}.highlight .chroma .nv,.highlight .chroma .vc,.highlight .chroma .vg,.highlight .chroma .vi{color:teal}.highlight .chroma .s,.highlight .chroma .sa,.highlight .chroma .sb,.highlight .chroma .sc,.highlight .chroma .dl,.highlight .chroma .sd,.highlight .chroma .s2,.highlight .chroma .se,.highlight .chroma .sh,.highlight .chroma .si,.highlight .chroma .sx{color:#d14}.highlight .chroma .sr{color:#009926}.highlight .chroma .s1{color:#d14}.highlight .chroma .ss{color:#990073}.highlight .chroma .m,.highlight .chroma .mb,.highlight .chroma .mf,.highlight .chroma .mh,.highlight .chroma .mi,.highlight .chroma .il,.highlight .chroma .mo{color:#099}.highlight .chroma .o,.highlight .chroma .ow{color:#000;font-weight:700}.highlight .chroma .c,.highlight .chroma .ch,.highlight .chroma .cm,.highlight .chroma .c1{color:#998;font-style:italic}.highlight .chroma .cs,.highlight .chroma .cp,.highlight .chroma .cpf{color:#999;font-style:italic;font-weight:700}.highlight .chroma .gd{color:#000;background-color:#fdd}.highlight .chroma .ge{color:#000;font-style:italic}.highlight .chroma .gr{color:#a00}.highlight .chroma .gh{color:#999}.highlight .chroma .gi{color:#000;background-color:#dfd}.highlight .chroma .go{color:#888}.highlight .chroma .gp{color:#555}.highlight .chroma .gs{font-weight:700}.highlight .chroma .gu{color:#aaa}.highlight .chroma .gt{color:#a00}.highlight .chroma .gl{text-decoration:underline}.highlight .chroma .w{color:#bbb}.dark .highlight .chroma .err{color:#f85149}.dark .highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.dark .highlight .chroma .line{display:flex}.dark .highlight .chroma .k{color:#ff7b72}.dark .highlight .chroma .kc{color:#79c0ff}.dark .highlight .chroma .kd,.dark .highlight .chroma .kn{color:#ff7b72}.dark .highlight .chroma .kp{color:#79c0ff}.dark .highlight .chroma .kr,.dark .highlight .chroma .kt{color:#ff7b72}.dark .highlight .chroma .nc{color:#f0883e;font-weight:700}.dark .highlight .chroma .no{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nd{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .ni{color:#ffa657}.dark .highlight .chroma .ne{color:#f0883e;font-weight:700}.dark .highlight .chroma .nf{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .nl{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nn{color:#ff7b72}.dark .highlight .chroma .py{color:#79c0ff}.dark .highlight .chroma .nt{color:#7ee787}.dark .highlight .chroma .nv{color:#79c0ff}.dark .highlight .chroma .l{color:#a5d6ff}.dark .highlight .chroma .ld{color:#79c0ff}.dark .highlight .chroma .s{color:#a5d6ff}.dark .highlight .chroma .sa{color:#79c0ff}.dark .highlight .chroma .sb,.dark .highlight .chroma .sc{color:#a5d6ff}.dark .highlight .chroma .dl{color:#79c0ff}.dark .highlight .chroma .sd,.dark .highlight .chroma .s2{color:#a5d6ff}.dark .highlight .chroma .se,.dark .highlight .chroma .sh{color:#79c0ff}.dark .highlight .chroma .si,.dark .highlight .chroma .sx{color:#a5d6ff}.dark .highlight .chroma .sr{color:#79c0ff}.dark .highlight .chroma .s1,.dark .highlight .chroma .ss,.dark .highlight .chroma .m,.dark .highlight .chroma .mb,.dark .highlight .chroma .mf,.dark .highlight .chroma .mh,.dark .highlight .chroma .mi,.dark .highlight .chroma .il,.dark .highlight .chroma .mo{color:#a5d6ff}.dark .highlight .chroma .o,.dark .highlight .chroma .ow{color:#ff7b72;font-weight:700}.dark .highlight .chroma .c,.dark .highlight .chroma .ch,.dark .highlight .chroma .cm,.dark .highlight .chroma .c1{color:#8b949e;font-style:italic}.dark .highlight .chroma .cs,.dark .highlight .chroma .cp,.dark .highlight .chroma .cpf{color:#8b949e;font-style:italic;font-weight:700}.dark .highlight .chroma .gd{color:#ffa198;background-color:#490202}.dark .highlight .chroma .ge{color:inherit;font-style:italic}.dark .highlight .chroma .gr{color:#ffa198}.dark .highlight .chroma .gh{color:#79c0ff;font-weight:700}.dark .highlight .chroma .gi{color:#56d364;background-color:#0f5323}.dark .highlight .chroma .go,.dark .highlight .chroma .gp{color:#8b949e}.dark .highlight .chroma .gs{font-weight:700}.dark .highlight .chroma .gu{color:#79c0ff}.dark .highlight .chroma .gt{color:#ff7b72}.dark .highlight .chroma .gl{text-decoration:underline}.dark .highlight .chroma .w{color:#6e7681}.hextra-code-block{--tw-leading:calc(var(--hx-spacing)*5);font-size:.9em;line-height:calc(var(--hx-spacing)*5)}.hextra-code-block pre{background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block pre{--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.hextra-code-block pre{border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.hextra-code-block pre{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.hextra-code-block pre:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.hextra-code-block pre:where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.hextra-code-block .hextra-code-filename{top:calc(var(--hx-spacing)*0);z-index:1;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:var(--hx-radius-xl);border-top-right-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);width:100%;position:absolute;overflow:hidden}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block .hextra-code-filename{padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*2);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));color:var(--hx-color-gray-700)}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hextra-code-block .hextra-code-filename+pre:not(.lntable pre){padding-top:calc(var(--hx-spacing)*12)}.hextra-code-block pre:not(.lntable pre){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*4)}.hextra-code-block div:nth-of-type(2) pre{padding-top:calc(var(--hx-spacing)*12);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .lntable{margin:calc(var(--hx-spacing)*0);border-radius:var(--hx-radius-xl);width:auto;display:block;overflow:auto}.chroma .lntable pre{padding-top:calc(var(--hx-spacing)*4);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line){min-width:2.6rem;padding-right:calc(var(--hx-spacing)*4);padding-left:calc(var(--hx-spacing)*4);color:var(--hx-color-neutral-600)}:is(.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line)):where(.dark,.dark *){color:var(--hx-color-neutral-300)}.chroma .lntd{padding:calc(var(--hx-spacing)*0);vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{background-color:var(--hx-color-primary-800);width:100%;display:block}@supports(color:color-mix(in lab,red,red)){.chroma .hl{background-color:color-mix(in oklab,var(--hx-color-primary-800)10%,transparent)}}.hextra-cards{grid-template-columns:repeat(auto-fill,minmax(max(250px,calc((100% - 1rem*2)/var(--hextra-cards-grid-cols))),1fr))}.hextra-card{position:relative}.hextra-card img{-webkit-user-select:none;user-select:none}.hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card .hextra-card-icon svg{color:#0003;width:1.5rem;transition:color .3s}.hextra-card p{margin-top:.5rem;position:relative}.dark .hextra-card .hextra-card-icon svg{color:#fff6}.dark .hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card-tag{z-index:10;position:absolute;top:5px}.hextra-card-tag:where(:dir(ltr)){right:5px}.hextra-card-tag:where(:dir(rtl)){left:5px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker){counter-increment:step}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);margin-left:-41px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);margin-right:-44px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);background-color:var(--hx-color-gray-100)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:4px;border-color:var(--hx-color-white)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);border-color:var(--hx-color-dark)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step);text-align:center;text-indent:-1px;width:33px;height:33px;font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal);color:var(--hx-color-neutral-400);border-radius:340282e33px;position:absolute}:lang(fa) .hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step,persian)}.hextra-search-wrapper li{margin-inline:calc(var(--hx-spacing)*2.5);border-radius:var(--hx-radius-md);overflow-wrap:break-word;color:var(--hx-color-gray-800)}@media(prefers-contrast:more){.hextra-search-wrapper li{border-style:var(--tw-border-style);border-width:1px;border-color:#0000}}.hextra-search-wrapper li:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hextra-search-wrapper li a{scroll-margin:calc(var(--hx-spacing)*12);padding-inline:calc(var(--hx-spacing)*2.5);padding-block:calc(var(--hx-spacing)*2);display:block}.hextra-search-wrapper li a:focus-visible{--tw-outline-style:none;outline-style:none}.hextra-search-wrapper li .hextra-search-title{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hextra-search-wrapper li .hextra-search-active{border-radius:var(--hx-radius-md);background-color:var(--hx-color-primary-500)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper li .hextra-search-active{background-color:color-mix(in oklab,var(--hx-color-primary-500)10%,transparent)}}@media(prefers-contrast:more){.hextra-search-wrapper li .hextra-search-active{border-color:var(--hx-color-primary-500)}}.hextra-search-wrapper .hextra-search-no-result{padding:calc(var(--hx-spacing)*8);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-400);-webkit-user-select:none;user-select:none;display:block}.hextra-search-wrapper .hextra-search-prefix{margin-inline:calc(var(--hx-spacing)*2.5);margin-top:calc(var(--hx-spacing)*6);margin-bottom:calc(var(--hx-spacing)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix{border-color:color-mix(in oklab,var(--hx-color-black)10%,transparent)}}.hextra-search-wrapper .hextra-search-prefix{padding-inline:calc(var(--hx-spacing)*2.5);padding-bottom:calc(var(--hx-spacing)*1.5);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);color:var(--hx-color-gray-500);text-transform:uppercase;-webkit-user-select:none;user-select:none}.hextra-search-wrapper .hextra-search-prefix:first-child{margin-top:calc(var(--hx-spacing)*0)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix{border-color:var(--hx-color-gray-600);color:var(--hx-color-gray-900)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)20%,transparent)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){color:var(--hx-color-gray-300)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-gray-50);color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{margin-top:calc(var(--hx-spacing)*1);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:1.35rem;text-overflow:ellipsis;color:var(--hx-color-gray-600);line-height:1.35rem;overflow:hidden}.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-400)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box}.hextra-search-wrapper .hextra-search-match{color:var(--hx-color-primary-600)}@media(max-width:48rem){.hextra-sidebar-container{top:calc(var(--hx-spacing)*0);bottom:calc(var(--hx-spacing)*0);z-index:15;overscroll-behavior:contain;background-color:var(--hx-color-white);width:100%;padding-top:calc(var(--navbar-height) + var(--hextra-banner-height));position:fixed}.hextra-sidebar-container:where(.dark,.dark *){background-color:var(--hx-color-dark)}.hextra-sidebar-container{will-change:transform,opacity;contain:layout style;backface-visibility:hidden;transition:transform .4s cubic-bezier(.52,.16,.04,1)}}.hextra-sidebar-container li>.hextra-sidebar-children{height:calc(var(--hx-spacing)*0)}.hextra-sidebar-container li.open>.hextra-sidebar-children{height:auto;padding-top:calc(var(--hx-spacing)*1)}.hextra-sidebar-container li.open>.hextra-sidebar-item>.hextra-sidebar-collapsible-button>svg>path{rotate:90deg}.hextra-banner-hidden .hextra-banner{display:none}.hextra-banner :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline;text-decoration-thickness:from-font}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}nav .hextra-search-wrapper{display:none}@media(min-width:48rem){nav .hextra-search-wrapper{display:inline-block}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-nav-container-blur{background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur{background-color:color-mix(in oklab,var(--hx-color-white)85%,transparent)}}.hextra-nav-container-blur{--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-nav-container-blur:where(.dark,.dark *){background-color:var(--hx-color-dark)!important}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)80%,transparent)!important}}}.hextra-hamburger-menu svg g{transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg path{opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open path{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:0s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open g{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open>path{opacity:0}.hextra-hamburger-menu svg.open>g:first-of-type{rotate:45deg}.hextra-hamburger-menu svg.open>g:first-of-type path{--tw-translate-y:calc(var(--hx-spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-hamburger-menu svg.open>g:nth-of-type(2){rotate:-45deg}.hextra-hamburger-menu svg.open>g:nth-of-type(2) path{--tw-translate-y:calc(var(--hx-spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-scrollbar,.hextra-scrollbar *{scrollbar-width:thin;scrollbar-color:oklch(55.55% 0 0/.4)transparent;scrollbar-gutter:stable}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar{height:calc(var(--hx-spacing)*3);width:calc(var(--hx-spacing)*3)}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-track{background-color:#0000}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-thumb{border-radius:10px}:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{background-color:var(--tw-shadow-color);--tw-shadow-color:var(--hx-color-neutral-500);background-clip:content-box;border:3px solid #0000}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}@media(hover:hover){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:var(--hx-color-neutral-500)}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)40%,transparent)var(--tw-shadow-alpha),transparent)}}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-code-copy-btn{opacity:.85;--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-code-copy-btn:where(.dark,.dark *){opacity:.8}}@media(min-width:1024px){.hextra-feature-grid{grid-template-columns:repeat(var(--hextra-feature-grid-cols),minmax(0,1fr))}}.hextra-jupyter-code-cell{scrollbar-gutter:auto;margin-top:calc(var(--hx-spacing)*6)}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:hidden}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs{max-height:50vh;overflow:auto}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre{max-width:100%;font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:auto}.hextra-badge{align-items:center;display:inline-flex}.hextra-toc a.hextra-toc-active{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.2s;transition-duration:.2s;color:var(--hx-color-gray-900)!important}.hextra-toc a.hextra-toc-active:where(.dark,.dark *){color:var(--hx-color-gray-50)!important}.hextra-archive-timeline{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline{border-color:color-mix(in oklab,var(--hx-color-black)15%,transparent)}}.hextra-archive-timeline:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)15%,transparent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}:root{--hextra-navbar-height:80px}.hextra-nav-container nav{min-height:80px!important;height:80px!important} \ No newline at end of file diff --git a/public/css/compiled/main.min.e3e32e1e64b51d8cf07eddfd28385006113c25a60d1a7976dff2c8feaf1d6c2e.css b/public/css/compiled/main.min.e3e32e1e64b51d8cf07eddfd28385006113c25a60d1a7976dff2c8feaf1d6c2e.css deleted file mode 100644 index d632f4a..0000000 --- a/public/css/compiled/main.min.e3e32e1e64b51d8cf07eddfd28385006113c25a60d1a7976dff2c8feaf1d6c2e.css +++ /dev/null @@ -1 +0,0 @@ -:root{--hextra-max-page-width:80rem;--hextra-max-content-width:72rem;--hextra-max-navbar-width:80rem;--hextra-max-footer-width:80rem}.hextra-max-page-width{max-width:var(--hextra-max-page-width)}.hextra-max-content-width{max-width:var(--hextra-max-content-width)}.hextra-max-navbar-width{max-width:var(--hextra-max-navbar-width)}.hextra-max-footer-width{max-width:var(--hextra-max-footer-width)}/*!tailwindcss v4.1.18 | MIT License | https://tailwindcss.com*/@layer properties{@supports(((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--hx-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--hx-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--hx-color-red-100:oklch(93.6% .032 17.717);--hx-color-red-200:oklch(88.5% .062 18.334);--hx-color-red-900:oklch(39.6% .141 25.723);--hx-color-orange-50:oklch(98% .016 73.684);--hx-color-orange-100:oklch(95.4% .038 75.164);--hx-color-orange-300:oklch(83.7% .128 66.29);--hx-color-orange-400:oklch(75% .183 55.934);--hx-color-orange-800:oklch(47% .157 37.304);--hx-color-amber-100:oklch(96.2% .059 95.617);--hx-color-amber-200:oklch(92.4% .12 95.746);--hx-color-amber-900:oklch(41.4% .112 45.904);--hx-color-yellow-50:oklch(98.7% .026 102.212);--hx-color-yellow-100:oklch(97.3% .071 103.193);--hx-color-yellow-200:oklch(94.5% .129 101.54);--hx-color-yellow-700:oklch(55.4% .135 66.442);--hx-color-yellow-900:oklch(42.1% .095 57.708);--hx-color-green-100:oklch(96.2% .044 156.743);--hx-color-green-200:oklch(92.5% .084 155.995);--hx-color-green-900:oklch(39.3% .095 152.535);--hx-color-blue-100:oklch(93.2% .032 255.585);--hx-color-blue-200:oklch(88.2% .059 254.128);--hx-color-blue-900:oklch(37.9% .146 265.522);--hx-color-indigo-100:oklch(93% .034 272.788);--hx-color-indigo-200:oklch(87% .065 274.039);--hx-color-indigo-900:oklch(35.9% .144 278.697);--hx-color-purple-100:oklch(94.6% .033 307.174);--hx-color-purple-200:oklch(90.2% .063 306.703);--hx-color-purple-900:oklch(38.1% .176 304.987);--hx-color-slate-50:oklch(98.4% .003 247.858);--hx-color-slate-100:oklch(96.8% .007 247.896);--hx-color-slate-900:oklch(20.8% .042 265.755);--hx-color-gray-50:oklch(98.5% .002 247.839);--hx-color-gray-100:oklch(96.7% .003 264.542);--hx-color-gray-200:oklch(92.8% .006 264.531);--hx-color-gray-300:oklch(87.2% .01 258.338);--hx-color-gray-400:oklch(70.7% .022 261.325);--hx-color-gray-500:oklch(55.1% .027 264.364);--hx-color-gray-600:oklch(44.6% .03 256.802);--hx-color-gray-700:oklch(37.3% .034 259.733);--hx-color-gray-800:oklch(27.8% .033 256.848);--hx-color-gray-900:oklch(21% .034 264.665);--hx-color-neutral-50:oklch(98.5% 0 0);--hx-color-neutral-200:oklch(92.2% 0 0);--hx-color-neutral-300:oklch(87% 0 0);--hx-color-neutral-400:oklch(70.8% 0 0);--hx-color-neutral-500:oklch(55.6% 0 0);--hx-color-neutral-600:oklch(43.9% 0 0);--hx-color-neutral-700:oklch(37.1% 0 0);--hx-color-neutral-800:oklch(26.9% 0 0);--hx-color-neutral-900:oklch(20.5% 0 0);--hx-color-black:#000;--hx-color-white:#fff;--hx-spacing:.25rem;--hx-breakpoint-xl:80rem;--hx-text-xs:.75rem;--hx-text-xs--line-height:calc(1/.75);--hx-text-sm:.875rem;--hx-text-sm--line-height:calc(1.25/.875);--hx-text-base:1rem;--hx-text-base--line-height:calc(1.5/1);--hx-text-lg:1.125rem;--hx-text-lg--line-height:calc(1.75/1.125);--hx-text-xl:1.25rem;--hx-text-xl--line-height:calc(1.75/1.25);--hx-text-2xl:1.5rem;--hx-text-2xl--line-height:calc(2/1.5);--hx-text-3xl:1.875rem;--hx-text-3xl--line-height:calc(2.25/1.875);--hx-text-4xl:2.25rem;--hx-text-4xl--line-height:calc(2.5/2.25);--hx-text-5xl:3rem;--hx-text-5xl--line-height:1;--hx-font-weight-normal:400;--hx-font-weight-medium:500;--hx-font-weight-semibold:600;--hx-font-weight-bold:700;--hx-font-weight-extrabold:800;--hx-tracking-tighter:-.05em;--hx-tracking-tight:-.025em;--hx-leading-tight:1.25;--hx-radius-xs:.125rem;--hx-radius-sm:.25rem;--hx-radius-md:.375rem;--hx-radius-lg:.5rem;--hx-radius-xl:.75rem;--hx-radius-3xl:1.5rem;--hx-ease-in:cubic-bezier(.4,0,1,1);--hx-ease-out:cubic-bezier(0,0,.2,1);--hx-ease-in-out:cubic-bezier(.4,0,.2,1);--hx-blur-md:12px;--hx-default-transition-duration:.15s;--hx-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--hx-default-font-family:var(--hx-font-sans);--hx-default-mono-font-family:var(--hx-font-mono);--hx-color-primary-100:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*44));--hx-color-primary-200:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*36));--hx-color-primary-300:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*27));--hx-color-primary-400:hsl(var(--primary-hue)var(--primary-saturation)calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness))/50)*16));--hx-color-primary-500:hsl(var(--primary-hue)var(--primary-saturation)var(--primary-lightness));--hx-color-primary-600:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*45));--hx-color-primary-700:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*39));--hx-color-primary-800:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*32));--hx-color-primary-900:hsl(var(--primary-hue)var(--primary-saturation)calc(calc(var(--primary-lightness)/50)*24));--hx-color-dark:#111}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--hx-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--hx-default-font-feature-settings,normal);font-variation-settings:var(--hx-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hx-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--hx-default-mono-font-feature-settings,normal);font-variation-settings:var(--hx-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports(not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports(color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}abbr:where([title]){cursor:help}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}:where(a,button,[role=tab],[role=menuitem],[role=menuitemradio],input,select,textarea,[tabindex="0"]):not([class*=hextra-focus-visible]):focus-visible:where(.dark,.dark *){--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}}@layer components;@layer utilities{.hx\:pointer-events-none{pointer-events:none}.hx\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hx\:absolute{position:absolute}.hx\:relative{position:relative}.hx\:sticky{position:sticky}.hx\:inset-x-0{inset-inline:calc(var(--hx-spacing)*0)}.hx\:inset-y-0{inset-block:calc(var(--hx-spacing)*0)}.hx\:top-0{top:calc(var(--hx-spacing)*0)}.hx\:top-1\/2{top:50%}.hx\:top-8{top:calc(var(--hx-spacing)*8)}.hx\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:top-\[40\%\]{top:40%}.hx\:top-full{top:100%}.hx\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:bottom-0{bottom:calc(var(--hx-spacing)*0)}.hx\:left-0{left:calc(var(--hx-spacing)*0)}.hx\:left-\[24px\]{left:24px}.hx\:left-\[36px\]{left:36px}.hx\:z-20{z-index:20}.hx\:z-\[-1\]{z-index:-1}.hx\:order-last{order:9999}.hx\:m-\[11px\]{margin:11px}.hx\:mx-1{margin-inline:calc(var(--hx-spacing)*1)}.hx\:mx-4{margin-inline:calc(var(--hx-spacing)*4)}.hx\:mx-auto{margin-inline:auto}.hx\:my-1{margin-block:calc(var(--hx-spacing)*1)}.hx\:my-1\.5{margin-block:calc(var(--hx-spacing)*1.5)}.hx\:my-2{margin-block:calc(var(--hx-spacing)*2)}.hx\:-mt-20{margin-top:calc(var(--hx-spacing)*-20)}.hx\:mt-1{margin-top:calc(var(--hx-spacing)*1)}.hx\:mt-1\.5{margin-top:calc(var(--hx-spacing)*1.5)}.hx\:mt-2{margin-top:calc(var(--hx-spacing)*2)}.hx\:mt-4{margin-top:calc(var(--hx-spacing)*4)}.hx\:mt-5{margin-top:calc(var(--hx-spacing)*5)}.hx\:mt-6{margin-top:calc(var(--hx-spacing)*6)}.hx\:mt-8{margin-top:calc(var(--hx-spacing)*8)}.hx\:mt-12{margin-top:calc(var(--hx-spacing)*12)}.hx\:mt-16{margin-top:calc(var(--hx-spacing)*16)}.hx\:mt-auto{margin-top:auto}.hx\:-mr-2{margin-right:calc(var(--hx-spacing)*-2)}.hx\:mr-1{margin-right:calc(var(--hx-spacing)*1)}.hx\:mr-2{margin-right:calc(var(--hx-spacing)*2)}.hx\:-mb-0\.5{margin-bottom:calc(var(--hx-spacing)*-.5)}.hx\:mb-0{margin-bottom:calc(var(--hx-spacing)*0)}.hx\:mb-2{margin-bottom:calc(var(--hx-spacing)*2)}.hx\:mb-4{margin-bottom:calc(var(--hx-spacing)*4)}.hx\:mb-6{margin-bottom:calc(var(--hx-spacing)*6)}.hx\:mb-8{margin-bottom:calc(var(--hx-spacing)*8)}.hx\:mb-10{margin-bottom:calc(var(--hx-spacing)*10)}.hx\:mb-12{margin-bottom:calc(var(--hx-spacing)*12)}.hx\:mb-16{margin-bottom:calc(var(--hx-spacing)*16)}.hx\:-ml-2{margin-left:calc(var(--hx-spacing)*-2)}.hx\:ml-2{margin-left:calc(var(--hx-spacing)*2)}.hx\:ml-4{margin-left:calc(var(--hx-spacing)*4)}.hx\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.hx\:block{display:block}.hx\:flex{display:flex}.hx\:grid{display:grid}.hx\:hidden{display:none}.hx\:inline{display:inline}.hx\:inline-block{display:inline-block}.hx\:inline-flex{display:inline-flex}.hx\:aspect-auto{aspect-ratio:auto}.hx\:size-4{width:calc(var(--hx-spacing)*4);height:calc(var(--hx-spacing)*4)}.hx\:h-0{height:calc(var(--hx-spacing)*0)}.hx\:h-2{height:calc(var(--hx-spacing)*2)}.hx\:h-3\.5{height:calc(var(--hx-spacing)*3.5)}.hx\:h-4{height:calc(var(--hx-spacing)*4)}.hx\:h-5{height:calc(var(--hx-spacing)*5)}.hx\:h-7{height:calc(var(--hx-spacing)*7)}.hx\:h-10{height:calc(var(--hx-spacing)*10)}.hx\:h-16{height:calc(var(--hx-spacing)*16)}.hx\:h-\[18px\]{height:18px}.hx\:h-full{height:100%}.hx\:h-px{height:1px}.hx\:max-h-\(--menu-height\){max-height:var(--menu-height)}.hx\:max-h-64{max-height:calc(var(--hx-spacing)*64)}.hx\:max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom))}.hx\:max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}.hx\:min-h-\[100px\]{min-height:100px}.hx\:min-h-\[calc\(100vh-var\(--navbar-height\)\)\]{min-height:calc(100vh - var(--navbar-height))}.hx\:w-2{width:calc(var(--hx-spacing)*2)}.hx\:w-3\.5{width:calc(var(--hx-spacing)*3.5)}.hx\:w-4{width:calc(var(--hx-spacing)*4)}.hx\:w-10{width:calc(var(--hx-spacing)*10)}.hx\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:w-\[110\%\]{width:110%}.hx\:w-\[180\%\]{width:180%}.hx\:w-full{width:100%}.hx\:w-max{width:max-content}.hx\:w-screen{width:100vw}.hx\:max-w-\[50\%\]{max-width:50%}.hx\:max-w-\[90rem\]{max-width:90rem}.hx\:max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\]{max-width:min(100vw - 2rem,100% + 20rem)}.hx\:max-w-full{max-width:100%}.hx\:max-w-none{max-width:none}.hx\:max-w-screen-xl{max-width:var(--hx-breakpoint-xl)}.hx\:min-w-0{min-width:calc(var(--hx-spacing)*0)}.hx\:min-w-\[18px\]{min-width:18px}.hx\:min-w-\[24px\]{min-width:24px}.hx\:min-w-full{min-width:100%}.hx\:shrink-0{flex-shrink:0}.hx\:grow{flex-grow:1}.hx\:origin-center{transform-origin:50%}.hx\:-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hx\:cursor-default{cursor:default}.hx\:cursor-pointer{cursor:pointer}.hx\:scroll-my-6{scroll-margin-block:calc(var(--hx-spacing)*6)}.hx\:scroll-py-6{scroll-padding-block:calc(var(--hx-spacing)*6)}.hx\:list-none{list-style-type:none}.hx\:appearance-none{appearance:none}.hx\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.hx\:flex-col{flex-direction:column}.hx\:flex-wrap{flex-wrap:wrap}.hx\:items-baseline{align-items:baseline}.hx\:items-center{align-items:center}.hx\:items-start{align-items:flex-start}.hx\:justify-between{justify-content:space-between}.hx\:justify-center{justify-content:center}.hx\:justify-end{justify-content:flex-end}.hx\:justify-start{justify-content:flex-start}.hx\:justify-items-start{justify-items:start}.hx\:gap-1{gap:calc(var(--hx-spacing)*1)}.hx\:gap-1\.5{gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-2{gap:calc(var(--hx-spacing)*2)}.hx\:gap-4{gap:calc(var(--hx-spacing)*4)}.hx\:gap-x-1\.5{column-gap:calc(var(--hx-spacing)*1.5)}.hx\:gap-x-2{column-gap:calc(var(--hx-spacing)*2)}.hx\:gap-y-1{row-gap:calc(var(--hx-spacing)*1)}.hx\:gap-y-2{row-gap:calc(var(--hx-spacing)*2)}.hx\:overflow-auto{overflow:auto}.hx\:overflow-hidden{overflow:hidden}.hx\:overflow-x-auto{overflow-x:auto}.hx\:overflow-x-hidden{overflow-x:hidden}.hx\:overflow-y-auto{overflow-y:auto}.hx\:overflow-y-hidden{overflow-y:hidden}.hx\:overscroll-contain{overscroll-behavior:contain}.hx\:overscroll-x-contain{overscroll-behavior-x:contain}.hx\:rounded-3xl{border-radius:var(--hx-radius-3xl)}.hx\:rounded-full{border-radius:340282e33px}.hx\:rounded-lg{border-radius:var(--hx-radius-lg)}.hx\:rounded-md{border-radius:var(--hx-radius-md)}.hx\:rounded-sm{border-radius:var(--hx-radius-sm)}.hx\:rounded-xl{border-radius:var(--hx-radius-xl)}.hx\:rounded-xs{border-radius:var(--hx-radius-xs)}.hx\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.hx\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:border-0{border-style:var(--tw-border-style);border-width:0}.hx\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.hx\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.hx\:border-amber-200{border-color:var(--hx-color-amber-200)}.hx\:border-black\/5{border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:border-black\/5{border-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:border-blue-200{border-color:var(--hx-color-blue-200)}.hx\:border-gray-200{border-color:var(--hx-color-gray-200)}.hx\:border-gray-500{border-color:var(--hx-color-gray-500)}.hx\:border-green-200{border-color:var(--hx-color-green-200)}.hx\:border-indigo-200{border-color:var(--hx-color-indigo-200)}.hx\:border-orange-100{border-color:var(--hx-color-orange-100)}.hx\:border-purple-200{border-color:var(--hx-color-purple-200)}.hx\:border-red-200{border-color:var(--hx-color-red-200)}.hx\:border-transparent{border-color:#0000}.hx\:border-yellow-100{border-color:var(--hx-color-yellow-100)}.hx\:bg-amber-100{background-color:var(--hx-color-amber-100)}.hx\:bg-black\/\[\.05\]{background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-black\/\[\.05\]{background-color:color-mix(in oklab,var(--hx-color-black)5%,transparent)}}.hx\:bg-blue-100{background-color:var(--hx-color-blue-100)}.hx\:bg-gray-100{background-color:var(--hx-color-gray-100)}.hx\:bg-gray-200{background-color:var(--hx-color-gray-200)}.hx\:bg-green-100{background-color:var(--hx-color-green-100)}.hx\:bg-indigo-100{background-color:var(--hx-color-indigo-100)}.hx\:bg-neutral-50{background-color:var(--hx-color-neutral-50)}.hx\:bg-neutral-900{background-color:var(--hx-color-neutral-900)}.hx\:bg-orange-50{background-color:var(--hx-color-orange-50)}.hx\:bg-primary-100{background-color:var(--hx-color-primary-100)}.hx\:bg-primary-400{background-color:var(--hx-color-primary-400)}.hx\:bg-primary-600{background-color:var(--hx-color-primary-600)}.hx\:bg-primary-700\/5{background-color:var(--hx-color-primary-700)}@supports(color:color-mix(in lab,red,red)){.hx\:bg-primary-700\/5{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hx\:bg-purple-100{background-color:var(--hx-color-purple-100)}.hx\:bg-red-100{background-color:var(--hx-color-red-100)}.hx\:bg-transparent{background-color:#0000}.hx\:bg-white{background-color:var(--hx-color-white)}.hx\:bg-yellow-50{background-color:var(--hx-color-yellow-50)}.hx\:bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hx\:from-gray-900{--tw-gradient-from:var(--hx-color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:to-gray-600{--tw-gradient-to:var(--hx-color-gray-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.hx\:p-0{padding:calc(var(--hx-spacing)*0)}.hx\:p-0\.5{padding:calc(var(--hx-spacing)*.5)}.hx\:p-1{padding:calc(var(--hx-spacing)*1)}.hx\:p-1\.5{padding:calc(var(--hx-spacing)*1.5)}.hx\:p-2{padding:calc(var(--hx-spacing)*2)}.hx\:p-4{padding:calc(var(--hx-spacing)*4)}.hx\:p-6{padding:calc(var(--hx-spacing)*6)}.hx\:px-1\.5{padding-inline:calc(var(--hx-spacing)*1.5)}.hx\:px-2{padding-inline:calc(var(--hx-spacing)*2)}.hx\:px-2\.5{padding-inline:calc(var(--hx-spacing)*2.5)}.hx\:px-3{padding-inline:calc(var(--hx-spacing)*3)}.hx\:px-4{padding-inline:calc(var(--hx-spacing)*4)}.hx\:px-6{padding-inline:calc(var(--hx-spacing)*6)}.hx\:px-8{padding-inline:calc(var(--hx-spacing)*8)}.hx\:py-1{padding-block:calc(var(--hx-spacing)*1)}.hx\:py-1\.5{padding-block:calc(var(--hx-spacing)*1.5)}.hx\:py-2{padding-block:calc(var(--hx-spacing)*2)}.hx\:py-2\.5{padding-block:calc(var(--hx-spacing)*2.5)}.hx\:py-3{padding-block:calc(var(--hx-spacing)*3)}.hx\:py-4{padding-block:calc(var(--hx-spacing)*4)}.hx\:py-12{padding-block:calc(var(--hx-spacing)*12)}.hx\:pt-4{padding-top:calc(var(--hx-spacing)*4)}.hx\:pt-6{padding-top:calc(var(--hx-spacing)*6)}.hx\:pt-8{padding-top:calc(var(--hx-spacing)*8)}.hx\:pr-2{padding-right:calc(var(--hx-spacing)*2)}.hx\:pr-4{padding-right:calc(var(--hx-spacing)*4)}.hx\:pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-left),1.5rem)}.hx\:pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.hx\:pb-8{padding-bottom:calc(var(--hx-spacing)*8)}.hx\:pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.hx\:pb-px{padding-bottom:1px}.hx\:pl-6{padding-left:calc(var(--hx-spacing)*6)}.hx\:pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.hx\:text-center{text-align:center}.hx\:text-left{text-align:left}.hx\:align-\[-2\.5px\]{vertical-align:-2.5px}.hx\:align-baseline{vertical-align:baseline}.hx\:align-middle{vertical-align:middle}.hx\:align-text-bottom{vertical-align:text-bottom}.hx\:font-mono{font-family:var(--hx-font-mono)}.hx\:text-2xl{font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height))}.hx\:text-4xl{font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height))}.hx\:text-base{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height))}.hx\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}.hx\:text-xs{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height))}.hx\:text-\[\.65rem\]{font-size:.65rem}.hx\:text-\[10px\]{font-size:10px}.hx\:leading-5{--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5)}.hx\:leading-6{--tw-leading:calc(var(--hx-spacing)*6);line-height:calc(var(--hx-spacing)*6)}.hx\:leading-7{--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hx\:leading-none{--tw-leading:1;line-height:1}.hx\:leading-tight{--tw-leading:var(--hx-leading-tight);line-height:var(--hx-leading-tight)}.hx\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:font-extrabold{--tw-font-weight:var(--hx-font-weight-extrabold);font-weight:var(--hx-font-weight-extrabold)}.hx\:font-medium{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:font-normal{--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal)}.hx\:font-semibold{--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hx\:tracking-tight{--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight)}.hx\:tracking-tighter{--tw-tracking:var(--hx-tracking-tighter);letter-spacing:var(--hx-tracking-tighter)}.hx\:break-words,.hx\:wrap-break-word{overflow-wrap:break-word}.hx\:text-ellipsis{text-overflow:ellipsis}.hx\:whitespace-nowrap{white-space:nowrap}.hx\:text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\]{color:hsl(var(--primary-hue),100%,50%)}.hx\:text-amber-900{color:var(--hx-color-amber-900)}.hx\:text-blue-900{color:var(--hx-color-blue-900)}.hx\:text-current{color:currentColor}.hx\:text-gray-100{color:var(--hx-color-gray-100)}.hx\:text-gray-500{color:var(--hx-color-gray-500)}.hx\:text-gray-600{color:var(--hx-color-gray-600)}.hx\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:text-green-900{color:var(--hx-color-green-900)}.hx\:text-indigo-900{color:var(--hx-color-indigo-900)}.hx\:text-orange-800{color:var(--hx-color-orange-800)}.hx\:text-primary-800{color:var(--hx-color-primary-800)}.hx\:text-purple-900{color:var(--hx-color-purple-900)}.hx\:text-red-900{color:var(--hx-color-red-900)}.hx\:text-slate-50{color:var(--hx-color-slate-50)}.hx\:text-slate-900{color:var(--hx-color-slate-900)}.hx\:text-transparent{color:#0000}.hx\:text-white{color:var(--hx-color-white)}.hx\:text-yellow-900{color:var(--hx-color-yellow-900)}.hx\:capitalize{text-transform:capitalize}.hx\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.hx\:no-underline{text-decoration-line:none}.hx\:underline{text-decoration-line:underline}.hx\:decoration-from-font{text-decoration-thickness:from-font}.hx\:underline-offset-2{text-underline-offset:2px}.hx\:opacity-0{opacity:0}.hx\:opacity-50{opacity:.5}.hx\:opacity-80{opacity:.8}.hx\:shadow-\[0_-12px_16px_\#fff\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px var(--tw-shadow-color,white);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\]{--tw-shadow:0 2px 4px var(--tw-shadow-color,#00000005),0 1px 0 var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hextra-focus-visible:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-offset-color:var(--hx-color-primary-300);--tw-outline-style:none;outline-style:none}.hx\:hextra-focus-visible:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800);--tw-ring-offset-color:var(--hx-color-primary-700)}.hx\:hextra-focus-visible-inset:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--hx-color-primary-200);--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-outline-style:none;--tw-ring-inset:inset;outline-style:none}.hx\:hextra-focus-visible-inset:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--hx-color-primary-800)}.hx\:shadow-gray-100{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:shadow-gray-100{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}.hx\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:duration-75{--tw-duration:75ms;transition-duration:75ms}.hx\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hx\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hx\:ease-in{--tw-ease:var(--hx-ease-in);transition-timing-function:var(--hx-ease-in)}.hx\:ease-in-out{--tw-ease:var(--hx-ease-in-out);transition-timing-function:var(--hx-ease-in-out)}.hx\:outline-none{--tw-outline-style:none;outline-style:none}.hx\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hx\:group-hover\:text-gray-900:is(:where(.hx\:group):hover *){color:var(--hx-color-gray-900)}.hx\:group-hover\:underline:is(:where(.hx\:group):hover *){text-decoration-line:underline}.hx\:group-hover\/code\:opacity-100:is(:where(.hx\:group\/code):hover *){opacity:1}}.hx\:group-data-\[active\=true\]\:text-primary-800:is(:where(.hx\:group)[data-active=true] *){color:var(--hx-color-primary-800)}.hx\:group-data-\[theme\=dark\]\:hidden:is(:where(.hx\:group)[data-theme=dark] *),.hx\:group-data-\[theme\=light\]\:hidden:is(:where(.hx\:group)[data-theme=light] *),.hx\:group-data-\[theme\=system\]\:hidden:is(:where(.hx\:group)[data-theme=system] *){display:none}.hx\:group-\[\.copied\]\/copybtn\:block:is(:where(.hx\:group\/copybtn).copied *){display:block}.hx\:group-\[\.copied\]\/copybtn\:hidden:is(:where(.hx\:group\/copybtn).copied *){display:none}.hx\:placeholder\:text-gray-500::placeholder{color:var(--hx-color-gray-500)}.hx\:before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.hx\:before\:absolute:before{content:var(--tw-content);position:absolute}.hx\:before\:inset-0:before{content:var(--tw-content);inset:calc(var(--hx-spacing)*0)}.hx\:before\:inset-y-1:before{content:var(--tw-content);inset-block:calc(var(--hx-spacing)*1)}.hx\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--hx-spacing)*1)}.hx\:before\:inline-block:before{content:var(--tw-content);display:inline-block}.hx\:before\:w-px:before{content:var(--tw-content);width:1px}.hx\:before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--hx-color-gray-200)}.hx\:before\:opacity-25:before{content:var(--tw-content);opacity:.25}.hx\:before\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.hx\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\'\#\'\]:before{--tw-content:"#";content:var(--tw-content)}.hx\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hx\:before\:content-\[\\\"\\\"\]:before{--tw-content:\"\";content:var(--tw-content)}.hx\:group-open\:before\:rotate-90:is(:where(.hx\:group):is([open],:popover-open,:open) *):before{content:var(--tw-content);rotate:90deg}.hx\:first\:mt-0:first-child{margin-top:calc(var(--hx-spacing)*0)}.hx\:last-of-type\:mb-0:last-of-type{margin-bottom:calc(var(--hx-spacing)*0)}@media(hover:hover){.hx\:hover\:border-gray-200:hover{border-color:var(--hx-color-gray-200)}.hx\:hover\:border-gray-300:hover{border-color:var(--hx-color-gray-300)}.hx\:hover\:border-gray-400:hover{border-color:var(--hx-color-gray-400)}.hx\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}.hx\:hover\:bg-gray-100:hover{background-color:var(--hx-color-gray-100)}.hx\:hover\:bg-gray-800\/5:hover{background-color:var(--hx-color-gray-800)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:bg-gray-800\/5:hover{background-color:color-mix(in oklab,var(--hx-color-gray-800)5%,transparent)}}.hx\:hover\:bg-primary-700:hover{background-color:var(--hx-color-primary-700)}.hx\:hover\:bg-slate-50:hover{background-color:var(--hx-color-slate-50)}.hx\:hover\:text-black:hover{color:var(--hx-color-black)}.hx\:hover\:text-gray-700:hover{color:var(--hx-color-gray-700)}.hx\:hover\:text-gray-800:hover{color:var(--hx-color-gray-800)}.hx\:hover\:text-gray-900:hover{color:var(--hx-color-gray-900)}.hx\:hover\:text-primary-600:hover{color:var(--hx-color-primary-600)}.hx\:hover\:opacity-60:hover{opacity:.6}.hx\:hover\:opacity-75:hover{opacity:.75}.hx\:hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:hover\:shadow-gray-100:hover{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-100)var(--tw-shadow-alpha),transparent)}}}.hx\:focus-visible\:not-sr-only:focus-visible{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.hx\:focus-visible\:fixed:focus-visible{position:fixed}.hx\:focus-visible\:top-2:focus-visible{top:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:left-2:focus-visible{left:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:z-50:focus-visible{z-index:50}.hx\:focus-visible\:rounded-md:focus-visible{border-radius:var(--hx-radius-md)}.hx\:focus-visible\:bg-primary-500:focus-visible{background-color:var(--hx-color-primary-500)}.hx\:focus-visible\:bg-white:focus-visible{background-color:var(--hx-color-white)}.hx\:focus-visible\:px-4:focus-visible{padding-inline:calc(var(--hx-spacing)*4)}.hx\:focus-visible\:py-2:focus-visible{padding-block:calc(var(--hx-spacing)*2)}.hx\:focus-visible\:text-sm:focus-visible{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.hx\:focus-visible\:font-medium:focus-visible{--tw-font-weight:var(--hx-font-weight-medium);font-weight:var(--hx-font-weight-medium)}.hx\:focus-visible\:text-white:focus-visible{color:var(--hx-color-white)}.hx\:active\:bg-gray-400\/20:active{background-color:var(--hx-color-gray-400)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:bg-gray-400\/20:active{background-color:color-mix(in oklab,var(--hx-color-gray-400)20%,transparent)}}.hx\:active\:opacity-50:active{opacity:.5}.hx\:active\:shadow-sm:active{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:active\:shadow-gray-200:active{--tw-shadow-color:var(--hx-color-gray-200)}@supports(color:color-mix(in lab,red,red)){.hx\:active\:shadow-gray-200:active{--tw-shadow-color:color-mix(in oklab,var(--hx-color-gray-200)var(--tw-shadow-alpha),transparent)}}.hx\:data-\[state\=closed\]\:hidden[data-state=closed],.hx\:data-\[state\=open\]\:hidden[data-state=open]{display:none}.hx\:data-\[state\=selected\]\:block[data-state=selected]{display:block}.hx\:data-\[state\=selected\]\:border-primary-500[data-state=selected]{border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:text-primary-600[data-state=selected]{color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:border{border-style:var(--tw-border-style);border-width:1px}.hx\:contrast-more\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hx\:contrast-more\:border-current{border-color:initial}.hx\:contrast-more\:border-gray-800{border-color:var(--hx-color-gray-800)}.hx\:contrast-more\:border-gray-900{border-color:var(--hx-color-gray-900)}.hx\:contrast-more\:border-neutral-400{border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:border-primary-500{border-color:var(--hx-color-primary-500)}.hx\:contrast-more\:border-transparent{border-color:#0000}.hx\:contrast-more\:font-bold{--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold)}.hx\:contrast-more\:text-current{color:currentColor}.hx\:contrast-more\:text-gray-700{color:var(--hx-color-gray-700)}.hx\:contrast-more\:text-gray-800{color:var(--hx-color-gray-800)}.hx\:contrast-more\:text-gray-900{color:var(--hx-color-gray-900)}.hx\:contrast-more\:underline{text-decoration-line:underline}.hx\:contrast-more\:shadow-\[0_0_0_1px_\#000\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:hover\:border-gray-900:hover{border-color:var(--hx-color-gray-900)}}}@media not all and (min-width:80rem){.hx\:max-xl\:hidden{display:none}}@media not all and (min-width:64rem){.hx\:max-lg\:min-h-\[340px\]{min-height:340px}}@media not all and (min-width:48rem){.hx\:max-md\:sticky{position:sticky}.hx\:max-md\:hidden{display:none}.hx\:max-md\:min-h-\[340px\]{min-height:340px}.hx\:max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\]{transform:translateY(-100%)}.hx\:max-md\:\[transform\:translate3d\(0\,0\,0\)\]{transform:translate(0)}}@media not all and (min-width:40rem){.hx\:max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(min-width:40rem){.hx\:sm\:right-0{right:calc(var(--hx-spacing)*0)}.hx\:sm\:left-auto{left:auto}.hx\:sm\:block{display:block}.hx\:sm\:flex{display:flex}.hx\:sm\:w-\[110\%\]{width:110%}.hx\:sm\:flex-row{flex-direction:row}.hx\:sm\:items-center{align-items:center}.hx\:sm\:items-start{align-items:flex-start}.hx\:sm\:justify-between{justify-content:space-between}.hx\:sm\:text-xl{font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height))}@media not all and (min-width:64rem){.hx\:sm\:max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}@media(min-width:48rem){.hx\:md\:sticky{position:sticky}.hx\:md\:top-16{top:calc(var(--hx-spacing)*16)}.hx\:md\:mr-0{margin-right:calc(var(--hx-spacing)*0)}.hx\:md\:hidden{display:none}.hx\:md\:inline-block{display:inline-block}.hx\:md\:inline-flex{display:inline-flex}.hx\:md\:aspect-\[1\.1\/1\]{aspect-ratio:1.1}.hx\:md\:h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\]{height:calc(100vh - var(--navbar-height) - var(--menu-height))}.hx\:md\:max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\,400px\)\]{max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px)}.hx\:md\:w-64{width:calc(var(--hx-spacing)*64)}.hx\:md\:shrink-0{flex-shrink:0}.hx\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hx\:md\:justify-start{justify-content:flex-start}.hx\:md\:self-start{align-self:flex-start}.hx\:md\:overflow-auto{overflow:auto}.hx\:md\:px-12{padding-inline:calc(var(--hx-spacing)*12)}.hx\:md\:pt-12{padding-top:calc(var(--hx-spacing)*12)}.hx\:md\:text-3xl{font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height))}.hx\:md\:text-5xl{font-size:var(--hx-text-5xl);line-height:var(--tw-leading,var(--hx-text-5xl--line-height))}.hx\:md\:text-lg{font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height))}.hx\:md\:text-sm{font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}}@media(min-width:64rem){.hx\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:80rem){.hx\:xl\:block{display:block}.hx\:xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.hx\:ltr\:right-1\.5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*1.5)}.hx\:ltr\:right-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*2)}.hx\:ltr\:right-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){right:calc(var(--hx-spacing)*3)}.hx\:ltr\:-mr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:calc(var(--hx-spacing)*-4)}.hx\:ltr\:mr-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-right:auto}.hx\:ltr\:ml-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.hx\:ltr\:ml-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:ml-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:auto}.hx\:ltr\:rotate-180:where(:dir(ltr),[dir=ltr],[dir=ltr] *){rotate:180deg}.hx\:ltr\:rounded-l-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:ltr\:rounded-r-lg:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:ltr\:border-l:where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);border-left-width:1px}.hx\:ltr\:pr-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*0)}.hx\:ltr\:pr-1:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*1)}.hx\:ltr\:pr-2:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*2)}.hx\:ltr\:pr-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:ltr\:pr-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:ltr\:pr-9:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-right:calc(var(--hx-spacing)*9)}.hx\:ltr\:pl-3:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*3)}.hx\:ltr\:pl-4:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:ltr\:pl-5:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*5)}.hx\:ltr\:pl-6:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*6)}.hx\:ltr\:pl-8:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:ltr\:pl-12:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*12)}.hx\:ltr\:pl-16:where(:dir(ltr),[dir=ltr],[dir=ltr] *){padding-left:calc(var(--hx-spacing)*16)}.hx\:ltr\:text-right:where(:dir(ltr),[dir=ltr],[dir=ltr] *){text-align:right}.hx\:ltr\:before\:left-0:where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);left:calc(var(--hx-spacing)*0)}@media(min-width:48rem){.hx\:ltr\:md\:left-auto:where(:dir(ltr),[dir=ltr],[dir=ltr] *){left:auto}}.hx\:rtl\:left-1\.5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*1.5)}.hx\:rtl\:left-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*2)}.hx\:rtl\:left-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}.hx\:rtl\:mr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:mr-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:auto}.hx\:rtl\:-ml-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--hx-spacing)*-4)}.hx\:rtl\:ml-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:auto}.hx\:rtl\:-rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-180deg}.hx\:rtl\:rotate-270:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:270deg}.hx\:rtl\:rounded-l-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-left-radius:var(--hx-radius-lg);border-bottom-left-radius:var(--hx-radius-lg)}.hx\:rtl\:rounded-r-lg:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-top-right-radius:var(--hx-radius-lg);border-bottom-right-radius:var(--hx-radius-lg)}.hx\:rtl\:border-r:where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);border-right-width:1px}.hx\:rtl\:pr-3:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*3)}.hx\:rtl\:pr-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*4)}.hx\:rtl\:pr-5:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*5)}.hx\:rtl\:pr-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*6)}.hx\:rtl\:pr-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*8)}.hx\:rtl\:pr-12:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*12)}.hx\:rtl\:pr-16:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-right:calc(var(--hx-spacing)*16)}.hx\:rtl\:pl-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*0)}.hx\:rtl\:pl-1:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*1)}.hx\:rtl\:pl-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*2)}.hx\:rtl\:pl-4:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*4)}.hx\:rtl\:pl-8:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*8)}.hx\:rtl\:pl-9:where(:dir(rtl),[dir=rtl],[dir=rtl] *){padding-left:calc(var(--hx-spacing)*9)}.hx\:rtl\:text-left:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:left}.hx\:rtl\:before\:right-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);right:calc(var(--hx-spacing)*0)}.hx\:rtl\:before\:rotate-180:where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);rotate:180deg}@media(min-width:48rem){.hx\:rtl\:md\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}}.hx\:dark\:block:where(.dark,.dark *){display:block}.hx\:dark\:hidden:where(.dark,.dark *){display:none}.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:var(--hx-color-amber-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-amber-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-amber-200)30%,transparent)}}.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:var(--hx-color-blue-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-blue-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-blue-200)30%,transparent)}}.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-gray-100\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-gray-100)20%,transparent)}}.hx\:dark\:border-gray-400:where(.dark,.dark *){border-color:var(--hx-color-gray-400)}.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:var(--hx-color-green-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-green-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-green-200)30%,transparent)}}.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:var(--hx-color-indigo-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-indigo-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-indigo-200)30%,transparent)}}.hx\:dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--hx-color-neutral-700)}.hx\:dark\:border-neutral-800:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-orange-400\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-orange-400)30%,transparent)}}.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:var(--hx-color-purple-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-purple-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-purple-200)30%,transparent)}}.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:var(--hx-color-red-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-red-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-red-200)30%,transparent)}}.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-white\/10:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:var(--hx-color-yellow-200)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:border-yellow-200\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-yellow-200)30%,transparent)}}.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:var(--hx-color-amber-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-amber-900)30%,transparent)}}.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:var(--hx-color-blue-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-blue-900)30%,transparent)}}.hx\:dark\:bg-dark:where(.dark,.dark *),.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:var(--hx-color-dark)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-dark\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)50%,transparent)}}.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:var(--hx-color-gray-50)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-gray-50\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-50)10%,transparent)}}.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:var(--hx-color-green-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-green-900)30%,transparent)}}.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:var(--hx-color-indigo-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-indigo-900)30%,transparent)}}.hx\:dark\:bg-neutral-700:where(.dark,.dark *){background-color:var(--hx-color-neutral-700)}.hx\:dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--hx-color-neutral-800)}.hx\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--hx-color-neutral-900)}.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:var(--hx-color-orange-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-orange-400\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-orange-400)20%,transparent)}}.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-300\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:var(--hx-color-primary-400)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-primary-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-400)10%,transparent)}}.hx\:dark\:bg-primary-600:where(.dark,.dark *){background-color:var(--hx-color-primary-600)}.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:var(--hx-color-purple-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-purple-900)30%,transparent)}}.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:var(--hx-color-red-900)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-red-900)30%,transparent)}}.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:var(--hx-color-yellow-700)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:bg-yellow-700\/30:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-yellow-700)30%,transparent)}}.hx\:dark\:from-gray-100:where(.dark,.dark *){--tw-gradient-from:var(--hx-color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:to-gray-400:where(.dark,.dark *){--tw-gradient-to:var(--hx-color-gray-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.hx\:dark\:text-amber-200:where(.dark,.dark *){color:var(--hx-color-amber-200)}.hx\:dark\:text-blue-200:where(.dark,.dark *){color:var(--hx-color-blue-200)}.hx\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:dark\:text-gray-200:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hx\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:dark\:text-gray-400:where(.dark,.dark *){color:var(--hx-color-gray-400)}.hx\:dark\:text-green-200:where(.dark,.dark *){color:var(--hx-color-green-200)}.hx\:dark\:text-indigo-200:where(.dark,.dark *){color:var(--hx-color-indigo-200)}.hx\:dark\:text-neutral-200:where(.dark,.dark *){color:var(--hx-color-neutral-200)}.hx\:dark\:text-neutral-400:where(.dark,.dark *){color:var(--hx-color-neutral-400)}.hx\:dark\:text-orange-300:where(.dark,.dark *){color:var(--hx-color-orange-300)}.hx\:dark\:text-primary-600:where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:text-purple-200:where(.dark,.dark *){color:var(--hx-color-purple-200)}.hx\:dark\:text-red-200:where(.dark,.dark *){color:var(--hx-color-red-200)}.hx\:dark\:text-slate-100:where(.dark,.dark *){color:var(--hx-color-slate-100)}.hx\:dark\:text-white:where(.dark,.dark *){color:var(--hx-color-white)}.hx\:dark\:text-yellow-200:where(.dark,.dark *){color:var(--hx-color-yellow-200)}.hx\:dark\:opacity-80:where(.dark,.dark *){opacity:.8}.hx\:dark\:shadow-\[0_-1px_0_rgba\(255\,255\,255\,\.1\)_inset\]:where(.dark,.dark *){--tw-shadow:0 -1px 0 var(--tw-shadow-color,#ffffff1a)inset;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-\[0_-12px_16px_\#111\]:where(.dark,.dark *){--tw-shadow:0 -12px 16px var(--tw-shadow-color,#111);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:dark\:group-hover\:text-gray-50:where(.dark,.dark *):is(:where(.hx\:group):hover *){color:var(--hx-color-gray-50)}}.hx\:group-data-\[active\=true\]\:dark\:text-primary-600:is(:where(.hx\:group)[data-active=true] *):where(.dark,.dark *){color:var(--hx-color-primary-600)}.hx\:dark\:placeholder\:text-gray-400:where(.dark,.dark *)::placeholder{color:var(--hx-color-gray-400)}.hx\:dark\:before\:bg-neutral-800:where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hx\:dark\:before\:invert:where(.dark,.dark *):before{content:var(--tw-content);--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.hx\:dark\:hover\:border-gray-100:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-100)}.hx\:dark\:hover\:border-gray-600:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-600)}.hx\:dark\:hover\:border-neutral-500:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-500)}.hx\:dark\:hover\:border-neutral-700:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:border-neutral-800:where(.dark,.dark *):hover{border-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-gray-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-gray-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-gray-100)5%,transparent)}}.hx\:dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-700)}.hx\:dark\:hover\:bg-neutral-800:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-800)}.hx\:dark\:hover\:bg-neutral-900:where(.dark,.dark *):hover{background-color:var(--hx-color-neutral-900)}.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hx\:dark\:hover\:bg-primary-100\/5:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--hx-color-primary-100)5%,transparent)}}.hx\:dark\:hover\:bg-primary-700:where(.dark,.dark *):hover{background-color:var(--hx-color-primary-700)}.hx\:dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--hx-color-gray-50)}.hx\:dark\:hover\:text-gray-100:where(.dark,.dark *):hover{color:var(--hx-color-gray-100)}.hx\:dark\:hover\:text-gray-200:where(.dark,.dark *):hover{color:var(--hx-color-gray-200)}.hx\:dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--hx-color-gray-300)}.hx\:dark\:hover\:text-neutral-50:where(.dark,.dark *):hover{color:var(--hx-color-neutral-50)}.hx\:dark\:hover\:text-primary-400:where(.dark,.dark *):hover{color:var(--hx-color-primary-400)}.hx\:dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--hx-color-white)}.hx\:dark\:hover\:shadow-none:where(.dark,.dark *):hover{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.hx\:dark\:focus-visible\:bg-dark:where(.dark,.dark *):focus-visible{background-color:var(--hx-color-dark)}.hx\:data-\[state\=selected\]\:dark\:border-primary-500[data-state=selected]:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:data-\[state\=selected\]\:dark\:text-primary-600[data-state=selected]:where(.dark,.dark *){color:var(--hx-color-primary-600)}@media(prefers-contrast:more){.hx\:contrast-more\:dark\:border-current:where(.dark,.dark *){border-color:initial}.hx\:contrast-more\:dark\:border-gray-50:where(.dark,.dark *){border-color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:border-primary-500:where(.dark,.dark *){border-color:var(--hx-color-primary-500)}.hx\:dark\:contrast-more\:border-neutral-400:where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}.hx\:contrast-more\:dark\:text-current:where(.dark,.dark *){color:currentColor}.hx\:contrast-more\:dark\:text-gray-50:where(.dark,.dark *){color:var(--hx-color-gray-50)}.hx\:contrast-more\:dark\:text-gray-100:where(.dark,.dark *){color:var(--hx-color-gray-100)}.hx\:contrast-more\:dark\:text-gray-300:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hx\:contrast-more\:dark\:shadow-\[0_0_0_1px_\#fff\]:where(.dark,.dark *){--tw-shadow:0 0 0 1px var(--tw-shadow-color,#fff);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hx\:contrast-more\:dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hx\:contrast-more\:dark\:hover\:border-gray-50:where(.dark,.dark *):hover{border-color:var(--hx-color-gray-50)}}}@media print{.hx\:print\:\[display\:none\],.hx\:print\:hidden{display:none}.hx\:print\:bg-transparent{background-color:#0000}}}html{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background-color:var(--hx-color-white);width:100%}body:where(.dark,.dark *){background-color:var(--hx-color-dark);color:var(--hx-color-gray-100)}:root{--primary-hue:212deg;--primary-saturation:100%;--primary-lightness:50%;--navbar-height:4rem;--hextra-banner-height:2rem;--menu-height:3.75rem}.dark{--primary-hue:204deg;--primary-saturation:100%;--primary-lightness:50%}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*2);font-size:var(--hx-text-4xl);line-height:var(--tw-leading,var(--hx-text-4xl--line-height));--tw-font-weight:var(--hx-font-weight-bold);font-weight:var(--hx-font-weight-bold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*10);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-neutral-200)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-neutral-200)70%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){padding-bottom:calc(var(--hx-spacing)*1);font-size:var(--hx-text-3xl);line-height:var(--tw-leading,var(--hx-text-3xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--hx-color-neutral-400)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)10%,transparent)}}.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}@media(prefers-contrast:more){.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-400)}}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-2xl);line-height:var(--tw-leading,var(--hx-text-2xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-xl);line-height:var(--tw-leading,var(--hx-text-xl--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-lg);line-height:var(--tw-leading,var(--hx-text-lg--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*8);font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);--tw-tracking:var(--hx-tracking-tight);letter-spacing:var(--hx-tracking-tight);color:var(--hx-color-slate-900)}.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){color:var(--hx-color-slate-100)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--hx-color-primary-600);text-decoration-line:underline;text-decoration-thickness:from-font}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);border-color:var(--hx-color-gray-300);color:var(--hx-color-gray-700);font-style:italic}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){border-left-style:var(--tw-border-style);padding-left:calc(var(--hx-spacing)*6);border-left-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){border-right-style:var(--tw-border-style);padding-right:calc(var(--hx-spacing)*6);border-right-width:2px}.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-gray-700);color:var(--hx-color-gray-400)}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--hx-spacing)*4);--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.content :where(pre):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(code):not(:where(.hextra-code-block code,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*6);border-collapse:collapse;width:100%;padding:calc(var(--hx-spacing)*0);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);display:block;overflow-x:auto}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead{background-color:var(--hx-color-gray-50)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:var(--hx-color-gray-600)}@supports(color:color-mix(in lab,red,red)){.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) thead:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-gray-600)20%,transparent)}}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr{margin:calc(var(--hx-spacing)*0);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*0)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) tr:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) th:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td{margin:calc(var(--hx-spacing)*0);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-gray-300);padding:calc(var(--hx-spacing)*2)}.content :where(table):not(:where(.hextra-code-block table,[class~=not-prose],[class~=not-prose] *)) td:where(.dark,.dark *){border-color:var(--hx-color-gray-600)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:decimal}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*6);list-style-type:disc}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*6)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li{margin-block:calc(var(--hx-spacing)*2)}.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):has(li input[type=checkbox]){list-style-type:none}.content :where(ul,ol)>li>:where(ul,ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:calc(var(--hx-spacing)*0)}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--hx-radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab,var(--hx-color-black)4%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab,var(--hx-color-black)3%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:.25em;padding-block:calc(var(--hx-spacing)*.5);overflow-wrap:break-word;font-size:.9em}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-white)10%,transparent)}}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)){background-color:#0000;border-radius:0}.content :where(pre.mermaid):not(:where(.hextra-code-block pre,[class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){background-color:#0000}.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-inline:auto;margin-block:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-md)}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption{margin-top:calc(var(--hx-spacing)*2);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-500);display:block}.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:where(.dark,.dark *){color:var(--hx-color-gray-400)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt{margin-top:calc(var(--hx-spacing)*6);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd{margin-block:calc(var(--hx-spacing)*2);padding-inline-start:calc(var(--hx-spacing)*6)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-block:calc(var(--hx-spacing)*10);border-color:var(--hx-color-gray-200)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):last-child{margin-bottom:calc(var(--hx-spacing)*0)}.content :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)):where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .footnotes{margin-top:calc(var(--hx-spacing)*12);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height))}.content .footnotes hr{border-color:var(--hx-color-gray-200)}.content .footnotes hr:where(.dark,.dark *){border-color:var(--hx-color-neutral-800)}.content .subheading-anchor{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration))}.content .subheading-anchor:where(:dir(ltr),[dir=ltr],[dir=ltr] *){margin-left:calc(var(--hx-spacing)*1)}.content .subheading-anchor:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:calc(var(--hx-spacing)*1)}span:target+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor),.content .subheading-anchor:focus-visible{opacity:1}span+:is(.content .subheading-anchor),:hover>:is(.content .subheading-anchor){text-decoration-line:none!important}.content .subheading-anchor:after{content:var(--tw-content);color:var(--hx-color-gray-300)}.content .subheading-anchor:where(.dark,.dark *):after{content:var(--tw-content);color:var(--hx-color-neutral-700)}.content .subheading-anchor:after{padding-inline:calc(var(--hx-spacing)*1);--tw-content:"#";content:var(--tw-content)}span:target+:is(){color:var(--hx-color-gray-400)}span:target+:is():where(.dark,.dark *){color:var(--hx-color-neutral-500)}article details>summary::-webkit-details-marker{display:none}article details>summary:before{vertical-align:-4px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx:h-5 hx:w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E");width:1.2em;height:1.2em;padding:0 .6em}:lang(fa) ol{list-style-type:persian}.highlight .chroma .err{color:#a61717;background-color:#e3d2d2}.highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.highlight .chroma .line{display:flex}.highlight .chroma .k,.highlight .chroma .kc,.highlight .chroma .kd,.highlight .chroma .kn,.highlight .chroma .kp,.highlight .chroma .kr{color:#000;font-weight:700}.highlight .chroma .kt{color:#458;font-weight:700}.highlight .chroma .na{color:teal}.highlight .chroma .nb{color:#0086b3}.highlight .chroma .bp{color:#999}.highlight .chroma .nc{color:#458;font-weight:700}.highlight .chroma .no{color:teal}.highlight .chroma .nd{color:#3c5d5d;font-weight:700}.highlight .chroma .ni{color:purple}.highlight .chroma .ne,.highlight .chroma .nf,.highlight .chroma .nl{color:#900;font-weight:700}.highlight .chroma .nn{color:#555}.highlight .chroma .nt{color:navy}.highlight .chroma .nv,.highlight .chroma .vc,.highlight .chroma .vg,.highlight .chroma .vi{color:teal}.highlight .chroma .s,.highlight .chroma .sa,.highlight .chroma .sb,.highlight .chroma .sc,.highlight .chroma .dl,.highlight .chroma .sd,.highlight .chroma .s2,.highlight .chroma .se,.highlight .chroma .sh,.highlight .chroma .si,.highlight .chroma .sx{color:#d14}.highlight .chroma .sr{color:#009926}.highlight .chroma .s1{color:#d14}.highlight .chroma .ss{color:#990073}.highlight .chroma .m,.highlight .chroma .mb,.highlight .chroma .mf,.highlight .chroma .mh,.highlight .chroma .mi,.highlight .chroma .il,.highlight .chroma .mo{color:#099}.highlight .chroma .o,.highlight .chroma .ow{color:#000;font-weight:700}.highlight .chroma .c,.highlight .chroma .ch,.highlight .chroma .cm,.highlight .chroma .c1{color:#998;font-style:italic}.highlight .chroma .cs,.highlight .chroma .cp,.highlight .chroma .cpf{color:#999;font-style:italic;font-weight:700}.highlight .chroma .gd{color:#000;background-color:#fdd}.highlight .chroma .ge{color:#000;font-style:italic}.highlight .chroma .gr{color:#a00}.highlight .chroma .gh{color:#999}.highlight .chroma .gi{color:#000;background-color:#dfd}.highlight .chroma .go{color:#888}.highlight .chroma .gp{color:#555}.highlight .chroma .gs{font-weight:700}.highlight .chroma .gu{color:#aaa}.highlight .chroma .gt{color:#a00}.highlight .chroma .gl{text-decoration:underline}.highlight .chroma .w{color:#bbb}.dark .highlight .chroma .err{color:#f85149}.dark .highlight .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.dark .highlight .chroma .line{display:flex}.dark .highlight .chroma .k{color:#ff7b72}.dark .highlight .chroma .kc{color:#79c0ff}.dark .highlight .chroma .kd,.dark .highlight .chroma .kn{color:#ff7b72}.dark .highlight .chroma .kp{color:#79c0ff}.dark .highlight .chroma .kr,.dark .highlight .chroma .kt{color:#ff7b72}.dark .highlight .chroma .nc{color:#f0883e;font-weight:700}.dark .highlight .chroma .no{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nd{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .ni{color:#ffa657}.dark .highlight .chroma .ne{color:#f0883e;font-weight:700}.dark .highlight .chroma .nf{color:#d2a8ff;font-weight:700}.dark .highlight .chroma .nl{color:#79c0ff;font-weight:700}.dark .highlight .chroma .nn{color:#ff7b72}.dark .highlight .chroma .py{color:#79c0ff}.dark .highlight .chroma .nt{color:#7ee787}.dark .highlight .chroma .nv{color:#79c0ff}.dark .highlight .chroma .l{color:#a5d6ff}.dark .highlight .chroma .ld{color:#79c0ff}.dark .highlight .chroma .s{color:#a5d6ff}.dark .highlight .chroma .sa{color:#79c0ff}.dark .highlight .chroma .sb,.dark .highlight .chroma .sc{color:#a5d6ff}.dark .highlight .chroma .dl{color:#79c0ff}.dark .highlight .chroma .sd,.dark .highlight .chroma .s2{color:#a5d6ff}.dark .highlight .chroma .se,.dark .highlight .chroma .sh{color:#79c0ff}.dark .highlight .chroma .si,.dark .highlight .chroma .sx{color:#a5d6ff}.dark .highlight .chroma .sr{color:#79c0ff}.dark .highlight .chroma .s1,.dark .highlight .chroma .ss,.dark .highlight .chroma .m,.dark .highlight .chroma .mb,.dark .highlight .chroma .mf,.dark .highlight .chroma .mh,.dark .highlight .chroma .mi,.dark .highlight .chroma .il,.dark .highlight .chroma .mo{color:#a5d6ff}.dark .highlight .chroma .o,.dark .highlight .chroma .ow{color:#ff7b72;font-weight:700}.dark .highlight .chroma .c,.dark .highlight .chroma .ch,.dark .highlight .chroma .cm,.dark .highlight .chroma .c1{color:#8b949e;font-style:italic}.dark .highlight .chroma .cs,.dark .highlight .chroma .cp,.dark .highlight .chroma .cpf{color:#8b949e;font-style:italic;font-weight:700}.dark .highlight .chroma .gd{color:#ffa198;background-color:#490202}.dark .highlight .chroma .ge{color:inherit;font-style:italic}.dark .highlight .chroma .gr{color:#ffa198}.dark .highlight .chroma .gh{color:#79c0ff;font-weight:700}.dark .highlight .chroma .gi{color:#56d364;background-color:#0f5323}.dark .highlight .chroma .go,.dark .highlight .chroma .gp{color:#8b949e}.dark .highlight .chroma .gs{font-weight:700}.dark .highlight .chroma .gu{color:#79c0ff}.dark .highlight .chroma .gt{color:#ff7b72}.dark .highlight .chroma .gl{text-decoration:underline}.dark .highlight .chroma .w{color:#6e7681}.hextra-code-block{--tw-leading:calc(var(--hx-spacing)*5);font-size:.9em;line-height:calc(var(--hx-spacing)*5)}.hextra-code-block pre{background-color:var(--hx-color-primary-700);overflow-x:auto}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block pre{--tw-font-weight:var(--hx-font-weight-medium);font-size:.9em;font-weight:var(--hx-font-weight-medium);-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}@media(prefers-contrast:more){.hextra-code-block pre{border-style:var(--tw-border-style);border-width:1px;border-color:var(--hx-color-primary-900)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre{border-color:color-mix(in oklab,var(--hx-color-primary-900)20%,transparent)}}.hextra-code-block pre{--tw-contrast:contrast(150%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.hextra-code-block pre:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}@media(prefers-contrast:more){.hextra-code-block pre:where(.dark,.dark *){border-color:var(--hx-color-primary-100)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block pre:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-primary-100)40%,transparent)}}}.hextra-code-block .hextra-code-filename{top:calc(var(--hx-spacing)*0);z-index:1;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:var(--hx-radius-xl);border-top-right-radius:var(--hx-radius-xl);background-color:var(--hx-color-primary-700);width:100%;position:absolute;overflow:hidden}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename{background-color:color-mix(in oklab,var(--hx-color-primary-700)5%,transparent)}}.hextra-code-block .hextra-code-filename{padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*2);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));color:var(--hx-color-gray-700)}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:var(--hx-color-primary-300)}@supports(color:color-mix(in lab,red,red)){.hextra-code-block .hextra-code-filename:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-primary-300)10%,transparent)}}.hextra-code-block .hextra-code-filename:where(.dark,.dark *){color:var(--hx-color-gray-200)}.hextra-code-block .hextra-code-filename+pre:not(.lntable pre){padding-top:calc(var(--hx-spacing)*12)}.hextra-code-block pre:not(.lntable pre){margin-bottom:calc(var(--hx-spacing)*4);border-radius:var(--hx-radius-xl);padding-inline:calc(var(--hx-spacing)*4);padding-block:calc(var(--hx-spacing)*4)}.hextra-code-block div:nth-of-type(2) pre{padding-top:calc(var(--hx-spacing)*12);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .lntable{margin:calc(var(--hx-spacing)*0);border-radius:var(--hx-radius-xl);width:auto;display:block;overflow:auto}.chroma .lntable pre{padding-top:calc(var(--hx-spacing)*4);padding-bottom:calc(var(--hx-spacing)*4)}.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line){min-width:2.6rem;padding-right:calc(var(--hx-spacing)*4);padding-left:calc(var(--hx-spacing)*4);color:var(--hx-color-neutral-600)}:is(.chroma .ln,.chroma .lnt:not(.hl>.lnt),.chroma .hl:not(.line)):where(.dark,.dark *){color:var(--hx-color-neutral-300)}.chroma .lntd{padding:calc(var(--hx-spacing)*0);vertical-align:top}.chroma .lntd:last-of-type{width:100%}.chroma .hl{background-color:var(--hx-color-primary-800);width:100%;display:block}@supports(color:color-mix(in lab,red,red)){.chroma .hl{background-color:color-mix(in oklab,var(--hx-color-primary-800)10%,transparent)}}.hextra-cards{grid-template-columns:repeat(auto-fill,minmax(max(250px,calc((100% - 1rem*2)/var(--hextra-cards-grid-cols))),1fr))}.hextra-card{position:relative}.hextra-card img{-webkit-user-select:none;user-select:none}.hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card .hextra-card-icon svg{color:#0003;width:1.5rem;transition:color .3s}.hextra-card p{margin-top:.5rem;position:relative}.dark .hextra-card .hextra-card-icon svg{color:#fff6}.dark .hextra-card:hover .hextra-card-icon svg{color:currentColor}.hextra-card-tag{z-index:10;position:absolute;top:5px}.hextra-card-tag:where(:dir(ltr)){right:5px}.hextra-card-tag:where(:dir(rtl)){left:5px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker){counter-increment:step}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(ltr),[dir=ltr],[dir=ltr] *):before{content:var(--tw-content);margin-left:-41px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(:dir(rtl),[dir=rtl],[dir=rtl] *):before{content:var(--tw-content);margin-right:-44px}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);background-color:var(--hx-color-gray-100)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);background-color:var(--hx-color-neutral-800)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:4px;border-color:var(--hx-color-white)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):where(.dark,.dark *):before{content:var(--tw-content);border-color:var(--hx-color-dark)}.hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step);text-align:center;text-indent:-1px;width:33px;height:33px;font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-font-weight:var(--hx-font-weight-normal);font-weight:var(--hx-font-weight-normal);color:var(--hx-color-neutral-400);border-radius:340282e33px;position:absolute}:lang(fa) .hextra-steps :where(h2,h3,h4,h5,h6):not(.no-step-marker):before{content:counter(step,persian)}.hextra-search-wrapper li{margin-inline:calc(var(--hx-spacing)*2.5);border-radius:var(--hx-radius-md);overflow-wrap:break-word;color:var(--hx-color-gray-800)}@media(prefers-contrast:more){.hextra-search-wrapper li{border-style:var(--tw-border-style);border-width:1px;border-color:#0000}}.hextra-search-wrapper li:where(.dark,.dark *){color:var(--hx-color-gray-300)}.hextra-search-wrapper li a{scroll-margin:calc(var(--hx-spacing)*12);padding-inline:calc(var(--hx-spacing)*2.5);padding-block:calc(var(--hx-spacing)*2);display:block}.hextra-search-wrapper li a:focus-visible{--tw-outline-style:none;outline-style:none}.hextra-search-wrapper li .hextra-search-title{font-size:var(--hx-text-base);line-height:var(--tw-leading,var(--hx-text-base--line-height));--tw-leading:calc(var(--hx-spacing)*5);line-height:calc(var(--hx-spacing)*5);--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold)}.hextra-search-wrapper li .hextra-search-active{border-radius:var(--hx-radius-md);background-color:var(--hx-color-primary-500)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper li .hextra-search-active{background-color:color-mix(in oklab,var(--hx-color-primary-500)10%,transparent)}}@media(prefers-contrast:more){.hextra-search-wrapper li .hextra-search-active{border-color:var(--hx-color-primary-500)}}.hextra-search-wrapper .hextra-search-no-result{padding:calc(var(--hx-spacing)*8);text-align:center;font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));color:var(--hx-color-gray-400);-webkit-user-select:none;user-select:none;display:block}.hextra-search-wrapper .hextra-search-prefix{margin-inline:calc(var(--hx-spacing)*2.5);margin-top:calc(var(--hx-spacing)*6);margin-bottom:calc(var(--hx-spacing)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix{border-color:color-mix(in oklab,var(--hx-color-black)10%,transparent)}}.hextra-search-wrapper .hextra-search-prefix{padding-inline:calc(var(--hx-spacing)*2.5);padding-bottom:calc(var(--hx-spacing)*1.5);font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));--tw-font-weight:var(--hx-font-weight-semibold);font-weight:var(--hx-font-weight-semibold);color:var(--hx-color-gray-500);text-transform:uppercase;-webkit-user-select:none;user-select:none}.hextra-search-wrapper .hextra-search-prefix:first-child{margin-top:calc(var(--hx-spacing)*0)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix{border-color:var(--hx-color-gray-600);color:var(--hx-color-gray-900)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)20%,transparent)}}.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){color:var(--hx-color-gray-300)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-prefix:where(.dark,.dark *){border-color:var(--hx-color-gray-50);color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{margin-top:calc(var(--hx-spacing)*1);font-size:var(--hx-text-sm);line-height:var(--tw-leading,var(--hx-text-sm--line-height));--tw-leading:1.35rem;text-overflow:ellipsis;color:var(--hx-color-gray-600);line-height:1.35rem;overflow:hidden}.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-400)}@media(prefers-contrast:more){.hextra-search-wrapper .hextra-search-excerpt:where(.dark,.dark *){color:var(--hx-color-gray-50)}}.hextra-search-wrapper .hextra-search-excerpt{line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box}.hextra-search-wrapper .hextra-search-match{color:var(--hx-color-primary-600)}@media(max-width:48rem){.hextra-sidebar-container{top:calc(var(--hx-spacing)*0);bottom:calc(var(--hx-spacing)*0);z-index:15;overscroll-behavior:contain;background-color:var(--hx-color-white);width:100%;padding-top:calc(var(--navbar-height) + var(--hextra-banner-height));position:fixed}.hextra-sidebar-container:where(.dark,.dark *){background-color:var(--hx-color-dark)}.hextra-sidebar-container{will-change:transform,opacity;contain:layout style;backface-visibility:hidden;transition:transform .4s cubic-bezier(.52,.16,.04,1)}}.hextra-sidebar-container li>.hextra-sidebar-children{height:calc(var(--hx-spacing)*0)}.hextra-sidebar-container li.open>.hextra-sidebar-children{height:auto;padding-top:calc(var(--hx-spacing)*1)}.hextra-sidebar-container li.open>.hextra-sidebar-item>.hextra-sidebar-collapsible-button>svg>path{rotate:90deg}.hextra-banner-hidden .hextra-banner{display:none}.hextra-banner :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline;text-decoration-thickness:from-font}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--hx-spacing)*7);line-height:calc(var(--hx-spacing)*7)}.hextra-banner :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:calc(var(--hx-spacing)*0)}nav .hextra-search-wrapper{display:none}@media(min-width:48rem){nav .hextra-search-wrapper{display:inline-block}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-nav-container-blur{background-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur{background-color:color-mix(in oklab,var(--hx-color-white)85%,transparent)}}.hextra-nav-container-blur{--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-nav-container-blur:where(.dark,.dark *){background-color:var(--hx-color-dark)!important}@supports(color:color-mix(in lab,red,red)){.hextra-nav-container-blur:where(.dark,.dark *){background-color:color-mix(in oklab,var(--hx-color-dark)80%,transparent)!important}}}.hextra-hamburger-menu svg g{transform-origin:50%;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg path{opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open path{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:0s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open g{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.1s;--tw-ease:var(--hx-ease-out);transition-duration:.1s;transition-delay:.1s;transition-timing-function:var(--hx-ease-out)}.hextra-hamburger-menu svg.open>path{opacity:0}.hextra-hamburger-menu svg.open>g:first-of-type{rotate:45deg}.hextra-hamburger-menu svg.open>g:first-of-type path{--tw-translate-y:calc(var(--hx-spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-hamburger-menu svg.open>g:nth-of-type(2){rotate:-45deg}.hextra-hamburger-menu svg.open>g:nth-of-type(2) path{--tw-translate-y:calc(var(--hx-spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.hextra-scrollbar,.hextra-scrollbar *{scrollbar-width:thin;scrollbar-color:oklch(55.55% 0 0/.4)transparent;scrollbar-gutter:stable}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar{height:calc(var(--hx-spacing)*3);width:calc(var(--hx-spacing)*3)}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-track{background-color:#0000}:is(.hextra-scrollbar,.hextra-scrollbar *)::-webkit-scrollbar-thumb{border-radius:10px}:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{background-color:var(--tw-shadow-color);--tw-shadow-color:var(--hx-color-neutral-500);background-clip:content-box;border:3px solid #0000}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}@media(hover:hover){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:var(--hx-color-neutral-500)}@supports(color:color-mix(in lab,red,red)){:is(.hextra-scrollbar,.hextra-scrollbar *):hover::-webkit-scrollbar-thumb:hover{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--hx-color-neutral-500)40%,transparent)var(--tw-shadow-alpha),transparent)}}}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.hextra-code-copy-btn{opacity:.85;--tw-backdrop-blur:blur(var(--hx-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.hextra-code-copy-btn:where(.dark,.dark *){opacity:.8}}@media(min-width:1024px){.hextra-feature-grid{grid-template-columns:repeat(var(--hextra-feature-grid-cols),minmax(0,1fr))}}.hextra-jupyter-code-cell{scrollbar-gutter:auto;margin-top:calc(var(--hx-spacing)*6)}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container{font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:hidden}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs{max-height:50vh;overflow:auto}.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre{max-width:100%;font-size:var(--hx-text-xs);line-height:var(--tw-leading,var(--hx-text-xs--line-height));overflow:auto}.hextra-badge{align-items:center;display:inline-flex}.hextra-toc a.hextra-toc-active{transition-property:all;transition-timing-function:var(--tw-ease,var(--hx-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hx-default-transition-duration));--tw-duration:.2s;transition-duration:.2s;color:var(--hx-color-gray-900)!important}.hextra-toc a.hextra-toc-active:where(.dark,.dark *){color:var(--hx-color-gray-50)!important}.hextra-archive-timeline{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--hx-color-black)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline{border-color:color-mix(in oklab,var(--hx-color-black)15%,transparent)}}.hextra-archive-timeline:where(.dark,.dark *){border-color:var(--hx-color-white)}@supports(color:color-mix(in lab,red,red)){.hextra-archive-timeline:where(.dark,.dark *){border-color:color-mix(in oklab,var(--hx-color-white)15%,transparent)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}:root{--hextra-navbar-height:168px}.hextra-nav-container nav{min-height:168px!important;height:168px!important} \ No newline at end of file diff --git a/public/css/custom.css b/public/css/custom.css deleted file mode 100644 index 639180b..0000000 --- a/public/css/custom.css +++ /dev/null @@ -1,8 +0,0 @@ -:root { - --hextra-navbar-height: 80px; -} - -.hextra-nav-container nav { - min-height: 80px !important; - height: 80px !important; -} diff --git a/public/css/variables.css b/public/css/variables.css deleted file mode 100644 index f4f9ef7..0000000 --- a/public/css/variables.css +++ /dev/null @@ -1,26 +0,0 @@ -/* Hugo template to derive CSS variables from site and page parameters */ - -/* Do not remove the following comment. It is used by Hugo to render CSS variables.*/ - -:root { - --hextra-max-page-width: 80rem; - --hextra-max-content-width: 72rem; - --hextra-max-navbar-width: 80rem; - --hextra-max-footer-width: 80rem; -} - -.hextra-max-page-width { - max-width: var(--hextra-max-page-width); -} - -.hextra-max-content-width { - max-width: var(--hextra-max-content-width); -} - -.hextra-max-navbar-width { - max-width: var(--hextra-max-navbar-width); -} - -.hextra-max-footer-width { - max-width: var(--hextra-max-footer-width); -} diff --git a/public/en.search-data.json b/public/en.search-data.json deleted file mode 100644 index 8530a1d..0000000 --- a/public/en.search-data.json +++ /dev/null @@ -1 +0,0 @@ -{"/about/":{"data":{"":"Kushidou 什么都学,却什么都不精通的一个小白 :P\nGitHub Bilibili","技能与方向#技能与方向":"嵌入式开发 — Linux 系统开发、驱动调试、交叉编译 开源软件 — Docker、Hugo、各类 CLI 工具 网络与服务 — 自建 NAS、内网穿透、家庭服务器 摄影 — 风光 / 街拍 / 生活记录","自我介绍#自我介绍":"我是一名嵌入式工程师,平时喜欢折腾各种开源软件和硬件。这个博客用来记录技术探索过程中的笔记和心得,也包括一些日常生活和摄影的分享。"},"title":"关于我"},"/glossary":{"data":{},"title":"Glossary"},"/posts/210218-teamspeakwithdocker/":{"data":{"":"TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。","docker及其安装#Docker及其安装":"docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。\n我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:\nsudo yum install docker\t#安装docker程序,会自动选择合适的 sudo systemctl start docker\t#启动docker服务 sudo systemctl enable docker\t#允许docker开机自启","docker安装ts#Docker安装TS":"docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak\n直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。","teamspeak#Teamspeak":"TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。\n所以,选择docker安装ts就是一个很不错的选择。","端口#端口":"从指令可以看出,docker需要使用到9987,10011,30033三个端口,所以需要到服务器后台开启防火墙上对应端口。","管理员密钥#管理员密钥":"TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。\ndocker ps -a查找所有容器。\ndocker logs -f [CONTATINER ID]查看log,找到token即可。客户端设置之后再说。\n密钥只会在第一次运行时打印,注意保存。\n参考:https://woolio.cn/683/"},"title":"使用Docker安装TeamSpeak"},"/posts/210311-multitouchscreeninlinux/":{"data":{"":"由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。\n2021-03-22更新部分内容 2021-04-28再次更新内容\n2021-09-14 文章已有新版本,请访问《Linux处理多触屏的终极解决方案》","参考#参考:":"[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 [2]https://blog.csdn.net/qq_33406883/article/details/106649087 [3]https://segmentfault.com/a/1190000020334077","后续问题#后续问题":"当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。 当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数 如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。","尝试解决#尝试解决":"首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。 然后xinput list-props $id查看设备的VID,这个在后续自动化处理有用。 xrandr查看$显示器名称","自动化处理#自动化处理":"# 2021-04-28更新: # 本部分后面的都可以不看了! xinput map-to-output \"DEVICE_NAME\" DISPLAY # 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, # 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~ 仅作归档!下面这些方法过于繁琐!\n利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。bash this.sh VID1 VID2 ScreenID\n#!/bin/bash # 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。 # 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。 MYID_FIRST=$1 MYID_SECOND=$2 OUT_PUT=$3 for I in $(xinput list --id-only) do #[1] CUR_FIRST=$(xinput list-props $I|grep \"Device Product ID\"|awk -F : '{print $2}'|awk -F , '{print $1}'|awk '{print $1}') CUR_SECOND=$(xinput list-props $I|grep \"Device Product ID\"|awk -F : '{print $2}'|awk -F , '{print $2}'|awk '{print $1}') if [ \"$MYID_FIRST\" == \"$CUR_FIRST\" ] \u0026\u0026 [ \"$MYID_SECOND\" == \"$CUR_SECOND\" ]; then MY_INDEX=$I break; fi done xinput map-to-output $MY_INDEX $OUT_PUT #./this.sh VID VID HDMI2 #./this.sh VID VID HDMI1 #!/bin/bash # 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。 TOUCH_ID=$(xinput | grep -iw DEVICE_NAME) TOUCH_ID=$(echo ${TOUCH_ID#*id=}) TOUCH_ID=$(echo ${TOUCH_ID%% *}) xinput map-to-output $TOUCH_ID SCREEN_NAME 此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id。\n经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在~/.bashrc中,这样只需要打开一次终端,就可以实现屏幕重新映射。","触屏校准如果需要#触屏校准(如果需要)":"网上说的利用校准来区分多触摸屏的方法是完全错误的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)\nsudo apt install xinput-calibrator,需要更新源 sudo xinput_calibrator 将校准信息保存到/usr/share/X11/xorg.conf.d/10-evdev.conf的\"Driver evdev”下面一行,重启生效。","问题来源#问题来源":"最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为\nxinput map-to-output $触屏设备id $显示屏名称\n2021-04-28更新\nxinput map-to-output指令支持触摸屏名称作为参数,比如我通过xinput指令看到有一个触摸屏的设备名称为ILITEK XXXX,那么我映射的时候直接输入\nxinput map-to-output \"ILITEK XXX\" HDMI-1"},"title":"Linux多显示器触屏调试与暂行解决方案"},"/posts/210311-serialmodeandudevinlinux/":{"data":{"":"配置串口权限,顺便看一下linux的udev规则。","udev规则#udev规则":"udev是什么?udev是Linux下的设备文件管理方式,运行在用户侧(devfs在内核侧管理设备文件)。有了udev,/dev目录下的文件就都是真实存在的已连接的设备了。\nudev的规则都保存在/etc/udev/rules.d目录下,文件名的格式为数字-名称.rules,数字表示加载顺序,一般是从小往大加载;名称按功能自定义,最后以.rules结尾。这些规则会在设备接入时生效。\n规则文件按行执行,每行分为两个部分:匹配和赋值,每个参数使用逗号,分割。\n(这段复制自引用2,仅供参考)。 1、udev 规则的所有操作符 == 比较键、值,若等于,则该条件满足; != 比较键、值,若不等于,则该条件满足; = 对一个键赋值; += 为一个表示多个条目的键赋值。 := 对一个键赋值,并拒绝之后所有对该键的改动,防止后面的规则文件对该键重赋值。\n2、udev 规则的匹配键 ACTION 事件 (uevent) 的行为,例如:add、remove。 KERNEL 内核设备名称,例如:sda, cdrom。 DEVPATH 设备的 devpath 路径。 SUBSYSTEM 设备的子系统名称,例如:sda 的子系统为 block。 BUS 设备在 devpath 里的总线名称,例如:usb。 DRIVER 设备在 devpath 里的设备驱动名称,例如:ide-cdrom。 ID 设备在 devpath 里的识别号。 SYSFS{filename} 设备的 devpath 路径下,设备的属性文件“filename”里的内容。 ENV{key} 环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。 PROGRAM 调用外部命令。 RESULT 外部命令 PROGRAM 的返回结果。\n3、udev 的重要赋值键 NAME /dev目录下显示的文件名重命名 SYMLINK 为 /dev下文件进行符号链接,防止覆盖系统默认产生的文件 OWNER, GROUP, MODE 为设备设定权限。 ENV{key} 导入一个环境变量。\n4、udev 的值和可调用的替换操作符 Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符: $kernel, %k 设备的内核设备名称,例如:sda、cdrom。 $number, %n 设备的内核号码,例如:sda3 的内核号码是 3。 $devpath, %p 设备的 devpath路径。 $id, %b 设备在 devpath里的 ID 号。 $sysfs{file}, %s{file} 设备的 sysfs里 file 的内容。其实就是设备的属性值。 $env{key}, %E{key} 一个环境变量的值。 $major, %M 设备的 major 号。 $minor %m 设备的 minor 号。 $result, %c PROGRAM 返回的结果。 $parent, %P 父设备的设备文件名。 $root, %r udev_root的值,默认是 /dev/。 $tempnode, %N 临时设备名。 %% 符号 % 本身。 $$ 符号 $ 本身。","xxxrules#xxx.rules":"sudo vi /etc/udev/rules.d/70-tty-usb-rules,写入以下内容:\nKERNEL==\"ttyS*\",MODE=\"0666\" KERNEL==\"ttyUSB*\",MODE=\"0666\" 这一段的意思是匹配所有ttyS和ttyUSB,插入时都赋予0666的权限,即所有用户都可读可写。重新加载一下设备,就可以按规则配置权限进行操作了。","串口的问题#串口的问题":"在现场开发的同事反映UOS工控机没有配置串口,每次都需要sudo才能使用。(明明在家里你们都会自己配置好环境与权限,为什么到了现场反而不会了需要我提供协助呢?)\n我之前没考虑过这个问题,认为串口就是得root权限操作才安全。但是既然提出了需求,就赶紧百度并测试一下吧。","参考#参考":"[1]https://www.cnblogs.com/qixianyu/p/6869744.html [2]https://www.cnblogs.com/cslunatic/p/3171837.html","赋予普通用户串口权限的两种方法#赋予普通用户串口权限的两种方法":"在百度上,给普通用户串口权限有两种主流方法(可能2会了,Google上不去),一种是将用户放入特殊的用户组,从而获得权限。另一种是加入udev规则,在串口插入时自动更改权限。\n我个人更倾向于使用第二种方案,因为公司中不同的人装系统就可能起不同的名字,之后进入生产环境可能又会起新的名字,所以采用第二种设置规则的办法,便于之后制作恢复镜像和一键部署。"},"title":"Linux串口和udev理解"},"/posts/210328-linuxchangemacip/":{"data":{"linux调整网卡mac地址指令#Linux调整网卡MAC地址(指令)":"当Linux的图形界面没有或失效的时候,该如何更改mac地址?\nLinux调整网卡MAC地址(指令)有的时候需要使用欺骗的方法为电脑设置新的mac,比如存在上网网卡限制,或者想要隐藏自己的真实mac地址。这里列举三种修改mac的方法,适用于Debian系的Linux,其他的应该类似。","备注#备注:":"以上两种方法是软件层面的修改,不会对硬件造成损伤,重启之后就能恢复如初。如果是要长期有效,可以把这些命令写入脚本开机自启。除了这两个,还有另一种软修改的方法,因为我总是提示失败就遗忘了。\n有些方法会提到修改/etc目录下的文件实现MAC地址的修改,但是我一个文件都没找到(UOS),这个是因系统而异的,不同的发行版可以选择性的编译这些文件,就会造成有人有有人没有,因为没有实践,所以就不写在这里了。","如果以上方法都无法修改则建议申请新的ip#如果以上方法都无法修改,则建议申请新的ip。。。":"文章首发于香风家的小别墅,转载请携带出处。","方法一ifconfig#方法一:ifconfig":"# ifconfig 查看网卡名称$NAME # 需要sudo权限 ifconfig $NAME down ifconfig $NAME hw ether $NEW_MAC ifconfig $NAME up # 使用ifconfig检查有没有改变","方法三ethtool慎用#方法三:ethtool(慎用)":"以上方法都失效,可以直接修改网卡的物理MAC地址,修改后无法恢复,慎用\n# 首先检查mac是否支持修改 ethtool -i $NAME # 如果 supports-eeprom-access: no,大概率不支持修改 # 查看网卡的mac寄存器 ethtool -e $NAME # 如果无法读取,大概率不支持修改 # 修改mac,按字节修改 ethtool -E $NAME offset 0 value 0xAA ethtool -E $NAME offset 1 value 0xBB ethtool -E $NAME offset 2 value 0xCC ...共六行 # 如果修改无效,则驱动不支持修改","方法二macchanger#方法二:macchanger":"sudo apt install macchanger,安装过程提示是否自启,随便。\nifconfig $NAME down macchanger -m $NEW_MAC $NAME ifconfig $NAME up ps:macchanger可以附加多种参数,如-m指定mac地址,-s查看状态,-r随机地址"},"title":"Linux修改mac地址"},"/posts/210420-linuxmorethan4serialport/":{"data":{"":"工控板安装Linux常常最多只能看到四个串口,通过修改引导文件可以显示所有的串口。","先说结论#先说结论":"# 1.修改开机grub文件 sudo vi /etc/default/grub # 2.在\"GRUB_CMDLINE_LINUX_DEFAULT=\"一行的结尾空格,添加内容 8250.nr_uarts=8 # 3.更新开机引导并重启 sudo update-grub","再说细节#再说细节":"给带有多串口的工控机安装国产Linux操作系统UOS,发现/dev/ttyS只有四个,而且一个都不通,其实这是Linux 的通病,如果发行商没有提前配置,我们只能看到四个不能用的串口。但是工控机都有8-16个串口,不得不想办法让他们能够正常使用,而许多串口芯片只需要基本的驱动就能运行,也不提供专有驱动的源代码编译(一般安装专用驱动后,串口名称会改变,比如xr17v358芯片的驱动安装后名称变成ttyXR0),我们只有从linux本身下手了。\n经过多番查找资料,虽然不知道为什么,但是我们应该修改/etc/default/grub文件,其中有一行是这样的:\nGRUB_CMDLINE_LINUX_DEFAULT=\"这里面 的内容 先不管 它\" 我看了UOS(含Deepin)、Ubuntu和服务器的Centos7都有,在这一行的最后添加8250.nr_uart=32,其中数字\u003c=32都行,效果如下:\nGRUB_CMDLINE_LINUX_DEFAULT=\"这里面 的内容 先不管 它 8250.nr_uarts=32\" 然后更新一下系统的引导\nsudo update-gurb reboot 重启完了你就能看到更多的串口啦!配合修改udev规则,你就可以用普通用户的权限使用串口通信了。但是请注意其他隐患,比如这个芯片配合基本驱动只能完成基础的收发功能,流控的RTS、CTS等还是需要专用驱动实现的!","参考#参考:":"https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/\n核心步骤就参考了这个,在Linux方面大家还是多用google,多用英文去搜索吧!","最后吐槽#最后吐槽":"为了串口问题我找了一下午的资料,最后才在外网找到了一个能用的。国内的教程都是说要修改/boot/gurb/gurb2,宝友,这可不兴改啊,这个改坏了系统可就没了啊!这些文件普通用户连浏览权限都没就可见其重要性。"},"title":"Linux启用四个以上的串口"},"/posts/210429-deepinautorun/":{"data":{"":"修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。","uosdeepin和ubuntu#UOS/Deepin和Ubuntu":"cp ~/Desktop/刚刚的.desktop ~/.config/autostart\n需要这个的原因主要是我执行触摸屏映射的指令经常会在桌面启动前(lightdm.service)执行,导致error从而无法进入桌面,将脚本放进/etc/profile.d之后第二天就失效了,所以需要一个在登录桌面后就实现自动执行的功能,多种方法对比下来还是放进桌面环境的开机自启文件夹比较靠谱。这样一般会在进入桌面后5-10秒自动执行,稳定性大幅提高。\n经过实际查阅资料和测试,Ubuntu1604也完全适用上面的步骤,只不过可能需要在~/.config/下手动创建一个autostart目录。由于1604已经停止支持,许多人转入了更新的ubuntu系统,猜测近几年的也可以尝试一下。","开始菜单#开始菜单":"sudo cp ~/Desktop/刚刚的.desktop /usr/share/applications,过一会或者注销重新登录就能看到开始菜单的响应类型下出现这个快捷方式了。","开机自动执行#开机自动执行":"","桌面快捷方式#桌面快捷方式":"deepin的桌面快捷方式是以*.desktop文件的形式实现的,所以我们需要添加自定义快捷方式的话,只要在桌面添加要给desktop格式的文本文件,编辑内容\n[Desktop Entry]\rName=ddd\rExec=\"/usr/sbin/xx.sh\"\rType=Application 其中Desktop Entry表示声明该文件为快捷方式文件。Name是这个文件要显示的名字,设置了之后就可以隐藏原名称和扩展名。Exec是程序的启动脚本,或者启动指令。Type是程序类型,在开始菜单的分类中可以体现。以上四行是必须要有的参数,还有一些其他的参数不影响执行。Exec的脚本必须赋予777权限以执行。\n把这个文件放在~/Desktop,就可以看到桌面上多了一个快捷方式了。","麒麟和其他使用x11桌面的linux#麒麟和其他使用X11桌面的Linux":"本条目包含UOS和Ubuntu、deepin系统\n自启动目录为/etc/xdg/autostart,同样的desktop文件放进去即可。但是麒麟中我使用上面的基础desktop报错,可能需要添加其他内容。"},"title":"deepin和UOS,快捷方式,开机自启动"},"/posts/210630-sudowithoutpasswd/":{"data":{"":"记录一种可以免密码使用sudo的方法。\n每次使用sudo提权,常常要输密码太烦了,所以想给自己赋予免密码的特权。\n首先登录root用户: sudo -i\n这个操作的核心文件是/etc/sudoers,可以看到这个文件是只读的,要修改他需要先赋予写入权限。\nchmod 666 /etc/sudoers 使用vim修改文件,vi /etc/sudoers,把当前用户和用户组加入,如图 # 表示为该用户免密码 yourname\tALL=(ALL:ALL) NOPASSWD:ALL # 表示为该用户组免密码 %yourname\tALL=(ALL:ALL) NOPASSWD:ALL # 不用严格按照次形式,与你的这个文件中root的格式对应即可。 :wq保存,把sodoers改回只读 chmod 440 /etc/sudoers 完成~~~ 把终端关掉再次打开就应该能看到效果了。 PS. 不可使用sudo chmod\n一定要直接sudo -i进入root用户,如果使用sudo chmod以普通用户的身份修改sudoers文件的话,改完会发现无法使用sudo指令把权限改回去了,提示“任何人可读写,无法找到有效的sudoers”。其实还有一种更加安全的操作,但是那个编辑器用起来没有vim顺手,\n参考:https://blog.csdn.net/wxqee/article/details/72718869"},"title":"免密码使用sudo"},"/posts/210719-gpuinfoinlinux/":{"data":{"":"在Linux下获得AMD GPU的状态和温度信息。\n在Linux下如果要查看Nvidia GPU的状态信息,可以使用Nvidia驱动自带的工具。而AMD显卡一般都是使用的开源驱动,这种情况下如何获得显卡的状态和占用呢?\n文章部分图片之后再附","1获取gpu信息#1、获取GPU信息":"如需获得GPU的信息(型号、驱动)等,如果系统提供类似*“设备管理器”*的工具可以打开查看。或者就是用lspci指令查看。\n# 获得所有PCIe设备,在其中找到AMD GPU [exam@ple]:~$ lspci 00:02.0 VGA compatible controller: xxxxxxxx [exam@ple]:~$ lspci -v -s 00:02.0 # 这里就会显示显卡的具体信息了,包括型号、驱动等,之后补充","2gpu占用率#2、GPU占用率":"显卡占用率是一个能反映负载的直观指标,AMD显卡可以通过安装radeontop软件查看。\n最上面是GPU管道使用,大概类似于总体使用率的东西;最下面是内存使用率,使用sudo权限能看到更多信息。其他项目可以到radeontop的Github页面查看。","3温度#3、温度":"特指GPU温度。查阅这篇文章所涉及的知识点的最初目的,也是确认机箱过热是否是GPU的问题。\nGPU温度使用第三方软件查看,并使其实时更新。查看温度使用sensors指令,通过安装lm-sensors实现。执行sensors时只会显示一次,我们可以利用watch指令定时刷新温度显示:\nwatch -n 2 sensors # 每隔2秒执行sensors指令显示结果 ![watch执行结果](图片占位)"},"title":"Linux中获得AMD显卡的状态信息"},"/posts/210824-linuxtouchscreenfin/":{"data":{"":"一般Linux操作系统接入多个触摸屏的最终解!\n从21年3月中旬开始,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。\n重要: 本文全文基于软件xinput\n更重要: 如简介所说,仍有一种方法无法对应,具体为【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。","0核心xinput#0、核心:xinput":"xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)\nxinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级\nxinput list –id-only : 仅仅列出设备ID(序号,每次开机都可能改变)\nxinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕\nxinput list-props : 列出某个设备的详细信息,后接参数为设备ID。","1简约两个完全不同的触摸显示器#1、简约:两个完全不同的触摸显示器":"xinput map-to-output \"$DEVICE NAME A\" PORT-A\n这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。\n首先通过xinput查看所有的输入设备:\n~$ xinput ┌ Virtual core pointer\tid=2 [master pointer (3)] |\tILITEK TLITEK-TP\tid=9 [slave pointer (2)] |\tILITEK Multi-Touch\tid=7 [slave pointer (2)] (下略) 可以看到ILITEK ILITEK-TP和ILITEK Multi-Touch显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:\nxinput map-to-output \"ILITEK ILITEK-TP\" HDMI-0\nxinput map-to-output \"ILITEK Multi-Touch\" HDMI-1\n这种方式的要点是1.必须带英文\"\",2.引号内名称须完整。map-to-output所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。","2复杂但通用vidpid不同的显示器#2、复杂但通用:VID:PID不同的显示器":"不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。\n通过xinput list-props [id]可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。list-props的结果示例如下:\n(后续再补) 其中Device Product ID一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:\n#!/bin/bash # 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息: # 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段 VIDA=222a PIDA=0001 PORTA=VGA-0 # 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行 # 或者这里直接填写Device Product ID里面的结果,先VID后PID。 # 字母O,不是数字0,多屏重复本段 VIDA_O=$((16#$VIDA)) PIDA_O=$((16#$PIDA)) # =========自动处理步骤,请勿随意修改========== for I in $(xinput list --id-only) do # 根据设备ID取其序号 CUR_FIRST=$(xinput list-props $I|grep \"Device Product ID\"|awk -F : '{print $2}'|awk -F , '{print $1}'|awk '{print $1}') CUR_SECOND=$(xinput list-props $I|grep \"Device Product ID\"|awk -F : '{print $2}'|awk -F , '{print $2}'|awk '{print $1}') # 3、屏映射,多屏重复本段 if [ \"$VIDA_O\" == \"$CUR_FIRST\" ] \u0026\u0026 [ \"$PIDA_O\" == \"$CUR_SECOND\" ]; then xinput map-to-output $I $PORTA fi done exit 0 这个脚本使用xinput list --id-only仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用map-to-output进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。","32的进阶版#3、[2]的进阶版":"前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。\n在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是pyudev库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装python3+pyudev,并且使用desktop文件在开机时启动,即可。\n#!/usr/bin/python3 # -- coding: UTF-8 -- # -- Author: Blues -- import pyudev import os context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by(subsystem='hid') for device in iter(monitor.poll, None): if device.driver != \"hid-multitouch\": continue if device.action == \"add\" or device.action == \"change\": os.system(\"/var/my-touchscreen/remap-screen\") 上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照设备名、VID、UID、物理接口四大特征,自动映射到对应的显示屏上了。"},"title":"Linux处理多触屏的终极解决方案"},"/posts/210914-linuxbackupdd/":{"data":{"":"害,谁不是个DD (誰でも 大好き)了呢!\n但是这玩意儿太慢了。。。","dd备份#DD备份":"dd if=/dev/sda of=/dev/sdb\t=\u003e 备份整个磁盘到另外一个磁盘 dd if=/dev/sdb of=sda.img\t=\u003e 备份整个磁盘为某个文件 dd if=/dev/sda | gzip \u003e sda.img =\u003e 备份并且压缩 dd if=/dev/sda bs=1M | gzip \u003e sda.img\t=\u003e 指定块大小,备份并压缩(据说能提速)","dd复原#DD复原":"dd if=/dev/sdb of=/dev/sda\t=\u003e从另一个磁盘恢复回来 gzip -dc sda.img | dd of=/dev/sda\t=\u003e从压缩的文件恢复出来 gzip -dc sda.img | dd of=/dev/sda bs=1M\t=\u003e前面指定了块大小,这里也需要","dd说明#DD说明":"dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。\ndd指令依然是有多少数据占多少空间,所以我们可以使用gzip进行压缩。具体代码后面贴出来。\n实际使用中,发现dd指令除了方便,就没有其他优点了。它因为要读取硬盘所有数据(包括垃圾数据),即便用SSD,读盘速度还是会很慢,三刻钟才读了200GiB数据,平均75MB/s,而使用uos自带的deepin-clone,三个系统都备份完了。","参考#参考:":"本文参考(抄)了以下内容:\nLinux 下使用 dd 和 gzip 命令来代替 Ghost 做磁盘镜像\nlinux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)\n还有一些查找过程中作用不大的页面,就不贴出来了(诶嘿(╹ڡ╹ )","起因#起因":"使用UOS的时候经常需要备份镜像并分享给其他部门或者办事处的人。传统的方法是进入系统自带的Recovery分区,打开备份软件制作镜像,但是这存在两个问题:A. 镜像特别巨大,系统多大镜像就占多大。B. 必须先拥有系统,才能恢复镜像。最新版的系统中已经去掉了Recovery分区,而LiveCD镜像还不是很好用,于是有了这篇博客,试图寻找一个简单的方法来进行恢复和备份。"},"title":"使用dd指令备份和恢复Linux系统(硬盘级)"},"/posts/210914-mdadm/":{"data":{"":"解决Linux系统异地恢复后开机mdadm报错导致开机时间变长。","从这儿抄的#从这儿抄的:":"W: mdadm: no arrays found in config file or automatically导致开机变慢的解决方案(deepin)","方案#方案":"步骤一:删除mdadm.conf\nsudo rm /etc/mdadm/mdadm.conf 步骤二:生成新的mdadm.conf\nsudo update-initramfs -u ps:如果是swap分区问题导致等待90s开机慢,不归这儿管。","现象#现象":"使用deepin-clone恢复UOS镜像后,开机会不断跳一条日志:\nmdadm: no arrays found in config file or automatically 大概蹦个15条后,系统才真正开机。mdadm好像是一个磁盘raid管理工具,当磁盘变化后其配置也不适配了,必须等到超时才会加载默认配置。那么我们就为其生成一个新的配置即可解决问题。"},"title":"Linux恢复操作系统后mdadm导致开机变慢的方法"},"/posts/210928-rpm_package/":{"data":{"":"Linux如Centos使用的RPM打包方法。本文仅涉及二进制打包,且采用取巧的方法简化操作。(笔记,而非教程)\n正文开始"},"title":"RPM安装包制作方法"},"/posts/211019-dpkg_package_guide/":{"data":{"":"简单介绍deb打包的方法,包括目录树格式和打包注意事项。","control#control":"control文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。\nNAME Description Package 软件名,dpkg -l 列出的名字 Version 版本号-修订号 Section 软件类型,比如mail, test, x11等 Priority 优先级/重要性,比如optional 可选的 Architecture 软件架构,比如x86, arm64 Depends 依赖环境,用 , 隔开,用(\u003e=\u003c )指定版本号 Suggests 推荐安装,指非必要依赖,可以提供更多功能 Maintainer 作者 \u003c邮箱或者其他联系方式\u003e Descritprion 简介,可以换行书写","debian#DEBIAN":"DEBIAN目录下有一个control文件和至多四个脚本文件。","md5sums#md5sums":"为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。","其他信息#其他信息":"一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。","打包#打包":"所有文件配置完成后,进入工作空间上级目录,执行指令\ndpkg -b ./PackageDIR packagename.deb deb包命名的一般规则为 软件名_版本-修订号_架构.deb","文件结构#文件结构":"首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录/。一个工作空间的目录树如下:\nPackageDIR\r├─DEBIAN\r├─opt\r│ └─kushidou-touchscreen\r│ └─desktops\r├─usr\r│ ├─bin\r│ └─share\r└─var 其中,DEBIAN目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。","额外脚本#额外脚本":"DEBIAN目录下之多放置四个可执行脚本,包括安装前preinst、安装后postinst、卸载前prerm、卸载前postrm,四个脚本都需要以#!/bin/bash开头,内容与普通脚本无异,文件名不需要后缀。\n这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以root身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。\n此外postinst可以用来启动已安装的程序,prerm常用来停止正在运行的程序。"},"title":"DEB打包方法简介"},"/posts/211115-fixnasdriver/":{"data":{"":"更新家里的NAS,手滑把原来NAS硬盘的分区信息删掉了。如何拯救盘里的数据?\n图片稍后补充。","v-0-起因#v 0 起因":"双十一买了两块新的4T紫盘,打算升级一下家里的黑群晖。原来黑群晖是用一台N手工控机+1TB希捷笔记本硬盘(看缓存和速度肯定是SMR盘了),数据安全几乎为0.\n考虑到小工控机的电源带不动那么多硬盘,机箱也没有空间,就把家里闲置的i3台式机整了过来,拆掉原来的硬盘装上紫盘组新nas了。顺手拆了一个捡来的监控机上的1TB西数紫盘。\n为了节约迁移系统和数据的时间,我打算拿两个sata易驱线,用DiskGenuies进行克隆。后来网上冲浪发现群晖系统是认硬盘SN的,也就是说我克隆的数据没有一丁点用,加上手头上没有2.5转3.5的转接件,就考虑把笔记本盘放回老nas,然后直接拷贝或者备份到新nas。","v-1-曙光#v 1 曙光":"群晖使用的BTRFS格式不是什么群晖专用格式,而是SUN(Oracle收购)开发的新一代文件系统,针对ext3/4进行优化升级。所以比较新的Linux系统都支持使用这个格式;装个驱动也能轻易读取。\n我本来笔记本是有Deepin系统的,上次win10损毁了我就格掉装了win11。后来想起来我还有块树莓派正跑着linux系统。但是没有分区的硬盘上了Linux也啥都读不到。恰好这时候新nas的系统已经起来了,1T紫盘上的独立分区也建立好了。两款空间一样的盘,同样版本的群晖系统,建立一样的存储空间后,那不就是连分区也一模一样了么?!\n开搞,ssh连上群晖,用sudo blkid看到硬盘实际的分区信息,它正好是显示的扇区起止、大小。打开DG,手动分区,按照群晖的磨样给小硬盘手动分区。DG不支持btrfs分区,那我随便挂一个ext4吧。分区过程和保存的时候,千万不要格式化了。\n把小硬盘用易驱线连上树莓派,lsblk看到这个硬盘有三个分区,其中/dev/sda3下面还有一个md127,不知道是啥,查看发现是raid。群晖的数据区,哪怕是单盘basic也是以raid方式存在的,方便以后升级raid模式吧大概。也就是说,虽然我分区表是瞎分的,Linux还是能够正确读取到原来的分区和文件系统。","v-1-杯具#v-1 杯具":"当我按下取消的时候,惨剧发生了。其实整盘克隆的时候,DG会删除所有分区,克隆完了再重建分区。我取消克隆,然后退出DG。它提示我是否保存分区更改,我以为是1T紫盘的分区,顺手点了个否。当我重启DG的时候,发现希捷笔记本盘只剩一条灰色,未分区的区域。","v-2-尝试#v-2 尝试":"DG有个功能是搜索重建分区表,我第一时间进行搜索。此时还没有网盘内写入任何内容,也没有格式化。数据应该是都在的,只要按照原来的样子重新分区应该就能重新读写数据了。\n为什么不手动分区?因为群晖会在硬盘上先建立一个系统分区,然后建立swap分区,空一段空间后再建立数据分区。每个分区开始和结束的位置都是未知的,网络上也没有可以参考的内容。\n经过一个多小时的搜索,除了第一个2.4GB的系统分区被找到以外,一无所获。我怀疑是不是我期间制作黑裙启动盘影响了,又搜索了一遍,好家伙还是没有。\n搜索期间网上冲浪找前人的肩膀,结果他们要么是分区没被删直接装Windows下btrfs驱动(gitee开源)读取(群晖坏了),要么是DG轻松搜出全部分区(和群晖无关)。我还尝试查找丢失文件,依然一无所获。\n难道就这么放弃了么?","v-2-得到数据#v 2 得到数据":"安装mdadm软件包,我的树莓派不带这个,然后就能挂载raid盘了。\nsudo mount /dev/md127 ~/disk disk目录提前建立好了,把机械盘挂载上去,cd到目录里,然后我就发现了新世界的大门。盘里有个NasData目录,这正是我当时保存文件的地方。cd进去,在!都还在!","v-3-移动数据#v 3 移动数据":"我打算直接把就数据拷贝到新NAS里去了,烤到移动硬盘再复制到nas大费周章的。\n在NAS里的主共享文件夹启动NFS服务,映射为root,允许所有来源的读写,然后到树莓派中挂载nfs\nsudo mount -t nfs 10.x.x.x:/volume2/NasData ~/Nasdata 主目录下提前建立Nasdata目录,挂载完成后新Nas的内容也都出现了。不想一个个复制文件,CP指令不支持排除不想要的文件(毕竟还有部分文件依然保存在移动硬盘和笔记本里,树莓派只支持2.4GHz的wifi太慢),最终我选择了rsync指令进行“本地复制”。\nrsync -vrultD --exclude '文件名' --exclude '目录名' ~/disk/NasData/* ~/Nasdata/临时目录 # -v 详细输出 -r 递归拷贝(保留目录结构) -u 仅更新,防止中断再开后重新拷贝 -l 保留软连接 -t 保留时间信息 -D 保持设备文件信息 # 不用-a 是因为对拷过去的文件赋权限时疯狂报错失败 经历树莓派三次死机两次中断后,我终于抢救了500G数据中的50G(另外450包括百度云同步、移动硬盘依然保存着的动漫视频等)。","v-4-结论#v 4 结论":"现在数据和小姐姐们都住在一个raid1备份的空间中,应该轻易不会发生无家可归的情况了。\n这次事件完全是我自己作死,群晖其实提供了备份功能,可以完整的把数据、部分设置乃至我的Docker容器都完整备份到新NAS里(只要两台都在线),而且树莓派的wifi只有5MiB/s,比起家里千兆的内网,速度慢了数十倍,时间也花了我整整一下午。\n总之硬盘出了事故不要慌,只要不是物理损坏,都有机会修复。除了事故后第一时间就要停止读写,更不要格式化,先尝试重建分区表,失败了换个系统试试。说不定我不重建,放到Linux上也能看到正常的三个分区呢?"},"title":"记一次拯救NAS硬盘"},"/posts/211203-linuxchangeusername/":{"data":{"":"如何在Linux下完整修改当前用户名和主目录,还不影响其他文件?\nLinux的用户名是一个用户的字符串表示,是可以修改的。只要用户的id不改变就不会被系统认作新用户,所有的权限都可以继承。下面介绍如何修改用户的名称、所属组,并更改主目录的名称与对应关系。","一进入单用户模式#一、进入“单用户模式”":"为了修改用户名时不影响程序运行,需要把当前用户打开的所有程序都关闭。该方法可以快速注销当前用户。\ninit 1 执行后输入当前用户密码 进入黑屏终端后需要输入root密码,可以使用sudo passwd 提前设置 对于屏蔽init指令的系统,一般情况下注销用户就可以了,但是有些GUI桌面环境就是以当前用户的身份运行的,所以提供如下几个方式关闭当前用户,挨个尝试即可。\n# 1 桌面环境中点击注销 # 2 杀掉当前用户所有进程 pkill -kill -u old_name # 3 杀掉进程后可能桌面重启,关闭Lightdm管理器 # Ctrl + Alt + F2 进入第二页面,以root用户登录(可能需要提前设置root密码) systemctl stop lightdm # 然后再次执行第二步","二修改信息#二、修改信息":"init 0可以直接进入黑屏的终端,或者使用 ctrl + alt + f2进入(远程连接可以),以root用户登录。\n# 1 修改组的名称 groupmod -n new_name old_name # 2 修改用户名 -l 改名字 -d 改目录 -g 改组 usermod -l new_name -d /home/new_name -g new_name old_name # 3 修改主目录 mv /home/old_name /home/new_name 最后回到图形化界面,输入init 5 ,或者重启电脑。\n修改完主目录后记得检查是不是有其他软连接指向旧目录,需要进行更新,否则还会遇到问题。","参考#参考:":"# linux用户家目录怎么修改,Linux 更改用户名,用户组和主目录\n# 菜鸟教程-usermod指令\n# linux组的管理:修改组名字,删除组,使用sudo权限"},"title":"在Linux环境下修改用户名和主目录"},"/posts/220104-diylinuxiso/":{"data":{"":"想要在原版的Linux镜像上添加自定义的软件,但是不想、不会编译,那么就可以基于Linux的iso文件进行修改,定制自己的安装试用镜像。\n起因是因为对付信创操作系统的备份恢复时,UOS、麒麟自带的工具都超级不好用,两个系统的镜像不统一,导致实际使用的时候各种问题和不方便。所以使用clonezilla再生龙工具自己做一个PE镜像。这个镜像不仅可以备份、安装系统,还能够修改硬盘大小、应急拯救系统等多种功能。并且它是一个完整的系统可以安装使用。","基本计划#基本计划":"之前尝试过使用deepin魔改lub工具制作系统的完整镜像,但是启动总是失败。LUB全称是Live Ubuntu Backup,是Ubuntu的一个工具,到了同为Debian系的deepin魔改的UOS上就水土不服了。(好绕,套娃呢搁这儿\n所以采取另一种办法,用已有的Linux iso,通过解压其系统文件filesystem.squashfs,然后替换关键文件,最后实现自定义系统。","解压修改打包linux文件系统#解压、修改、打包Linux文件系统":"首先把Linux iso挂载到系统中。把里面的filesystem.squashfs文件复制出来(因为iso是只读的,复制出来后也方便管理和备份)。我这里以UOS1040为例,其文件系统在./live目录下\nsudo mount -o loop /xxx/xxx.iso /media/usrname/isofolder cd /media/usrname/isofolder/live/ cp ./filesystem.squashfs ~ 安装squashfs-tools工具,用来压缩解压归档文件。\nsudo apt install squashfs-tools #回到主目录后,解压filesystem.squashfs文件 sudo unsquashfs filesystem.squashfs 解压后可以看到主目录多一个squashfs-root目录,里面存放的就是一个Linux的文件系统了。这时候把你需要的文件拷贝进去,比如我替换了/usr、/opt、/etc三个目录,这三个目录保存了我安装的clonezilla应用及其配置程序,以及我编写的辅助脚本和自启动脚本。\n修改好了就可以打包了。第一个参数是刚刚解压出来修改好的文件系统,第二个参数是输出的名称。建议把之前拷贝出来的squashfs文件改名进行保存。\nsudo mksquashfs squashfs-root/ filesystem.squashfs","重建linux-iso#重建Linux iso":"最后我们需要重建ISO文件。由于我们是基于原来的ISO修改的,所以只需要替换iso里面的filesystem.squashfs文件即可。否则还需要更换系统内核img/lz、重写引导。\n把新生成的filesystem.squashfs文件拷贝到Windows系统里,打开UltraISO软件,直接替换Live目录下的filesystem.squashfs文件。同时我们也可以修改EFI/grub.cfg文件,毕竟这个系统主要是使用而不是安装。我调换了安装和试用的次序,并把等待时间增加到60s。\n最后进行修改ISO名称等小操作,保存为ISO文件就可以了。\n新生成的ISO文件既可以用rufus等工具烧录到U盘中制作PE盘,也可以试用ventoy工具制作成多系统启动盘,甚至可以烧录一张光盘来使用。"},"title":"定制自己的Linux ISO镜像"},"/posts/220223-deepin_partsinddefilemanager/":{"data":{"":"Deepin/UOS 里处理文件管理器显示太多盘符的问题。","原理原因#原理/原因":"这是因为系统/etc/udev/rules.d文件夹做了非法修改。有些人盲目替换了文件夹文件,导致配置文件变化,系统无法正确执行隐藏操作。","处理方法#处理方法":"打开/etc/udev/rules.d目录,查看是否有一个《80-udisks2.rules》文件。如果该文件不存在,请创建。\n打开终端,使用root权限打开编辑\nsudo deepin-editor /etc/udev/rules.d/80-udisk2.rules 打开新的终端,输入执行 blkid -f ,记录LABLE、UUID两列\n​\t对比80-udisks2.rules的内容,将里面的ENV{ID_FS_UUID}后面引号中内容换成第3步中显示的新的UUID。\n(#号后面内容即为盘符,对应3中的LABEL,双等号后面就是UUID,四行都需要替换)\n​\t保存文件并重启计算机,即可看到效果。\n该方法对Deepin系统也有效。对于其他使用了dde-file-manager的应该也是有作用的。","现象#现象":"在使用UOS操作系统时,有时候打开文件管理器,发现除了平常常见的“系统盘”、“数据盘”外,出现了更多的盘符(不属于移动u盘)。在/etc/fstab文件添加或删除“”并没有效果。"},"title":"Deepin/UOS文件管理器隐藏不需要的盘符"},"/posts/220714-unpackclonezillaimage/":{"data":{"":"从clonezilla的镜像直接提取文件,免于先全盘全区恢复。\n再生龙(clonezilla)是一个常用的Linux系统备份工具,适用于多个版本、多种CPU架构的电脑。\n再生龙生成的镜像是比较特殊的格式,如果想要从里面提取文件,通常只能进行镜像恢复后进入系统提取。但是往往我们没有那么多硬盘来恢复系统。\n再生龙的原理简单来说就是把硬盘分区使用partclone工具打包成img文件,然后使用gzip进行分卷压缩。我们只需要逆向操作,利用工具,把镜像解包挂载,直接在当前系统挂载,就可以得到原分区的文件了。","1-环境需求#1. 环境需求":"我们操作再生龙镜像时,最好是使用Linux环境。这个环境中,需要安装partclone(也就是再生龙生成镜像的核心工具)。\nsudo apt install partclone # 以Debian系为例 并且我们需要准备一个足够大的硬盘,用来存储镜像包和解包出的img文件。硬盘/分区的空间需要大于镜像本来的分区空间。","2-合并镜像#2. 合并镜像":"再生龙默认情况下会把一个硬盘分区分按4GB的大小进行分包,通常以gz.aa、gz.ab等结尾,我们需要把这些包重新整合成一个gz包。\n整合成gz包后,我们就可以解压gz来得到镜像img了。我们可以把两个步骤用流的方式写入一条命令,节省硬盘空间。\ncat sda1.ext4-ptcl-img.gz.* | gzip -d -c \u003e sda1.img 这一步生成的img文件不能直接使用(google上也有说能用的,但是我试下来不能),需要进行一次转换。经过实际操作,这个文件所占用的空间是镜像原分区的大小,但是统计硬盘使用量时却只计算实际大小,希望了解的人可以帮忙解释一下。\npartclone.extfs -r -s sda1.img -o sda1-ex.img --restore_raw_file 当然上面两条指令也可以使用流的方式再次封装到一条,但是消耗的时间、失败后重新来过的时间,都会更长。","3挂载镜像#3.挂载镜像":"将最后生成的img镜像挂载到我们的/mnt(或其他)目录,进入这个目录就可以看到原来全部的文件了。\nsudo mount -o loop -t ext4 sda1-ex.img /mnt 最后我们只需要进入 /mnt 目录,就可以想直接操作硬盘一样把文件复制出来了。","挂载方法#挂载方法:":""},"title":"从再生龙(clonezilla)镜像直接提取文件"},"/posts/230508-remake-deb/":{"data":{"":"Debian系操作系统采用dpkg作为包管理器,在安装软件后会存储deb包信息,是否可以提取这些信息并且重新打deb包转移到其他平台使用?\n之前有一个需求,要从UOS里面提取一个软件,并且将其安装到另一台设备中。当时找了一圈都没有找到相关的提取教程。但是从逻辑上来讲,dpkg安装的软件会保存deb包的相关信息,所以理论上讲是可以提取出软件包的所有内容,然后我们重新打包的。\n今天在一个机缘巧合下(其实是懒得研究dpkg原理,瞎猫撞上死耗子),发现了dpkg保存文件信息的地点,于是接下来可以展开畅想:提取已经安装的软件并重新打包。","局限性#局限性":"以上毕竟只是设想,没有进行试验,所以估计会出现这些问题,希望有需要的人尝试后可以解决。\n提取信息的难度: 由于/usr/lib/dpkg-db/status文件是一个包含几乎所有deb信息的文本文件,体积大内容乱,对于自动化脚本来说有些难度。加上一些软件的衍生品会在软件名上直接加后缀,对于提取的脚本来讲可能造成混淆,提取出不必要的东西。\n获取源文件的难度: 不排除一些软件安装时会删除、修改自身的一些文件,可能打包会后会缺失内容。一些软件安装过程中会进行手动配置从而造成内容改变,重做出来的软件包不一定完整。\n签名问题: 我们打包的软件没有原作者的数字签名,可能无法安装,也可能时候安装官方软件时冲突。\n这个方案只能处理普通的软件,一些deb打包源码,安装时进行编译的,应该是不能用这种方案复原的。(apt的deb-src源)\n最后,希望有大佬可以验证一下这个方案。","文件的保存地点#文件的保存地点":"我在找fcitx有关的配置文件进行全盘搜索的时候,找到了一条目录/usr/lib/dpkg-db/info,这个目录里面保留了fcitx的\"conffiles\", “md5sums”, “postinst”, “prerm\"四个文件,以及一个list文件。恰好fcitx.deb解包出来的DEBIAN文件夹内也是这四个文件加上额外的control文件,。\n那么合理猜测,dpkg安装软件的时候,不仅把软件本身的文件移动到对应位置,还把DEBIAN里面的信息和脚本也转移到/usr/lib/dpkg-db/里面保存了。\n而fcitx.list文件中记录的是所有的文件及其路径。想必这里面就是全部的文件了。\n至于control文件,则都被保存到了/usr/lib/dpkg-db/status这个文本文件中。","流程设想#流程设想":"既然deb包所有必要的文件都找到了,那么就可以尝试一下还原过程了。在这篇文章里我研究过deb包的组成、格式和打包方法。\n比如对于软件包A:\n创建一个工作目录,并在其中新建DEBIAN目录。\n将/usr/lib/dpkg-db/info中所有该软件的脚本和信息(除了A.list)转移到DEBIAN中,并重命名成规范名称。\n将/usr/lib/dpkg-db/status中与软件A有关的部分提取出来,保存到DEBIAN/control文件中。\n根据A.list文件,找到软件包含的所有文件,将其按原样整理到工作目录内。\n使用dpkg -b指令重新打包。"},"title":"讨论在Debian系操作系统中重新提取已安装的软件并重新打包"},"/posts/230908-py-post/":{"data":{"":"使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况\n最近做了一个简单的http服务器,用于接收IoT端上传的json格式的日志。\n服务端使用socket中的方法接收原始数据,再对原始数据单独进行处理,根据报文头部的GET或者POST等方法进行具体的操作。\nsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((self.host, self.port)) sock.listen(128) (client, address) = self.sock.accept() th = Thread(target=self.accept_request, args=(client, address)) def accept_request(client, address): data = client_sock.recv(8192) req = data.decode(\"utf-8\") # 处理数据的具体方法 response = process_response(req, client_addr) client_sock.send(response) # clean up client_sock.shutdown(1) client_sock.close() 上面的代码是大概的处理流程。在这个流程中,我发现处理POST的数据的时候,经常只能收到headers部分,payload部分的数据不管发几次都是空的。而且接收缓冲区已经扩大到了8192字节,headers部分的长度只有200多字节,IoT端上传的payload也不过上百字节,不应该是超出缓冲区的问题。\n=====2024.01.04更新=======\n下面的方法突然某一天就失效了,我不清楚是不是python的环境变化导致的。\n其实用flask接收和处理数据会更加方便快捷:\nfrom flask import Flask, request # 实例化flask app = Flask(__name__) # 接收和处理post的方法 @app.route('/test', methods=['POST']) def recv_file_www(): # post的传入参数 print(request.args.to_dict()) # post所承载的数据 print(request.data) return 'OK' if __name__ == '__main__': app.run(port=31408, host=\"0.0.0.0\",debug=True) 上面就是一个完整的post接收和处理程序了,不需要调试socket,也不需要自己处理ResponseBuilder,最重要的是能保证获取到post数据。\n======以下是原来的内容==========\n经过网上搜索与自己尝试,发现socket.recv返回的时候是分段返回的,貌似会按照实际内容切割返回,必须不断的recv才能完整接收数据。有一种解决方案是POST传送之前先确定报文的完整擦换个年度,然后利用while循环,接收到对应长度才结束。\n但是POST发送的一个不定长的数据,如果每次都通过http报文先传送post完整长度的话,有些浪费资源。于是我想到了这么一个方案:\nPOST的报文头会包含一个Content-length的数据,记录的是payload的长度。那我在接收阶段就对headers部分进行解码和处理,获取到content-length后,在加上本次获取headers的长度就是POST的完整长度了。\n那么将上面代码的client_sock.recv()部分改写成下面的方法:\ndef recv(self, client_sock): lrecved = 8192 # 记录每次接收的长度 lrecv_all=0 # 记录数据总长度 data_body = bytes() # 接收的所有数据存入这里 payload_len = 0 # 解析的payload长度 payload_flag = 0 # 用于记录是否接收到了payload,以及实时记录接收到payload的长度 while True : part_body= client_sock.recv(8192) # 循环接收数据 data_body += part_body # 将接收的数据写入data_body lrecved = len(part_body) # 获取本次接收长度 lrecv_all += lrecved # 计算总长度 if payload_flag == 0: # 没有接收到payload部分时,才进入下面的判断流程 if data_body[0:3].decode() == 'GET': # 由于我get方法没出现过断开的问题,因此直接返回即可。 break elif data_body[0:4].decode() == 'POST': payload_len = count_payload_len(data_body) # 解析头部,计算payload部分的长度 if lrecved \u003c payload_len: # 偶尔会出现能接收到payload的情况,所以多加了一个判断。 # 能接收payload肯定总长度大于payload_len的 print(\"no payloads, keep recving...\") # 计算post报文的总长度,借用payload_flag变量 payload_flag = lrecved + payload_len # 当接收到的总长度 \u003e= POST的计算长度,表示所有数据接收完成,退出 if payload_flag \u003c= lrecv_all: break return data_body 里面解析headers的代码如下:\ndef count_payload_len(data): for d in data.split(b'\\r\\n'): # 通过\\r\\n来分隔报文头 if \"LENGTH\" in d.upper().decode(): # 如果报文头部有length关键词,当然可以写完整,我的heasers没有其他的length就简化了 return int(d.decode().split(\":\")[1]) # 分隔出payload长度并返回 return 0 上面的代码其实写的很复杂,因为我解析POST整体报文的功能已经写完并且通过第三方http报文调试工具验证过了,上IoT设备实验的时候才发现了问题,本着少改一点是一点的原则,就把这一部分复杂化了,但确实解决了我的问题,就OK了。\n对了,这篇博客就是利用这个这个方案改造的新服务端进行上传同步的,之前用GitHub Actions进行同步博客,每次运营商都会发一条高危访问的短信和邮件通知我,太烦了。"},"title":"Python socket 收取POST协议内容时没有payload"},"/posts/231127-vncserver/":{"data":{"":"(笔记)在Linux系统里安装远程桌面VNC客户端并连接。","1-安装nvc服务端#1. 安装NVC服务端":"sudo apt install x11vnc","2-设置远程连接密码#2. 设置远程连接密码":"x11vnc --storepasswd # 输入两次连接密码以设定 # 询问 Write password to /home/xxx/.vnc/passwd # 时,输入y并回车保存密码。 该步骤不需要使用sudo!","3-使vnc服务开机自启动#3. 使VNC服务开机自启动":"使用service的方法,将vnc作为一个服务开机启动\n创建/lib/systemd/system/x11vnc.service文件并填入下面的内容\n[Unit] Description=Start x11vnc at startup. After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -auth guess -rfbauth /home/xxx/.vnc/passwd [Install] WantedBy=multi-user.target 注意,/home/xxx 需要替换成实际的用户名!","使用vnc客户端连接#使用vnc客户端连接":"我使用Windows上的VncViewer,官网RealVNC,这个软件假冒的很多,下载需要注意甄别。"},"title":"Linux安装VNC服务端"},"/posts/231225-dockernote/":{"data":{"":"学习docker,使用docker,编写docker","docker-compose#docker-compose":"docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。\n首先创建一个工作目录,并创建一个docker-compose.yml的文件,默认情况下docker compose指令只认这个文件名。\nversion: '3'\rservices:\r[NAME1]:\rimage: \"image/name\"\rports:\r- 81:80\r- 8080:8080\renvironment:\rHOSTNAME: \"cc\"\rPORT: 8181\rvolumes:\r- nginx-data:/etc/nginx\r[NAME2]:\rimage: 'xxx' docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,ports字段指定了内外端口的映射,即’外部:内部’,卷映射同理。environment不需要 - 开头。\n编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动\ndocker compose up 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。\ndocker compose down 停止容器,并删除对应的容器和网络\ndocker compose exec NAME command 在ymal文件内其中一个容器里运行指令\ndocker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。\n目前浅学了一下,只有学一点更新一点吧。","docker-基本使用方法#docker 基本使用方法":"使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。\n# 拉取一个镜像 docker pull xxx/yyy # 创建容器并运行 docker run --name aaa xxx/yyy # 停止容器 docker stop docker-id 关于运行容器,有很多常用的参数:\n-d 容器转入后台运行\n-e 设置容器的环境变量\n–name 容器名称\n-p 80:80 将暴露的端口映射到容器内端口,外部:内部\n-v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内\n-e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。\n停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。\n查询容器id,可以使用指令docker ps。docker还有其他几个查询和控制指令\ndocker exec 容器 指令 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。\ndocker ps 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。\ndocker images 列出已经下载的镜像列表。与 docker image 指令不同。\ndocker kill 容器名/id 杀死一个无法stop的容器\ndocker rm 容器 删除一个容器\ndocker rmi 镜像名 删除一个镜像\ndocker restart 容器ID 重启一个容器,毕竟我们不需要每次都创建新容器。\n关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。","前言#前言":"祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。\n不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。\n由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。","安装docker和docker-compose#安装docker和docker compose":"虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。\napt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。\n# 添加docker官方的gpg curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加 echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release \u0026\u0026 echo \"$VERSION_CODENAME\") stable\" | sudo tee /etc/apt/sources.list.d/docker.list \u003e /dev/null # 我这边添加的结果是 deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable 然后可以通过apt源安装docker了\nsudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin *注意,上面的指令同时安装了docker-compose。如果不安装docker,直接安装docker-compose也是可以的。\nwget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose 更加具体的步骤和细节可以到官网查看:docker安装、docker-compose安装","更换docker镜像源#更换docker镜像源":"和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。\n修改/etc/docker/daemon.json文件,添加下面的内容:\n{ \"registry-mirrors\": [ \"https://docker.mirrors.ustc.edu.cn\" ] } 编辑完成后需要重启docker服务。\n具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。"},"title":"docker简单笔记"},"/posts/about_hugo_website/":{"data":{"hugo的安装与首次创建#hugo的安装与首次创建":"安装使用chocolatey,一个windows下的仿apt、yum的软件包管理器。安装好chocolatey后,根据hugo官网的内容,choco install hugo -confirm安装基础的hugo(好处是不用再配置环境变量了)。\n为hugo创建目录,进入后hugo site new website,hugo会自动建立它所需要的层级结构。\n添加第一个页面,`hugo new xxx/xxx.md’,创建的内容会出现在content下,创建多级目录也适合将来归类。","主题皮肤#主题/皮肤":"主题放在themes下,我在知乎上找到了一个高赞且顺眼的,有哪些好看的Hugo主题? - 飞雪无情的回答 - 知乎,文章中附了github连接,那么我们直接git过来就完事了。","关于使用hugo建立博客#关于使用HUGO建立博客":"使用hugo建立本站的规划和记录。\n关于使用HUGO建立博客在经历了worldpress的性能消耗和慢速加载后,我现在决定换用hugo+caddy的建站模式。昨天已经完成了caddy2的基础设置,现在开始测试使用hugo。","生成网站#生成网站":"文章+主题都有了,现在可以生成第一个网站了(虽然写这些字的时候,网站还没生成)。hugo就能直接产生网页,保存至public文件夹。hugo server可以启动一个服务器预览静态网页。","编写文章#编写文章":"hugo的文章是基于markdown文档的,创建的文章会自动加入以下抬头\n--- title: \"$文章标题\" date: $时间 draft: true --- 这个可以修改为json或ymal格式,理应可以添加更多项目,这个之后再研究。"},"title":"关于使用HUGO建立博客站点"}} \ No newline at end of file diff --git a/public/en.search.js b/public/en.search.js deleted file mode 100644 index f4ba18c..0000000 --- a/public/en.search.js +++ /dev/null @@ -1,490 +0,0 @@ -// Search functionality using FlexSearch. - -// Change shortcut key to cmd+k on Mac, iPad or iPhone. -document.addEventListener("DOMContentLoaded", function () { - if (/iPad|iPhone|Macintosh/.test(navigator.userAgent)) { - // select the kbd element under the .hextra-search-wrapper class - const keys = document.querySelectorAll(".hextra-search-wrapper kbd"); - keys.forEach(key => { - key.innerHTML = 'K'; - }); - } -}); - -// Render the search data as JSON. -// -// -// -// - -(function () { - const searchDataURL = '/en.search-data.json'; - const resultsFoundTemplate = '找到 %d 个结果'; - - const inputElements = document.querySelectorAll('.hextra-search-input'); - for (const el of inputElements) { - el.addEventListener('focus', init); - el.addEventListener('keyup', search); - el.addEventListener('keydown', handleKeyDown); - el.addEventListener('input', handleInputChange); - } - - const shortcutElements = document.querySelectorAll('.hextra-search-wrapper kbd'); - - function setShortcutElementsOpacity(opacity) { - shortcutElements.forEach(el => { - el.style.opacity = opacity; - }); - } - - function handleInputChange(e) { - const opacity = e.target.value.length > 0 ? 0 : 100; - setShortcutElementsOpacity(opacity); - } - - // Get the search wrapper, input, and results elements. - function getActiveSearchElement() { - const inputs = Array.from(document.querySelectorAll('.hextra-search-wrapper')).filter(el => el.clientHeight > 0); - if (inputs.length === 1) { - return { - wrapper: inputs[0], - inputElement: inputs[0].querySelector('.hextra-search-input'), - resultsElement: inputs[0].querySelector('.hextra-search-results') - }; - } - return undefined; - } - - const INPUTS = ['input', 'select', 'button', 'textarea'] - - // Focus the search input when pressing ctrl+k/cmd+k or /. - document.addEventListener('keydown', function (e) { - const { inputElement } = getActiveSearchElement(); - if (!inputElement) return; - - const activeElement = document.activeElement; - const tagName = activeElement && activeElement.tagName; - if ( - inputElement === activeElement || - !tagName || - INPUTS.includes(tagName) || - (activeElement && activeElement.isContentEditable)) - return; - - if ( - e.key === '/' || - (e.key === 'k' && - (e.metaKey /* for Mac */ || /* for non-Mac */ e.ctrlKey)) - ) { - e.preventDefault(); - inputElement.focus(); - } else if (e.key === 'Escape' && inputElement.value) { - inputElement.blur(); - } - }); - - // Dismiss the search results when clicking outside the search box. - document.addEventListener('mousedown', function (e) { - const { inputElement, resultsElement } = getActiveSearchElement(); - if (!inputElement || !resultsElement) return; - if ( - e.target !== inputElement && - e.target !== resultsElement && - !resultsElement.contains(e.target) - ) { - setShortcutElementsOpacity(100); - hideSearchResults(); - } - }); - - // Get the currently active result and its index. - function getActiveResult() { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return { result: undefined, index: -1 }; - - const result = resultsElement.querySelector('.hextra-search-active'); - if (!result) return { result: undefined, index: -1 }; - - const index = parseInt(result.dataset.index, 10); - return { result, index }; - } - - // Set the active result by index. - function setActiveResult(index) { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return; - - const { result: activeResult } = getActiveResult(); - activeResult && activeResult.classList.remove('hextra-search-active'); - const result = resultsElement.querySelector(`[data-index="${index}"]`); - if (result) { - result.classList.add('hextra-search-active'); - result.focus(); - } - } - - // Get the number of search results from the DOM. - function getResultsLength() { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return 0; - return resultsElement.dataset.count; - } - - // Finish the search by hiding the results and clearing the input. - function finishSearch() { - const { inputElement } = getActiveSearchElement(); - if (!inputElement) return; - hideSearchResults(); - inputElement.value = ''; - inputElement.blur(); - } - - function hideSearchResults() { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return; - resultsElement.classList.add('hx:hidden'); - } - - // Handle keyboard events. - function handleKeyDown(e) { - const { inputElement } = getActiveSearchElement(); - if (!inputElement) return; - - const resultsLength = getResultsLength(); - const { result: activeResult, index: activeIndex } = getActiveResult(); - - switch (e.key) { - case 'ArrowUp': - e.preventDefault(); - if (activeIndex > 0) setActiveResult(activeIndex - 1); - break; - case 'ArrowDown': - e.preventDefault(); - if (activeIndex + 1 < resultsLength) setActiveResult(activeIndex + 1); - break; - case 'Enter': - e.preventDefault(); - if (activeResult) { - activeResult.click(); - } - finishSearch(); - case 'Escape': - e.preventDefault(); - hideSearchResults(); - // Clear the input when pressing escape - inputElement.value = ''; - inputElement.dispatchEvent(new Event('input')); - // Remove focus from the input - inputElement.blur(); - break; - } - } - - // Initializes the search. - function init(e) { - e.target.removeEventListener('focus', init); - if (!(window.pageIndex && window.sectionIndex)) { - preloadIndex(); - } - } - - /** - * Preloads the search index by fetching data and adding it to the FlexSearch index. - * @returns {Promise} A promise that resolves when the index is preloaded. - */ - async function preloadIndex() { - const tokenize = 'forward'; - - // https://github.com/TryGhost/Ghost/pull/21148 - const regex = new RegExp( - `[\u{4E00}-\u{9FFF}\u{3040}-\u{309F}\u{30A0}-\u{30FF}\u{AC00}-\u{D7A3}\u{3400}-\u{4DBF}\u{20000}-\u{2A6DF}\u{2A700}-\u{2B73F}\u{2B740}-\u{2B81F}\u{2B820}-\u{2CEAF}\u{2CEB0}-\u{2EBEF}\u{30000}-\u{3134F}\u{31350}-\u{323AF}\u{2EBF0}-\u{2EE5F}\u{F900}-\u{FAFF}\u{2F800}-\u{2FA1F}]|[0-9A-Za-zа-я\u00C0-\u017F\u0400-\u04FF\u0600-\u06FF\u0980-\u09FF\u1E00-\u1EFF\u0590-\u05FF]+`, - 'mug' - ); - const encode = (str) => { return ('' + str).toLowerCase().match(regex) ?? []; } - - window.pageIndex = new FlexSearch.Document({ - tokenize, - encode, - cache: 100, - document: { - id: 'id', - store: ['title', 'crumb'], - index: "content" - } - }); - - window.sectionIndex = new FlexSearch.Document({ - tokenize, - encode, - cache: 100, - document: { - id: 'id', - store: ['title', 'content', 'url', 'display', 'crumb'], - index: "content", - tag: [{ - field: "pageId" - }] - } - }); - - const resp = await fetch(searchDataURL); - const data = await resp.json(); - let pageId = 0; - for (const route in data) { - let pageContent = ''; - ++pageId; - const urlParts = route.split('/').filter(x => x != "" && !x.startsWith('#')); - - let crumb = ''; - let searchUrl = '/'; - for (let i = 0; i < urlParts.length; i++) { - const urlPart = urlParts[i]; - searchUrl += urlPart + '/' - - const crumbData = data[searchUrl]; - if (!crumbData) { - console.debug('Excluded page', searchUrl, '- will not be included for search result breadcrumb for', route); - continue; - } - - let title = data[searchUrl].title; - if (title == "_index") { - title = urlPart.split("-").map(x => x).join(" "); - } - crumb += title; - - if (i < urlParts.length - 1) { - crumb += ' > '; - } - } - - for (const heading in data[route].data) { - const [hash, text] = heading.split('#'); - const url = route.trimEnd('/') + (hash ? '#' + hash : ''); - const title = text || data[route].title; - - const content = data[route].data[heading] || ''; - const paragraphs = content.split('\n').filter(Boolean); - - sectionIndex.add({ - id: url, - url, - title, - crumb, - pageId: `page_${pageId}`, - content: title, - ...(paragraphs[0] && { display: paragraphs[0] }) - }); - - for (let i = 0; i < paragraphs.length; i++) { - sectionIndex.add({ - id: `${url}_${i}`, - url, - title, - crumb, - pageId: `page_${pageId}`, - content: paragraphs[i] - }); - } - - pageContent += ` ${title} ${content}`; - } - - window.pageIndex.add({ - id: pageId, - title: data[route].title, - crumb, - content: pageContent - }); - - } - } - - /** - * Performs a search based on the provided query and displays the results. - * @param {Event} e - The event object. - */ - function search(e) { - const query = e.target.value; - if (!e.target.value) { - hideSearchResults(); - return; - } - - const { resultsElement } = getActiveSearchElement(); - while (resultsElement.firstChild) { - resultsElement.removeChild(resultsElement.firstChild); - } - resultsElement.classList.remove('hx:hidden'); - - // Configurable search limits with sensible defaults - const maxPageResults = parseInt('20', 10); - const maxSectionResults = parseInt('10', 10); - const pageResults = window.pageIndex.search(query, maxPageResults, { enrich: true, suggest: true })[0]?.result || []; - - const results = []; - const pageTitleMatches = {}; - - for (let i = 0; i < pageResults.length; i++) { - const result = pageResults[i]; - pageTitleMatches[i] = 0; - - const sectionResults = window.sectionIndex.search(query, - { enrich: true, suggest: true, tag: { 'pageId': `page_${result.id}` } })[0]?.result || []; - let isFirstItemOfPage = true - const occurred = {} - - const nResults = Math.min(sectionResults.length, maxSectionResults); - for (let j = 0; j < nResults; j++) { - const { doc } = sectionResults[j] - const isMatchingTitle = doc.display !== undefined - if (isMatchingTitle) { - pageTitleMatches[i]++ - } - const { url, title } = doc - const content = doc.display || doc.content - - if (occurred[url + '@' + content]) continue - occurred[url + '@' + content] = true - results.push({ - _page_rk: i, - _section_rk: j, - route: url, - prefix: isFirstItemOfPage ? result.doc.crumb : undefined, - children: { title, content } - }) - isFirstItemOfPage = false - } - } - const sortedResults = results - .sort((a, b) => { - // Sort by number of matches in the title. - if (a._page_rk === b._page_rk) { - return a._section_rk - b._section_rk - } - if (pageTitleMatches[a._page_rk] !== pageTitleMatches[b._page_rk]) { - return pageTitleMatches[b._page_rk] - pageTitleMatches[a._page_rk] - } - return a._page_rk - b._page_rk - }) - .map(res => ({ - id: `${res._page_rk}_${res._section_rk}`, - route: res.route, - prefix: res.prefix, - children: res.children - })); - displayResults(sortedResults, query); - } - - /** - * Displays the search results on the page. - * - * @param {Array} results - The array of search results. - * @param {string} query - The search query. - */ - function displayResults(results, query) { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return; - - if (!results.length) { - resultsElement.innerHTML = `无结果`; - // Announce no results to screen readers - const wrapper = resultsElement.closest('.hextra-search-wrapper'); - const statusEl = wrapper ? wrapper.querySelector('.hextra-search-status') : null; - if (statusEl) { - statusEl.textContent = '无结果'; - } - return; - } - - // Append text with highlighted matches using safe text nodes. - function appendHighlightedText(container, text, query) { - if (!text) return; - if (!query) { - container.textContent = text; - return; - } - - const escapedQuery = query.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); - if (!escapedQuery) { - container.textContent = text; - return; - } - - const regex = new RegExp(escapedQuery, 'gi'); - let lastIndex = 0; - let match; - while ((match = regex.exec(text)) !== null) { - if (match.index > lastIndex) { - container.appendChild(document.createTextNode(text.slice(lastIndex, match.index))); - } - const span = document.createElement('span'); - span.className = 'hextra-search-match'; - span.textContent = match[0]; - container.appendChild(span); - lastIndex = match.index + match[0].length; - } - if (lastIndex < text.length) { - container.appendChild(document.createTextNode(text.slice(lastIndex))); - } - } - - function handleMouseMove(e) { - const target = e.target.closest('a'); - if (target) { - const active = resultsElement.querySelector('a.hextra-search-active'); - if (active) { - active.classList.remove('hextra-search-active'); - } - target.classList.add('hextra-search-active'); - } - } - - const fragment = document.createDocumentFragment(); - for (let i = 0; i < results.length; i++) { - const result = results[i]; - if (result.prefix) { - const prefix = document.createElement('div'); - prefix.className = 'hextra-search-prefix'; - prefix.textContent = result.prefix; - fragment.appendChild(prefix); - } - const li = document.createElement('li'); - const link = document.createElement('a'); - link.dataset.index = i; - link.href = result.route; - if (i === 0) { - link.classList.add('hextra-search-active'); - } - - const title = document.createElement('div'); - title.className = 'hextra-search-title'; - appendHighlightedText(title, result.children.title, query); - link.appendChild(title); - - if (result.children.content) { - const excerpt = document.createElement('div'); - excerpt.className = 'hextra-search-excerpt'; - appendHighlightedText(excerpt, result.children.content, query); - link.appendChild(excerpt); - } - - li.appendChild(link); - li.addEventListener('mousemove', handleMouseMove); - li.addEventListener('keydown', handleKeyDown); - link.addEventListener('click', finishSearch); - fragment.appendChild(li); - } - resultsElement.appendChild(fragment); - resultsElement.dataset.count = results.length; - - // Announce results count to screen readers - const wrapper = resultsElement.closest('.hextra-search-wrapper'); - const statusEl = wrapper ? wrapper.querySelector('.hextra-search-status') : null; - if (statusEl) { - statusEl.textContent = results.length > 0 - ? resultsFoundTemplate.replace('%d', results.length.toString()) - : '无结果'; - } - } -})(); diff --git a/public/en.search.min.2cc417b6975b6621e049223d9f505ea2e6bd026e4cae8052a858eafc78cf230e.js b/public/en.search.min.2cc417b6975b6621e049223d9f505ea2e6bd026e4cae8052a858eafc78cf230e.js deleted file mode 100644 index 76d519d..0000000 --- a/public/en.search.min.2cc417b6975b6621e049223d9f505ea2e6bd026e4cae8052a858eafc78cf230e.js +++ /dev/null @@ -1,2 +0,0 @@ -document.addEventListener("DOMContentLoaded",function(){if(/iPad|iPhone|Macintosh/.test(navigator.userAgent)){const e=document.querySelectorAll(".hextra-search-wrapper kbd");e.forEach(e=>{e.innerHTML='K'})}}),function(){const f="/en.search-data.json",h="找到 %d 个结果",c=document.querySelectorAll(".hextra-search-input");for(const e of c)e.addEventListener("focus",o),e.addEventListener("keyup",g),e.addEventListener("keydown",i),e.addEventListener("input",m);const u=document.querySelectorAll(".hextra-search-wrapper kbd");function n(e){u.forEach(t=>{t.style.opacity=e})}function m(e){const t=e.target.value.length>0?0:100;n(t)}function e(){const e=Array.from(document.querySelectorAll(".hextra-search-wrapper")).filter(e=>e.clientHeight>0);return e.length===1?{wrapper:e[0],inputElement:e[0].querySelector(".hextra-search-input"),resultsElement:e[0].querySelector(".hextra-search-results")}:0[0]}const l=["input","select","button","textarea"];document.addEventListener("keydown",function(t){const{inputElement:n}=e();if(!n)return;const s=document.activeElement,o=s&&s.tagName;if(n===s||!o||l.includes(o)||s&&s.isContentEditable)return;t.key==="/"||t.key==="k"&&(t.metaKey||t.ctrlKey)?(t.preventDefault(),n.focus()):t.key==="Escape"&&n.value&&n.blur()}),document.addEventListener("mousedown",function(s){const{inputElement:i,resultsElement:o}=e();if(!i||!o)return;s.target!==i&&s.target!==o&&!o.contains(s.target)&&(n(100),t())});function s(){const{resultsElement:n}=e();if(!n)return{result:0[0],index:-1};const t=n.querySelector(".hextra-search-active");if(!t)return{result:0[0],index:-1};const s=parseInt(t.dataset.index,10);return{result:t,index:s}}function r(t){const{resultsElement:o}=e();if(!o)return;const{result:i}=s();i&&i.classList.remove("hextra-search-active");const n=o.querySelector(`[data-index="${t}"]`);n&&(n.classList.add("hextra-search-active"),n.focus())}function d(){const{resultsElement:t}=e();return t?t.dataset.count:0}function a(){const{inputElement:n}=e();if(!n)return;t(),n.value="",n.blur()}function t(){const{resultsElement:t}=e();if(!t)return;t.classList.add("hx:hidden")}function i(n){const{inputElement:o}=e();if(!o)return;const{result:c,index:i}=s(),l=d();switch(n.key){case"ArrowUp":n.preventDefault(),i>0&&r(i-1);break;case"ArrowDown":n.preventDefault(),i+1(""+e).toLowerCase().match(o)??[];window.pageIndex=new FlexSearch.Document({tokenize:n,encode:s,cache:100,document:{id:"id",store:["title","crumb"],index:"content"}}),window.sectionIndex=new FlexSearch.Document({tokenize:n,encode:s,cache:100,document:{id:"id",store:["title","content","url","display","crumb"],index:"content",tag:[{field:"pageId"}]}});const i=await fetch(f),e=await i.json();let t=0;for(const n in e){let a="";++t;const i=n.split("/").filter(e=>e!=""&&!e.startsWith("#"));let s="",o="/";for(let t=0;te).join(" ")),s+=a,t ")}for(const c in e[n].data){const[l,u]=c.split("#"),o=n.trimEnd("/")+(l?"#"+l:""),i=u||e[n].title,d=e[n].data[c]||"",r=d.split(` -`).filter(Boolean);sectionIndex.add({id:o,url:o,title:i,crumb:s,pageId:`page_${t}`,content:i,...r[0]&&{display:r[0]}});for(let e=0;ee._page_rk===t._page_rk?e._section_rk-t._section_rk:s[e._page_rk]!==s[t._page_rk]?s[t._page_rk]-s[e._page_rk]:e._page_rk-t._page_rk).map(e=>({id:`${e._page_rk}_${e._section_rk}`,route:e.route,prefix:e.prefix,children:e.children}));v(d,i)}function v(t,n){const{resultsElement:s}=e();if(!s)return;if(!t.length){s.innerHTML=`无结果`;const e=s.closest(".hextra-search-wrapper"),t=e?e.querySelector(".hextra-search-status"):null;t&&(t.textContent="无结果");return}function r(e,t,n){if(!t)return;if(!n){e.textContent=t;return}const i=n.replace(/[-\\^$*+?.()|[\]{}]/g,"\\$&");if(!i){e.textContent=t;return}const a=new RegExp(i,"gi");let o=0,s;for(;(s=a.exec(t))!==null;){s.index>o&&e.appendChild(document.createTextNode(t.slice(o,s.index)));const n=document.createElement("span");n.className="hextra-search-match",n.textContent=s[0],e.appendChild(n),o=s.index+s[0].length}o0?h.replace("%d",t.length.toString()):"无结果")}}() \ No newline at end of file diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png deleted file mode 100644 index 0f2dd2b2eb092162cc3cb22473ae565ddf2db9c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmV-a0jvIrP)Px$4oO5oR5(wi(?2VQVHC&l&%^2k$bi`8-++`7#UP56mmo8oO4ltUkH`0000 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png deleted file mode 100644 index 5c1aea58495d1cfb77aac38b4f5ce0ae14ce6a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 753 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 - - diff --git a/public/images/logo-dark.svg b/public/images/logo-dark.svg deleted file mode 100644 index 2857264..0000000 --- a/public/images/logo-dark.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/logo.svg b/public/images/logo.svg deleted file mode 100644 index 1ed7daf..0000000 --- a/public/images/logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/index.html b/public/index.html deleted file mode 100644 index 11adb89..0000000 --- a/public/index.html +++ /dev/null @@ -1,684 +0,0 @@ - - - - - - - - -香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- -
- - - -
-
- - - - - - - - diff --git a/public/index.xml b/public/index.xml deleted file mode 100644 index a65cbc1..0000000 --- a/public/index.xml +++ /dev/null @@ -1,1927 +0,0 @@ - - - 香风家的火柴盒 – 香风家的火柴盒 - https://www.small09.top/ - Recent content on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 25 Dec 2023 09:06:25 +0800 - - - - - - - - - - docker简单笔记 - https://www.small09.top/posts/231225-dockernote/ - Mon, 25 Dec 2023 09:06:25 +0800 - - https://www.small09.top/posts/231225-dockernote/ - - - - <p>学习docker,使用docker,编写docker</p> -<h2>前言<span class="hx:absolute hx:-mt-20" id="前言"></span> - <a href="#%e5%89%8d%e8%a8%80" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。</p> -<p>不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。</p> -<p>由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。</p> -<h2>安装docker和docker compose<span class="hx:absolute hx:-mt-20" id="安装docker和docker-compose"></span> - <a href="#%e5%ae%89%e8%a3%85docker%e5%92%8cdocker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。</p> -<p>apt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 添加docker官方的gpg</span> -</span></span><span style="display:flex;"><span>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加</span> -</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;deb [arch=</span><span style="color:#66d9ef">$(</span>dpkg --print-architecture<span style="color:#66d9ef">)</span><span style="color:#e6db74"> signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu </span><span style="color:#66d9ef">$(</span>. /etc/os-release <span style="color:#f92672">&amp;&amp;</span> echo <span style="color:#e6db74">&#34;</span>$VERSION_CODENAME<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74"> stable&#34;</span> | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 我这边添加的结果是</span> -</span></span><span style="display:flex;"><span>deb <span style="color:#f92672">[</span>arch<span style="color:#f92672">=</span>amd64 signed-by<span style="color:#f92672">=</span>/usr/share/keyrings/docker-archive-keyring.gpg<span style="color:#f92672">]</span> https://download.docker.com/linux/ubuntu jammy stable</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后可以通过apt源安装docker了</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update -</span></span><span style="display:flex;"><span>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>*<em>注意,上面的指令同时安装了docker-compose</em>。如果不安装docker,直接安装docker-compose也是可以的。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -</span></span><span style="display:flex;"><span>sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>更加具体的步骤和细节可以到官网查看:<a href="https://docs.docker.com/engine/install/ubuntu/"target="_blank" rel="noopener">docker安装</a>、<a href="https://docs.docker.com/compose/install/standalone/"target="_blank" rel="noopener">docker-compose安装</a></p> -<h2>docker 基本使用方法<span class="hx:absolute hx:-mt-20" id="docker-基本使用方法"></span> - <a href="#docker-%e5%9f%ba%e6%9c%ac%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 拉取一个镜像</span> -</span></span><span style="display:flex;"><span>docker pull xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 创建容器并运行</span> -</span></span><span style="display:flex;"><span>docker run --name aaa xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 停止容器</span> -</span></span><span style="display:flex;"><span>docker stop docker-id</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>关于运行容器,有很多常用的参数:</p> -<blockquote> - <p>-d 容器转入后台运行</p> -<p>-e 设置容器的环境变量</p> -<p>&ndash;name 容器名称</p> -<p>-p 80:80 将暴露的端口映射到容器内端口,外部:内部</p> -<p>-v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内</p> -<p>-e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。</p> - -</blockquote> -<p>停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。</p> -<p>查询容器id,可以使用指令<code>docker ps</code>。docker还有其他几个查询和控制指令</p> -<blockquote> - <p><code>docker exec 容器 指令</code> 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。</p> -<p><code>docker ps</code> 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。</p> -<p><code>docker images</code> 列出已经下载的镜像列表。与 <code>docker image</code> 指令不同。</p> -<p><code>docker kill 容器名/id</code> 杀死一个无法stop的容器</p> -<p><code>docker rm 容器</code> 删除一个<strong>容器</strong></p> -<p><code>docker rmi 镜像名</code> 删除一个<strong>镜像</strong></p> -<p><code>docker restart 容器ID</code> 重启一个容器,毕竟我们不需要每次都创建新容器。</p> - -</blockquote> -<p>关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。</p> -<h2>更换docker镜像源<span class="hx:absolute hx:-mt-20" id="更换docker镜像源"></span> - <a href="#%e6%9b%b4%e6%8d%a2docker%e9%95%9c%e5%83%8f%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。</p> -<p>修改<code>/etc/docker/daemon.json</code>文件,添加下面的内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ -</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;registry-mirrors&#34;</span>: [ -</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;https://docker.mirrors.ustc.edu.cn&#34;</span> -</span></span><span style="display:flex;"><span> ] -</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>编辑完成后需要重启docker服务。</p> -<p>具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。</p> -<h2>docker-compose<span class="hx:absolute hx:-mt-20" id="docker-compose"></span> - <a href="#docker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。</p> -<p>首先创建一个工作目录,并创建一个<code>docker-compose.yml</code>的文件,默认情况下docker compose指令只认这个文件名。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>version: &#39;3&#39; -services: - [NAME1]: - image: &#34;image/name&#34; - ports: - - 81:80 - - 8080:8080 - environment: - HOSTNAME: &#34;cc&#34; - PORT: 8181 - volumes: - - nginx-data:/etc/nginx - [NAME2]: - image: &#39;xxx&#39;</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,<code>ports</code>字段指定了内外端口的映射,即&rsquo;外部:内部&rsquo;,卷映射同理。<code>environment</code>不需要 - 开头。</p> -<p>编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动</p> -<blockquote> - <p><code>docker compose up</code> 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。</p> -<p><code>docker compose down</code> 停止容器,并删除对应的容器和网络</p> -<p><code>docker compose exec NAME command</code> 在ymal文件内其中一个容器里运行指令</p> - -</blockquote> -<p>docker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。</p> -<p>目前浅学了一下,只有学一点更新一点吧。</p> - - - - - Linux安装VNC服务端 - https://www.small09.top/posts/231127-vncserver/ - Mon, 27 Nov 2023 09:33:32 +0800 - - https://www.small09.top/posts/231127-vncserver/ - - - - <p><em>(笔记)在Linux系统里安装远程桌面VNC客户端并连接。</em></p> -<h3>1. 安装NVC服务端<span class="hx:absolute hx:-mt-20" id="1-安装nvc服务端"></span> - <a href="#1-%e5%ae%89%e8%a3%85nvc%e6%9c%8d%e5%8a%a1%e7%ab%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install x11vnc</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h3>2. 设置远程连接密码<span class="hx:absolute hx:-mt-20" id="2-设置远程连接密码"></span> - <a href="#2-%e8%ae%be%e7%bd%ae%e8%bf%9c%e7%a8%8b%e8%bf%9e%e6%8e%a5%e5%af%86%e7%a0%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>x11vnc --storepasswd -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 输入两次连接密码以设定</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 询问 Write password to /home/xxx/.vnc/passwd </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 时,输入y并回车保存密码。</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ul> -<li>该步骤不需要使用sudo!</li> -</ul> -<h3>3. 使VNC服务开机自启动<span class="hx:absolute hx:-mt-20" id="3-使vnc服务开机自启动"></span> - <a href="#3-%e4%bd%bfvnc%e6%9c%8d%e5%8a%a1%e5%bc%80%e6%9c%ba%e8%87%aa%e5%90%af%e5%8a%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>使用service的方法,将vnc作为一个服务开机启动</p> -<p>创建<code>/lib/systemd/system/x11vnc.service</code>文件并填入下面的内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[Unit]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Description</span><span style="color:#f92672">=</span><span style="color:#e6db74">Start x11vnc at startup.</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">After</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Service]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Type</span><span style="color:#f92672">=</span><span style="color:#e6db74">simple</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">ExecStart</span><span style="color:#f92672">=</span><span style="color:#e6db74">/usr/bin/x11vnc -auth guess -rfbauth /home/xxx/.vnc/passwd</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Install]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">WantedBy</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ul> -<li>注意,/home/xxx 需要替换成实际的用户名!</li> -</ul> -<h3>使用vnc客户端连接<span class="hx:absolute hx:-mt-20" id="使用vnc客户端连接"></span> - <a href="#%e4%bd%bf%e7%94%a8vnc%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>我使用Windows上的VncViewer,官网<a href="https://www.realvnc.com/en/"target="_blank" rel="noopener">RealVNC</a>,这个软件假冒的很多,下载需要注意甄别。</p> - - - - - Python socket 收取POST协议内容时没有payload - https://www.small09.top/posts/230908-py-post/ - Fri, 08 Sep 2023 00:00:00 +0800 - - https://www.small09.top/posts/230908-py-post/ - - - - <p>使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况</p> -<p>最近做了一个简单的http服务器,用于接收IoT端上传的json格式的日志。</p> -<p>服务端使用socket中的方法接收原始数据,再对原始数据单独进行处理,根据报文头部的GET或者POST等方法进行具体的操作。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>sock <span style="color:#f92672">=</span> socket<span style="color:#f92672">.</span>socket(socket<span style="color:#f92672">.</span>AF_INET, socket<span style="color:#f92672">.</span>SOCK_STREAM) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>bind((self<span style="color:#f92672">.</span>host, self<span style="color:#f92672">.</span>port)) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>listen(<span style="color:#ae81ff">128</span>) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>(client, address) <span style="color:#f92672">=</span> self<span style="color:#f92672">.</span>sock<span style="color:#f92672">.</span>accept() -</span></span><span style="display:flex;"><span>th <span style="color:#f92672">=</span> Thread(target<span style="color:#f92672">=</span>self<span style="color:#f92672">.</span>accept_request, args<span style="color:#f92672">=</span>(client, address)) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">accept_request</span>(client, address): -</span></span><span style="display:flex;"><span> data <span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) -</span></span><span style="display:flex;"><span> req <span style="color:#f92672">=</span> data<span style="color:#f92672">.</span>decode(<span style="color:#e6db74">&#34;utf-8&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 处理数据的具体方法</span> -</span></span><span style="display:flex;"><span> response <span style="color:#f92672">=</span> process_response(req, client_addr) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>send(response) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># clean up</span> -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>shutdown(<span style="color:#ae81ff">1</span>) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>close()</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码是大概的处理流程。在这个流程中,我发现处理POST的数据的时候,经常只能收到headers部分,payload部分的数据不管发几次都是空的。而且接收缓冲区已经扩大到了8192字节,headers部分的长度只有200多字节,IoT端上传的payload也不过上百字节,不应该是超出缓冲区的问题。</p> -<p><strong>=====2024.01.04更新=======</strong></p> -<p>下面的方法突然某一天就失效了,我不清楚是不是python的环境变化导致的。</p> -<p>其实用flask接收和处理数据会更加方便快捷:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> flask <span style="color:#f92672">import</span> Flask, request -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 实例化flask</span> -</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> Flask(__name__) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 接收和处理post的方法</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.route</span>(<span style="color:#e6db74">&#39;/test&#39;</span>, methods<span style="color:#f92672">=</span>[<span style="color:#e6db74">&#39;POST&#39;</span>]) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv_file_www</span>(): -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post的传入参数</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>args<span style="color:#f92672">.</span>to_dict()) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post所承载的数据</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>data) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#39;OK&#39;</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;__main__&#39;</span>: -</span></span><span style="display:flex;"><span> app<span style="color:#f92672">.</span>run(port<span style="color:#f92672">=</span><span style="color:#ae81ff">31408</span>, host<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.0.0.0&#34;</span>,debug<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面就是一个完整的post接收和处理程序了,不需要调试socket,也不需要自己处理ResponseBuilder,最重要的是能保证获取到post数据。</p> -<p><strong>======以下是原来的内容==========</strong></p> -<p>经过网上搜索与自己尝试,发现socket.recv返回的时候是分段返回的,貌似会按照实际内容切割返回,<strong>必须不断的recv才能完整接收数据</strong>。有一种解决方案是POST传送之前先确定报文的完整擦换个年度,然后利用while循环,接收到对应长度才结束。</p> -<p>但是POST发送的一个不定长的数据,如果每次都通过http报文先传送post完整长度的话,有些浪费资源。于是我想到了这么一个方案:</p> -<p>POST的报文头会包含一个<code>Content-length</code>的数据,记录的是payload的长度。那我在接收阶段就对headers部分进行解码和处理,获取到content-length后,在加上本次获取headers的长度就是POST的完整长度了。</p> -<p>那么将上面代码的<code>client_sock.recv()</code>部分改写成下面的方法:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv</span>(self, client_sock): -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> <span style="color:#ae81ff">8192</span> <span style="color:#75715e"># 记录每次接收的长度</span> -</span></span><span style="display:flex;"><span> lrecv_all<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> <span style="color:#75715e"># 记录数据总长度 </span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">=</span> bytes() <span style="color:#75715e"># 接收的所有数据存入这里</span> -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 解析的payload长度</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 用于记录是否接收到了payload,以及实时记录接收到payload的长度</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> <span style="color:#66d9ef">True</span> : -</span></span><span style="display:flex;"><span> part_body<span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) <span style="color:#75715e"># 循环接收数据</span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">+=</span> part_body <span style="color:#75715e"># 将接收的数据写入data_body</span> -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> len(part_body) <span style="color:#75715e"># 获取本次接收长度</span> -</span></span><span style="display:flex;"><span> lrecv_all <span style="color:#f92672">+=</span> lrecved <span style="color:#75715e"># 计算总长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>: <span style="color:#75715e"># 没有接收到payload部分时,才进入下面的判断流程</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">3</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;GET&#39;</span>: <span style="color:#75715e"># 由于我get方法没出现过断开的问题,因此直接返回即可。</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">4</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;POST&#39;</span>: -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> count_payload_len(data_body) <span style="color:#75715e"># 解析头部,计算payload部分的长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> lrecved <span style="color:#f92672">&lt;</span> payload_len: -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 偶尔会出现能接收到payload的情况,所以多加了一个判断。</span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 能接收payload肯定总长度大于payload_len的</span> -</span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;no payloads, keep recving...&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 计算post报文的总长度,借用payload_flag变量</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> lrecved <span style="color:#f92672">+</span> payload_len -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 当接收到的总长度 &gt;= POST的计算长度,表示所有数据接收完成,退出</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">&lt;=</span> lrecv_all: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> data_body</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>里面解析headers的代码如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">count_payload_len</span>(data): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> d <span style="color:#f92672">in</span> data<span style="color:#f92672">.</span>split(<span style="color:#e6db74">b</span><span style="color:#e6db74">&#39;</span><span style="color:#ae81ff">\r\n</span><span style="color:#e6db74">&#39;</span>): <span style="color:#75715e"># 通过\r\n来分隔报文头</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#e6db74">&#34;LENGTH&#34;</span> <span style="color:#f92672">in</span> d<span style="color:#f92672">.</span>upper()<span style="color:#f92672">.</span>decode(): <span style="color:#75715e"># 如果报文头部有length关键词,当然可以写完整,我的heasers没有其他的length就简化了</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> int(d<span style="color:#f92672">.</span>decode()<span style="color:#f92672">.</span>split(<span style="color:#e6db74">&#34;:&#34;</span>)[<span style="color:#ae81ff">1</span>]) <span style="color:#75715e"># 分隔出payload长度并返回</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码其实写的很复杂,因为我解析POST整体报文的功能已经写完并且通过第三方http报文调试工具验证过了,上IoT设备实验的时候才发现了问题,本着少改一点是一点的原则,就把这一部分复杂化了,但确实解决了我的问题,就OK了。</p> -<p>对了,这篇博客就是利用这个这个方案改造的新服务端进行上传同步的,之前用GitHub Actions进行同步博客,每次运营商都会发一条高危访问的短信和邮件通知我,太烦了。</p> - - - - - 讨论在Debian系操作系统中重新提取已安装的软件并重新打包 - https://www.small09.top/posts/230508-remake-deb/ - Mon, 08 May 2023 14:43:41 +0800 - - https://www.small09.top/posts/230508-remake-deb/ - - - - <p>Debian系操作系统采用dpkg作为包管理器,在安装软件后会存储deb包信息,是否可以提取这些信息并且重新打deb包转移到其他平台使用?</p> -<p>之前有一个需求,要从UOS里面提取一个软件,并且将其安装到另一台设备中。当时找了一圈都没有找到相关的提取教程。但是从逻辑上来讲,dpkg安装的软件会保存deb包的相关信息,所以理论上讲是可以提取出软件包的所有内容,然后我们重新打包的。</p> -<p>今天在一个机缘巧合下(其实是懒得研究dpkg原理,瞎猫撞上死耗子),发现了dpkg保存文件信息的地点,于是接下来可以展开畅想:提取已经安装的软件并重新打包。</p> -<h2>文件的保存地点<span class="hx:absolute hx:-mt-20" id="文件的保存地点"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%9a%84%e4%bf%9d%e5%ad%98%e5%9c%b0%e7%82%b9" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我在找fcitx有关的配置文件进行全盘搜索的时候,找到了一条目录<code>/usr/lib/dpkg-db/info</code>,这个目录里面保留了fcitx的&quot;conffiles&quot;, &ldquo;md5sums&rdquo;, &ldquo;postinst&rdquo;, &ldquo;prerm&quot;四个文件,以及一个list文件。恰好fcitx.deb解包出来的DEBIAN文件夹内也是这四个文件加上额外的control文件,。</p> -<p>那么合理猜测,dpkg安装软件的时候,不仅把软件本身的文件移动到对应位置,还把DEBIAN里面的信息和脚本也转移到<code>/usr/lib/dpkg-db/</code>里面保存了。</p> -<p>而<code>fcitx.list</code>文件中记录的是所有的文件及其路径。想必这里面就是全部的文件了。</p> -<p>至于control文件,则都被保存到了<code>/usr/lib/dpkg-db/status</code>这个文本文件中。</p> -<h2>流程设想<span class="hx:absolute hx:-mt-20" id="流程设想"></span> - <a href="#%e6%b5%81%e7%a8%8b%e8%ae%be%e6%83%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>既然deb包所有必要的文件都找到了,那么就可以尝试一下还原过程了。在<a href="https://www.small09.top/posts/211019-dpkg_package_guide/"target="_blank" rel="noopener">这篇文章</a>里我研究过deb包的组成、格式和打包方法。</p> -<p>比如对于软件包A:</p> -<ol> -<li> -<p>创建一个工作目录,并在其中新建<code>DEBIAN</code>目录。</p> -</li> -<li> -<p>将<code>/usr/lib/dpkg-db/info</code>中所有该软件的脚本和信息(除了A.list)转移到<code>DEBIAN</code>中,并重命名成规范名称。</p> -</li> -<li> -<p>将<code>/usr/lib/dpkg-db/status</code>中与软件A有关的部分提取出来,保存到<code>DEBIAN/control</code>文件中。</p> -</li> -<li> -<p>根据A.list文件,找到软件包含的所有文件,将其按原样整理到工作目录内。</p> -</li> -<li> -<p>使用<code>dpkg -b</code>指令重新打包。</p> -</li> -</ol> -<h2>局限性<span class="hx:absolute hx:-mt-20" id="局限性"></span> - <a href="#%e5%b1%80%e9%99%90%e6%80%a7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上毕竟只是设想,没有进行试验,所以估计会出现这些问题,希望有需要的人尝试后可以解决。</p> -<ul> -<li> -<p>提取信息的难度: 由于<code>/usr/lib/dpkg-db/status</code>文件是一个包含几乎所有deb信息的文本文件,体积大内容乱,对于自动化脚本来说有些难度。加上一些软件的衍生品会在软件名上直接加后缀,对于提取的脚本来讲可能造成混淆,提取出不必要的东西。</p> -</li> -<li> -<p>获取源文件的难度: 不排除一些软件安装时会删除、修改自身的一些文件,可能打包会后会缺失内容。一些软件安装过程中会进行手动配置从而造成内容改变,重做出来的软件包不一定完整。</p> -</li> -<li> -<p>签名问题: 我们打包的软件没有原作者的数字签名,可能无法安装,也可能时候安装官方软件时冲突。</p> -</li> -<li> -<p>这个方案只能处理普通的软件,一些deb打包源码,安装时进行编译的,应该是不能用这种方案复原的。(apt的deb-src源)</p> -</li> -</ul> -<p>最后,希望有大佬可以验证一下这个方案。</p> - - - - - 从再生龙(clonezilla)镜像直接提取文件 - https://www.small09.top/posts/220714-unpackclonezillaimage/ - Thu, 14 Jul 2022 13:05:51 +0800 - - https://www.small09.top/posts/220714-unpackclonezillaimage/ - - - - <p>从clonezilla的镜像直接提取文件,免于先全盘全区恢复。</p> -<p>再生龙(clonezilla)是一个常用的Linux系统备份工具,适用于多个版本、多种CPU架构的电脑。</p> -<p>再生龙生成的镜像是比较特殊的格式,如果想要从里面提取文件,通常只能进行镜像恢复后进入系统提取。但是往往我们没有那么多硬盘来恢复系统。</p> -<p>再生龙的原理简单来说就是把硬盘分区使用partclone工具打包成img文件,然后使用gzip进行分卷压缩。我们只需要逆向操作,利用工具,把镜像解包挂载,直接在当前系统挂载,就可以得到原分区的文件了。</p> -<h2>挂载方法:<span class="hx:absolute hx:-mt-20" id="挂载方法"></span> - <a href="#%e6%8c%82%e8%bd%bd%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>1. 环境需求<span class="hx:absolute hx:-mt-20" id="1-环境需求"></span> - <a href="#1-%e7%8e%af%e5%a2%83%e9%9c%80%e6%b1%82" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>我们操作再生龙镜像时,最好是使用Linux环境。这个环境中,需要安装partclone(也就是再生龙生成镜像的核心工具)。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install partclone -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以Debian系为例</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>并且我们需要准备一个足够大的硬盘,用来存储镜像包和解包出的img文件。硬盘/分区的空间需要大于镜像本来的<strong>分区</strong>空间。</p> -<h3>2. 合并镜像<span class="hx:absolute hx:-mt-20" id="2-合并镜像"></span> - <a href="#2-%e5%90%88%e5%b9%b6%e9%95%9c%e5%83%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>再生龙默认情况下会把一个硬盘分区分按4GB的大小进行分包,通常以<code>gz.aa</code>、<code>gz.ab</code>等结尾,我们需要把这些包重新整合成一个gz包。</p> -<p>整合成gz包后,我们就可以解压gz来得到镜像img了。我们可以把两个步骤用流的方式写入一条命令,节省硬盘空间。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat sda1.ext4-ptcl-img.gz.* | gzip -d -c &gt; sda1.img</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这一步生成的img文件不能直接使用(google上也有说能用的,但是我试下来不能),需要进行一次转换。经过实际操作,这个文件所占用的空间是镜像原分区的大小,但是统计硬盘使用量时却只计算实际大小,希望了解的人可以帮忙解释一下。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>partclone.extfs -r -s sda1.img -o sda1-ex.img --restore_raw_file</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>当然上面两条指令也可以使用流的方式再次封装到一条,但是消耗的时间、失败后重新来过的时间,都会更长。</p> -<h2>3.挂载镜像<span class="hx:absolute hx:-mt-20" id="3挂载镜像"></span> - <a href="#3%e6%8c%82%e8%bd%bd%e9%95%9c%e5%83%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>将最后生成的img镜像挂载到我们的/mnt(或其他)目录,进入这个目录就可以看到原来全部的文件了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -o loop -t ext4 sda1-ex.img /mnt</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>最后我们只需要进入 <code>/mnt</code> 目录,就可以想直接操作硬盘一样把文件复制出来了。</p> - - - - - Deepin/UOS文件管理器隐藏不需要的盘符 - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - Wed, 23 Feb 2022 09:18:55 +0800 - - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - - - - <p>Deepin/UOS 里处理文件管理器显示太多盘符的问题。</p> -<h2>现象<span class="hx:absolute hx:-mt-20" id="现象"></span> - <a href="#%e7%8e%b0%e8%b1%a1" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在使用UOS操作系统时,有时候打开文件管理器,发现除了平常常见的“系统盘”、“数据盘”外,出现了更多的盘符(不属于移动u盘)。在<code>/etc/fstab</code>文件添加或删除“”并没有效果。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230924406.png" alt="image-20220223090517363" loading="lazy" /></p> -<h2>原理/原因<span class="hx:absolute hx:-mt-20" id="原理原因"></span> - <a href="#%e5%8e%9f%e7%90%86%e5%8e%9f%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>这是因为系统/etc/udev/rules.d文件夹做了非法修改。有些人盲目替换了文件夹文件,导致配置文件变化,系统无法正确执行隐藏操作。</p> -<h2>处理方法<span class="hx:absolute hx:-mt-20" id="处理方法"></span> - <a href="#%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li> -<p>打开<code>/etc/udev/rules.d</code>目录,查看是否有一个《80-udisks2.rules》文件。如果该文件不存在,请创建。</p> -</li> -<li> -<p>打开终端,使用root权限打开编辑</p> -</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo deepin-editor /etc/udev/rules.d/80-udisk2.rules</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ol start="3"> -<li> -<p><strong>打开新的终端</strong>,输入执行 <code>blkid -f</code> ,记录LABLE、UUID两列</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230928320.png" alt="截图录屏_选择区域_20220223090208" loading="lazy" /></p> -</li> -<li> -<p>对比<code>80-udisks2.rules</code>的内容,将里面的ENV{ID_FS_UUID}后面引号中内容换成第3步中显示的新的UUID。</p> -<p>(#号后面内容即为盘符,对应3中的LABEL,双等号后面就是UUID,四行都需要替换)</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230927888.png" alt="截图录屏_选择区域_20220223090606" loading="lazy" /></p> -</li> -<li> -<p>保存文件并重启计算机,即可看到效果。</p> -</li> -<li> -<p>该方法对Deepin系统也有效。对于其他使用了dde-file-manager的应该也是有作用的。</p> -</li> -</ol> - - - - - 定制自己的Linux ISO镜像 - https://www.small09.top/posts/220104-diylinuxiso/ - Tue, 04 Jan 2022 09:17:38 +0800 - - https://www.small09.top/posts/220104-diylinuxiso/ - - - - <p>想要在原版的Linux镜像上添加自定义的软件,但是不想、不会编译,那么就可以基于Linux的iso文件进行修改,定制自己的安装试用镜像。</p> -<p>起因是因为对付信创操作系统的备份恢复时,UOS、麒麟自带的工具都超级不好用,两个系统的镜像不统一,导致实际使用的时候各种问题和不方便。所以使用clonezilla再生龙工具自己做一个PE镜像。这个镜像不仅可以备份、安装系统,还能够修改硬盘大小、应急拯救系统等多种功能。并且它是一个完整的系统可以安装使用。</p> -<h2>基本计划<span class="hx:absolute hx:-mt-20" id="基本计划"></span> - <a href="#%e5%9f%ba%e6%9c%ac%e8%ae%a1%e5%88%92" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>之前尝试过使用<a href="http://bbs.wuyou.net/forum.php?mod=viewthread&amp;tid=409980"target="_blank" rel="noopener">deepin魔改lub工具</a>制作系统的完整镜像,但是启动总是失败。<a href="https://forum.ubuntu.org.cn/viewtopic.php?t=206287"target="_blank" rel="noopener">LUB</a>全称是<em>Live Ubuntu Backup</em>,是Ubuntu的一个工具,到了同为Debian系的deepin魔改的UOS上就水土不服了。(好绕,套娃呢搁这儿</p> -<p>所以采取另一种办法,用已有的Linux iso,通过解压其系统文件filesystem.squashfs,然后替换关键文件,最后实现自定义系统。</p> -<h2>解压、修改、打包Linux文件系统<span class="hx:absolute hx:-mt-20" id="解压修改打包linux文件系统"></span> - <a href="#%e8%a7%a3%e5%8e%8b%e4%bf%ae%e6%94%b9%e6%89%93%e5%8c%85linux%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>首先把Linux iso挂载到系统中。把里面的filesystem.squashfs文件复制出来(因为iso是只读的,复制出来后也方便管理和备份)。我这里以UOS1040为例,其文件系统在<code>./live</code>目录下</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -o loop /xxx/xxx.iso /media/usrname/isofolder -</span></span><span style="display:flex;"><span>cd /media/usrname/isofolder/live/ -</span></span><span style="display:flex;"><span>cp ./filesystem.squashfs ~</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>安装<code>squashfs-tools</code>工具,用来压缩解压归档文件。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install squashfs-tools -</span></span><span style="display:flex;"><span><span style="color:#75715e">#回到主目录后,解压filesystem.squashfs文件</span> -</span></span><span style="display:flex;"><span>sudo unsquashfs filesystem.squashfs</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>解压后可以看到主目录多一个<code>squashfs-root</code>目录,里面存放的就是一个Linux的文件系统了。这时候把你需要的文件拷贝进去,比如我替换了/usr、/opt、/etc三个目录,这三个目录保存了我安装的clonezilla应用及其配置程序,以及我编写的辅助脚本和自启动脚本。</p> -<p>修改好了就可以打包了。第一个参数是刚刚解压出来修改好的文件系统,第二个参数是输出的名称。建议把之前拷贝出来的squashfs文件改名进行保存。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mksquashfs squashfs-root/ filesystem.squashfs</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>重建Linux iso<span class="hx:absolute hx:-mt-20" id="重建linux-iso"></span> - <a href="#%e9%87%8d%e5%bb%balinux-iso" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最后我们需要重建ISO文件。由于我们是基于原来的ISO修改的,所以只需要替换iso里面的filesystem.squashfs文件即可。否则还需要更换系统内核img/lz、重写引导。</p> -<p>把新生成的filesystem.squashfs文件拷贝到Windows系统里,打开UltraISO软件,直接替换Live目录下的filesystem.squashfs文件。同时我们也可以修改<code>EFI/grub.cfg</code>文件,毕竟这个系统主要是使用而不是安装。我调换了安装和试用的次序,并把等待时间增加到60s。</p> -<p>最后进行修改ISO名称等小操作,保存为ISO文件就可以了。</p> -<p>新生成的ISO文件既可以用rufus等工具烧录到U盘中制作PE盘,也可以试用ventoy工具制作成多系统启动盘,甚至可以烧录一张光盘来使用。</p> - - - - - 在Linux环境下修改用户名和主目录 - https://www.small09.top/posts/211203-linuxchangeusername/ - Fri, 03 Dec 2021 09:01:23 +0800 - - https://www.small09.top/posts/211203-linuxchangeusername/ - - - - <p>如何在Linux下完整修改当前用户名和主目录,还不影响其他文件?</p> -<p>Linux的用户名是一个用户的字符串表示,是可以修改的。只要用户的id不改变就不会被系统认作新用户,所有的权限都可以继承。下面介绍如何修改用户的名称、所属组,并更改主目录的名称与对应关系。</p> -<h2>一、进入“单用户模式”<span class="hx:absolute hx:-mt-20" id="一进入单用户模式"></span> - <a href="#%e4%b8%80%e8%bf%9b%e5%85%a5%e5%8d%95%e7%94%a8%e6%88%b7%e6%a8%a1%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>为了修改用户名时不影响程序运行,需要把当前用户打开的所有程序都关闭。该方法可以快速注销当前用户。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>init <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span>执行后输入当前用户密码 -</span></span><span style="display:flex;"><span>进入黑屏终端后需要输入root密码,可以使用sudo passwd 提前设置</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>对于屏蔽init指令的系统,一般情况下注销用户就可以了,但是有些GUI桌面环境就是以当前用户的身份运行的,所以提供如下几个方式关闭当前用户,挨个尝试即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 1 桌面环境中点击注销</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2 杀掉当前用户所有进程</span> -</span></span><span style="display:flex;"><span>pkill -kill -u old_name -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3 杀掉进程后可能桌面重启,关闭Lightdm管理器</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># Ctrl + Alt + F2 进入第二页面,以root用户登录(可能需要提前设置root密码)</span> -</span></span><span style="display:flex;"><span>systemctl stop lightdm -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 然后再次执行第二步</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>二、修改信息<span class="hx:absolute hx:-mt-20" id="二修改信息"></span> - <a href="#%e4%ba%8c%e4%bf%ae%e6%94%b9%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>init 0</code>可以直接进入黑屏的终端,或者使用 <code>ctrl + alt + f2</code>进入(远程连接可以),以root用户登录。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 1 修改组的名称</span> -</span></span><span style="display:flex;"><span>groupmod -n new_name old_name -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2 修改用户名 -l 改名字 -d 改目录 -g 改组</span> -</span></span><span style="display:flex;"><span>usermod -l new_name -d /home/new_name -g new_name old_name -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3 修改主目录</span> -</span></span><span style="display:flex;"><span>mv /home/old_name /home/new_name</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>最后回到图形化界面,输入<code>init 5</code> ,或者重启电脑。</p> -<p>修改完主目录后记得检查是不是有其他软连接指向旧目录,需要进行更新,否则还会遇到问题。</p> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p># <a href="https://blog.csdn.net/weixin_30016961/article/details/116543982"target="_blank" rel="noopener">linux用户家目录怎么修改,Linux 更改用户名,用户组和主目录</a></p> -<p># <a href="https://www.runoob.com/linux/linux-comm-usermod.html"target="_blank" rel="noopener">菜鸟教程-usermod指令</a></p> -<p># <a href="https://blog.csdn.net/weixin_40001125/article/details/88903115"target="_blank" rel="noopener">linux组的管理:修改组名字,删除组,使用sudo权限</a></p> - - - - - 记一次拯救NAS硬盘 - https://www.small09.top/posts/211115-fixnasdriver/ - Mon, 15 Nov 2021 10:02:30 +0800 - - https://www.small09.top/posts/211115-fixnasdriver/ - - - - <p>更新家里的NAS,手滑把原来NAS硬盘的分区信息删掉了。如何拯救盘里的数据?</p> -<p><em>图片稍后补充。</em></p> -<h2>v 0 起因<span class="hx:absolute hx:-mt-20" id="v-0-起因"></span> - <a href="#v-0-%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>双十一买了两块新的4T紫盘,打算升级一下家里的黑群晖。原来黑群晖是用一台N手工控机+1TB希捷笔记本硬盘(看缓存和速度肯定是SMR盘了),数据安全几乎为0.</p> -<p>考虑到小工控机的电源带不动那么多硬盘,机箱也没有空间,就把家里闲置的i3台式机整了过来,拆掉原来的硬盘装上紫盘组新nas了。顺手拆了一个捡来的监控机上的1TB西数紫盘。</p> -<p>为了节约迁移系统和数据的时间,我打算拿两个sata易驱线,用DiskGenuies进行克隆。后来网上冲浪发现群晖系统是认硬盘SN的,也就是说我克隆的数据没有一丁点用,加上手头上没有2.5转3.5的转接件,就考虑把笔记本盘放回老nas,然后直接拷贝或者备份到新nas。</p> -<h2>v-1 杯具<span class="hx:absolute hx:-mt-20" id="v-1-杯具"></span> - <a href="#v-1-%e6%9d%af%e5%85%b7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>当我按下取消的时候,惨剧发生了。其实整盘克隆的时候,DG会删除所有分区,克隆完了再重建分区。我取消克隆,然后退出DG。它提示我是否保存分区更改,我以为是1T紫盘的分区,顺手点了个否。当我重启DG的时候,发现希捷笔记本盘只剩一条灰色,未分区的区域。</p> -<h2>v-2 尝试<span class="hx:absolute hx:-mt-20" id="v-2-尝试"></span> - <a href="#v-2-%e5%b0%9d%e8%af%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>DG有个功能是搜索重建分区表,我第一时间进行搜索。此时还没有网盘内<strong>写入任何内容</strong>,也<strong>没有格式化</strong>。数据应该是都在的,只要按照原来的样子重新分区应该就能重新读写数据了。</p> -<p>为什么不手动分区?因为群晖会在硬盘上先建立一个系统分区,然后建立swap分区,空一段空间后再建立数据分区。每个分区开始和结束的位置都是未知的,网络上也没有可以参考的内容。</p> -<p>经过一个多小时的搜索,除了第一个2.4GB的系统分区被找到以外,一无所获。我怀疑是不是我期间制作黑裙启动盘影响了,又搜索了一遍,好家伙还是没有。</p> -<p>搜索期间网上冲浪找前人的肩膀,结果他们要么是分区没被删直接装Windows下btrfs驱动(gitee开源)读取(群晖坏了),要么是DG轻松搜出全部分区(和群晖无关)。我还尝试查找丢失文件,依然一无所获。</p> -<p>难道就这么放弃了么?</p> -<h2>v 1 曙光<span class="hx:absolute hx:-mt-20" id="v-1-曙光"></span> - <a href="#v-1-%e6%9b%99%e5%85%89" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>群晖使用的BTRFS格式不是什么群晖专用格式,而是SUN(Oracle收购)开发的新一代文件系统,针对ext3/4进行优化升级。所以比较新的Linux系统都支持使用这个格式;装个驱动也能轻易读取。</p> -<p>我本来笔记本是有Deepin系统的,上次win10损毁了我就格掉装了win11。后来想起来我还有块树莓派正跑着linux系统。但是没有分区的硬盘上了Linux也啥都读不到。恰好这时候新nas的系统已经起来了,1T紫盘上的独立分区也建立好了。两款空间一样的盘,同样版本的群晖系统,建立一样的存储空间后,那不就是连分区也一模一样了么?!</p> -<p>开搞,ssh连上群晖,用sudo blkid看到硬盘实际的分区信息,它正好是显示的扇区起止、大小。打开DG,手动分区,按照群晖的磨样给小硬盘手动分区。DG不支持btrfs分区,那我随便挂一个ext4吧。分区过程和保存的时候,千万不要格式化了。</p> -<p>把小硬盘用易驱线连上树莓派,<code>lsblk</code>看到这个硬盘有三个分区,其中<code>/dev/sda3</code>下面还有一个<code>md127</code>,不知道是啥,查看发现是raid。群晖的数据区,哪怕是单盘basic也是以raid方式存在的,方便以后升级raid模式吧大概。也就是说,虽然我分区表是瞎分的,Linux还是能够正确读取到原来的分区和文件系统。</p> -<h2>v 2 得到数据<span class="hx:absolute hx:-mt-20" id="v-2-得到数据"></span> - <a href="#v-2-%e5%be%97%e5%88%b0%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>安装<code>mdadm</code>软件包,我的树莓派不带这个,然后就能挂载raid盘了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount /dev/md127 ~/disk</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>disk目录提前建立好了,把机械盘挂载上去,cd到目录里,然后我就发现了新世界的大门。盘里有个<code>NasData</code>目录,这正是我当时保存文件的地方。cd进去,在!都还在!</p> -<h2>v 3 移动数据<span class="hx:absolute hx:-mt-20" id="v-3-移动数据"></span> - <a href="#v-3-%e7%a7%bb%e5%8a%a8%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我打算直接把就数据拷贝到新NAS里去了,烤到移动硬盘再复制到nas大费周章的。</p> -<p>在NAS里的主共享文件夹启动NFS服务,映射为root,允许所有来源的读写,然后到树莓派中挂载nfs</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -t nfs 10.x.x.x:/volume2/NasData ~/Nasdata</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>主目录下提前建立Nasdata目录,挂载完成后新Nas的内容也都出现了。不想一个个复制文件,CP指令不支持排除不想要的文件(毕竟还有部分文件依然保存在移动硬盘和笔记本里,树莓派只支持2.4GHz的wifi太慢),最终我选择了rsync指令进行“本地复制”。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>rsync -vrultD --exclude <span style="color:#e6db74">&#39;文件名&#39;</span> --exclude <span style="color:#e6db74">&#39;目录名&#39;</span> ~/disk/NasData/* ~/Nasdata/临时目录 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -v 详细输出 -r 递归拷贝(保留目录结构) -u 仅更新,防止中断再开后重新拷贝 -l 保留软连接 -t 保留时间信息 -D 保持设备文件信息</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 不用-a 是因为对拷过去的文件赋权限时疯狂报错失败</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>经历树莓派三次死机两次中断后,我终于抢救了500G数据中的50G(另外450包括百度云同步、移动硬盘依然保存着的动漫视频等)。</p> -<h2>v 4 结论<span class="hx:absolute hx:-mt-20" id="v-4-结论"></span> - <a href="#v-4-%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>现在数据和小姐姐们都住在一个raid1备份的空间中,应该轻易不会发生无家可归的情况了。</p> -<p>这次事件完全是我自己作死,群晖其实提供了备份功能,可以完整的把数据、部分设置乃至我的Docker容器都完整备份到新NAS里(只要两台都在线),而且树莓派的wifi只有5MiB/s,比起家里千兆的内网,速度慢了数十倍,时间也花了我整整一下午。</p> -<p>总之硬盘出了事故不要慌,只要不是物理损坏,都有机会修复。除了事故后第一时间就要停止读写,更不要格式化,先尝试重建分区表,失败了换个系统试试。说不定我不重建,放到Linux上也能看到正常的三个分区呢?</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202111150957877.png" alt="image-20211115095410121" loading="lazy" /></p> - - - - - DEB打包方法简介 - https://www.small09.top/posts/211019-dpkg_package_guide/ - Tue, 19 Oct 2021 10:12:23 +0800 - - https://www.small09.top/posts/211019-dpkg_package_guide/ - - - - <p>简单介绍deb打包的方法,包括目录树格式和打包注意事项。</p> -<h2>文件结构<span class="hx:absolute hx:-mt-20" id="文件结构"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录<code>/</code>。一个工作空间的目录树如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code> PackageDIR - ├─DEBIAN - ├─opt - │ └─kushidou-touchscreen - │ └─desktops - ├─usr - │ ├─bin - │ └─share - └─var</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中,<code>DEBIAN</code>目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。</p> -<h2>DEBIAN<span class="hx:absolute hx:-mt-20" id="debian"></span> - <a href="#debian" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>DEBIAN</code>目录下有一个control文件和至多四个脚本文件。</p> -<h3>control<span class="hx:absolute hx:-mt-20" id="control"></span> - <a href="#control" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>control</code>文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。</p> -<table> - <thead> - <tr> - <th>NAME</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>Package</td> - <td>软件名,<code>dpkg -l</code> 列出的名字</td> - </tr> - <tr> - <td>Version</td> - <td>版本号-修订号</td> - </tr> - <tr> - <td>Section</td> - <td>软件类型,比如mail, test, x11等</td> - </tr> - <tr> - <td>Priority</td> - <td>优先级/重要性,比如optional 可选的</td> - </tr> - <tr> - <td>Architecture</td> - <td>软件架构,比如x86, arm64</td> - </tr> - <tr> - <td>Depends</td> - <td>依赖环境,用 <code>,</code> 隔开,用<code>(&gt;=&lt; )</code>指定版本号</td> - </tr> - <tr> - <td>Suggests</td> - <td>推荐安装,指非必要依赖,可以提供更多功能</td> - </tr> - <tr> - <td>Maintainer</td> - <td>作者 &lt;邮箱或者其他联系方式&gt;</td> - </tr> - <tr> - <td>Descritprion</td> - <td>简介,可以换行书写</td> - </tr> - </tbody> -</table> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20211019101901.png" alt="image-20211019094048011" loading="lazy" /></p> -<h3>额外脚本<span class="hx:absolute hx:-mt-20" id="额外脚本"></span> - <a href="#%e9%a2%9d%e5%a4%96%e8%84%9a%e6%9c%ac" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>DEBIAN</code>目录下之多放置四个可执行脚本,包括<strong>安装前<code>preinst</code></strong>、<strong>安装后<code>postinst</code></strong>、<strong>卸载前<code>prerm</code></strong>、<strong>卸载前<code>postrm</code></strong>,四个脚本都需要以<code>#!/bin/bash</code>开头,内容与普通脚本无异,文件名不需要后缀。</p> -<p>这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以<code>root</code>身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。</p> -<p>此外<code>postinst</code>可以用来启动已安装的程序,<code>prerm</code>常用来停止正在运行的程序。</p> -<h3>md5sums<span class="hx:absolute hx:-mt-20" id="md5sums"></span> - <a href="#md5sums" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。</p> -<h2>打包<span class="hx:absolute hx:-mt-20" id="打包"></span> - <a href="#%e6%89%93%e5%8c%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>所有文件配置完成后,进入工作空间上级目录,执行指令</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dpkg -b ./PackageDIR packagename.deb</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>deb包命名的一般规则为 <strong>软件名_版本-修订号_架构.deb</strong></p> -<h2>其他信息<span class="hx:absolute hx:-mt-20" id="其他信息"></span> - <a href="#%e5%85%b6%e4%bb%96%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。</p> - - - - - RPM安装包制作方法 - https://www.small09.top/posts/210928-rpm_package/ - Tue, 28 Sep 2021 11:06:54 +0800 - - https://www.small09.top/posts/210928-rpm_package/ - - - - <p>Linux如Centos使用的RPM打包方法。本文仅涉及二进制打包,且采用取巧的方法简化操作。(笔记,而非教程)</p> -<p><em>正文开始</em></p> - - - - - Linux恢复操作系统后mdadm导致开机变慢的方法 - https://www.small09.top/posts/210914-mdadm/ - Tue, 14 Sep 2021 15:16:13 +0800 - - https://www.small09.top/posts/210914-mdadm/ - - - - <p>解决Linux系统异地恢复后开机mdadm报错导致开机时间变长。</p> -<h2>现象<span class="hx:absolute hx:-mt-20" id="现象"></span> - <a href="#%e7%8e%b0%e8%b1%a1" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用deepin-clone恢复UOS镜像后,开机会不断跳一条日志:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mdadm: no arrays found in config file or automatically</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>大概蹦个15条后,系统才真正开机。mdadm好像是一个磁盘raid管理工具,当磁盘变化后其配置也不适配了,必须等到超时才会加载默认配置。那么我们就为其生成一个新的配置即可解决问题。</p> -<h2>方案<span class="hx:absolute hx:-mt-20" id="方案"></span> - <a href="#%e6%96%b9%e6%a1%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>步骤一:删除mdadm.conf</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo rm /etc/mdadm/mdadm.conf</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>步骤二:生成新的mdadm.conf</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo update-initramfs -u</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>ps:如果是swap分区问题导致等待90s开机慢,不归这儿管。</p> -<h2>从这儿抄的:<span class="hx:absolute hx:-mt-20" id="从这儿抄的"></span> - <a href="#%e4%bb%8e%e8%bf%99%e5%84%bf%e6%8a%84%e7%9a%84" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><a href="https://blog.csdn.net/KuXiaoQuShiHuai/article/details/99686620"target="_blank" rel="noopener">W: mdadm: no arrays found in config file or automatically导致开机变慢的解决方案(deepin)</a></p> - - - - - 使用dd指令备份和恢复Linux系统(硬盘级) - https://www.small09.top/posts/210914-linuxbackupdd/ - Tue, 14 Sep 2021 13:51:16 +0800 - - https://www.small09.top/posts/210914-linuxbackupdd/ - - - - <p>害,谁不是个DD (誰でも 大好き)了呢!</p> -<p>但是这玩意儿太慢了。。。</p> -<h2>起因<span class="hx:absolute hx:-mt-20" id="起因"></span> - <a href="#%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用UOS的时候经常需要备份镜像并分享给其他部门或者办事处的人。传统的方法是进入系统自带的Recovery分区,打开备份软件制作镜像,但是这存在两个问题:A. 镜像特别巨大,系统多大镜像就占多大。B. 必须先拥有系统,才能恢复镜像。最新版的系统中已经去掉了Recovery分区,而LiveCD镜像还不是很好用,于是有了这篇博客,试图寻找一个简单的方法来进行恢复和备份。</p> -<h2>DD说明<span class="hx:absolute hx:-mt-20" id="dd说明"></span> - <a href="#dd%e8%af%b4%e6%98%8e" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。</p> -<p>dd指令依然是有多少数据占多少空间,所以我们可以使用gzip进行压缩。具体代码后面贴出来。</p> -<p>实际使用中,发现dd指令除了方便,就没有其他优点了。它因为要读取硬盘所有数据(包括垃圾数据),即便用SSD,读盘速度还是会很慢,三刻钟才读了200GiB数据,平均75MB/s,而使用uos自带的deepin-clone,三个系统都备份完了。</p> -<h2>DD备份<span class="hx:absolute hx:-mt-20" id="dd备份"></span> - <a href="#dd%e5%a4%87%e4%bb%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda of<span style="color:#f92672">=</span>/dev/sdb <span style="color:#f92672">=</span>&gt; 备份整个磁盘到另外一个磁盘 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>sda.img <span style="color:#f92672">=</span>&gt; 备份整个磁盘为某个文件 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 备份并且压缩 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 指定块大小,备份并压缩(据说能提速)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>DD复原<span class="hx:absolute hx:-mt-20" id="dd复原"></span> - <a href="#dd%e5%a4%8d%e5%8e%9f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从另一个磁盘恢复回来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从压缩的文件恢复出来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M <span style="color:#f92672">=</span>&gt;前面指定了块大小,这里也需要</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>本文参考(抄)了以下内容:</p> -<p><a href="http://vpsxyz.com/archives/87"target="_blank" rel="noopener">Linux 下使用 dd 和 gzip 命令来代替 Ghost 做磁盘镜像</a></p> -<p><a href="https://blog.csdn.net/weixin_33971130/article/details/85662628"target="_blank" rel="noopener">linux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)</a></p> -<p>还有一些查找过程中作用不大的页面,就不贴出来了(诶嘿(╹ڡ╹ )</p> - - - - - Linux处理多触屏的终极解决方案 - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - Tue, 24 Aug 2021 00:00:00 +0800 - - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - - - - <p>一般Linux操作系统接入多个触摸屏的最终解!</p> -<p>从<a href="https://www.small09.top/posts/210311-multitouchscreeninlinux/"target="_blank" rel="noopener">21年3月中旬开始</a>,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。</p> -<p><em>重要:</em> 本文全文基于软件<code>xinput</code></p> -<p><em>更重要:</em> 如简介所说,仍有一种方法无法对应,具体为<code>【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】</code>,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。</p> -<h2>0、核心:xinput<span class="hx:absolute hx:-mt-20" id="0核心xinput"></span> - <a href="#0%e6%a0%b8%e5%bf%83xinput" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)</p> -<blockquote> - <p>xinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级</p> -<p>xinput list &ndash;id-only : 仅仅列出设备ID(序号,每次开机都可能改变)</p> -<p>xinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕</p> -<p>xinput list-props : 列出某个设备的详细信息,后接参数为设备ID。</p> - -</blockquote> -<h2>1、简约:两个完全不同的触摸显示器<span class="hx:absolute hx:-mt-20" id="1简约两个完全不同的触摸显示器"></span> - <a href="#1%e7%ae%80%e7%ba%a6%e4%b8%a4%e4%b8%aa%e5%ae%8c%e5%85%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e8%a7%a6%e6%91%b8%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>xinput map-to-output &quot;$DEVICE NAME A&quot; PORT-A</code></p> -<p>这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。</p> -<p>首先通过xinput查看所有的输入设备:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>~$ xinput -</span></span><span style="display:flex;"><span>┌ Virtual core pointer id<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">[</span>master pointer <span style="color:#f92672">(</span>3<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK TLITEK-TP id<span style="color:#f92672">=</span><span style="color:#ae81ff">9</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK Multi-Touch id<span style="color:#f92672">=</span><span style="color:#ae81ff">7</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>下略<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>可以看到<code>ILITEK ILITEK-TP</code>和<code>ILITEK Multi-Touch</code>显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:</p> -<p><code>xinput map-to-output &quot;ILITEK ILITEK-TP&quot; HDMI-0</code></p> -<p><code>xinput map-to-output &quot;ILITEK Multi-Touch&quot; HDMI-1</code></p> -<p>这种方式的要点是1.必须带英文<code>&quot;&quot;</code>,2.引号内名称须完整。<code>map-to-output</code>所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。</p> -<h2>2、复杂但通用:VID:PID不同的显示器<span class="hx:absolute hx:-mt-20" id="2复杂但通用vidpid不同的显示器"></span> - <a href="#2%e5%a4%8d%e6%9d%82%e4%bd%86%e9%80%9a%e7%94%a8vidpid%e4%b8%8d%e5%90%8c%e7%9a%84%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。</p> -<p>通过<code>xinput list-props [id]</code>可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。<code>list-props</code>的结果示例如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#f92672">(</span>后续再补<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Device Product ID</code>一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA<span style="color:#f92672">=</span>222a -</span></span><span style="display:flex;"><span>PIDA<span style="color:#f92672">=</span><span style="color:#ae81ff">0001</span> -</span></span><span style="display:flex;"><span>PORTA<span style="color:#f92672">=</span>VGA-0 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 或者这里直接填写Device Product ID里面的结果,先VID后PID。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 字母O,不是数字0,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$VIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span>PIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$PIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># =========自动处理步骤,请勿随意修改==========</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 根据设备ID取其序号</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3、屏映射,多屏重复本段</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$VIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$PIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> xinput map-to-output $I $PORTA -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span>exit <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这个脚本使用<code>xinput list --id-only</code>仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用<code>map-to-output</code>进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。</p> -<h2>3、[2]的进阶版<span class="hx:absolute hx:-mt-20" id="32的进阶版"></span> - <a href="#32%e7%9a%84%e8%bf%9b%e9%98%b6%e7%89%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。</p> -<p>在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是<code>pyudev</code>库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装<code>python3+pyudev</code>,并且使用desktop文件在开机时启动,即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/python3</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- coding: UTF-8 --</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- Author: Blues --</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> pyudev -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>context <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Context() -</span></span><span style="display:flex;"><span>monitor <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Monitor<span style="color:#f92672">.</span>from_netlink(context) -</span></span><span style="display:flex;"><span>monitor<span style="color:#f92672">.</span>filter_by(subsystem<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hid&#39;</span>) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> device <span style="color:#f92672">in</span> iter(monitor<span style="color:#f92672">.</span>poll, <span style="color:#66d9ef">None</span>): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>driver <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#34;hid-multitouch&#34;</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;add&#34;</span> <span style="color:#f92672">or</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;change&#34;</span>: -</span></span><span style="display:flex;"><span> os<span style="color:#f92672">.</span>system(<span style="color:#e6db74">&#34;/var/my-touchscreen/remap-screen&#34;</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照<em>设备名、VID、UID、物理接口</em>四大特征,自动映射到对应的显示屏上了。</p> - - - - - Linux中获得AMD显卡的状态信息 - https://www.small09.top/posts/210719-gpuinfoinlinux/ - Mon, 19 Jul 2021 11:00:07 +0800 - - https://www.small09.top/posts/210719-gpuinfoinlinux/ - - - - <p>在Linux下获得AMD GPU的状态和温度信息。</p> -<p>在Linux下如果要查看Nvidia GPU的状态信息,可以使用Nvidia驱动自带的工具。而AMD显卡一般都是使用的开源驱动,这种情况下如何获得显卡的状态和占用呢?</p> -<p><em>文章部分图片之后再附</em></p> -<h2>1、获取GPU信息<span class="hx:absolute hx:-mt-20" id="1获取gpu信息"></span> - <a href="#1%e8%8e%b7%e5%8f%96gpu%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>如需获得GPU的信息(型号、驱动)等,如果系统提供类似*“设备管理器”*的工具可以打开查看。或者就是用<code>lspci</code>指令查看。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 获得所有PCIe设备,在其中找到AMD GPU</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>exam@ple<span style="color:#f92672">]</span>:~$ lspci -</span></span><span style="display:flex;"><span>00:02.0 VGA compatible controller: xxxxxxxx -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>exam@ple<span style="color:#f92672">]</span>:~$ lspci -v -s 00:02.0 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 这里就会显示显卡的具体信息了,包括型号、驱动等,之后补充</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>2、GPU占用率<span class="hx:absolute hx:-mt-20" id="2gpu占用率"></span> - <a href="#2gpu%e5%8d%a0%e7%94%a8%e7%8e%87" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>显卡占用率是一个能反映负载的直观指标,AMD显卡可以通过安装<code>radeontop</code>软件查看。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210719133426.png" alt="radeontop界面" loading="lazy" /></p> -<p>最上面是GPU管道使用,大概类似于总体使用率的东西;最下面是内存使用率,使用sudo权限能看到更多信息。其他项目可以到radeontop的<a href="https://github.com/clbr/radeontop"target="_blank" rel="noopener">Github页面</a>查看。</p> -<h2>3、温度<span class="hx:absolute hx:-mt-20" id="3温度"></span> - <a href="#3%e6%b8%a9%e5%ba%a6" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>特指GPU温度。查阅这篇文章所涉及的知识点的最初目的,也是确认机箱过热是否是GPU的问题。</p> -<p>GPU温度使用第三方软件查看,并使其实时更新。查看温度使用<code>sensors</code>指令,通过安装<code>lm-sensors</code>实现。执行sensors时只会显示一次,我们可以利用watch指令定时刷新温度显示:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>watch -n <span style="color:#ae81ff">2</span> sensors -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 每隔2秒执行sensors指令显示结果</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>![watch执行结果](图片占位)</p> - - - - - 免密码使用sudo - https://www.small09.top/posts/210630-sudowithoutpasswd/ - Wed, 30 Jun 2021 15:14:40 +0800 - - https://www.small09.top/posts/210630-sudowithoutpasswd/ - - - - <p>记录一种可以免密码使用sudo的方法。</p> -<p>每次使用sudo提权,常常要输密码太烦了,所以想给自己赋予免密码的特权。</p> -<ol> -<li> -<p>首先登录root用户: <code>sudo -i</code></p> -</li> -<li> -<p>这个操作的核心文件是<code>/etc/sudoers</code>,可以看到这个文件是只读的,要修改他需要先赋予写入权限。</p> -</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>chmod <span style="color:#ae81ff">666</span> /etc/sudoers</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210705092601.png" alt="文件是只读权限" loading="lazy" /></p> -<ol start="3"> -<li>使用vim修改文件,<code>vi /etc/sudoers</code>,把当前用户和用户组加入,如图</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 表示为该用户免密码</span> -</span></span><span style="display:flex;"><span>yourname ALL<span style="color:#f92672">=(</span>ALL:ALL<span style="color:#f92672">)</span> NOPASSWD:ALL -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 表示为该用户组免密码</span> -</span></span><span style="display:flex;"><span>%yourname ALL<span style="color:#f92672">=(</span>ALL:ALL<span style="color:#f92672">)</span> NOPASSWD:ALL -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 不用严格按照次形式,与你的这个文件中root的格式对应即可。</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ol start="4"> -<li><code>:wq</code>保存,把sodoers改回只读</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>chmod <span style="color:#ae81ff">440</span> /etc/sudoers</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210705092637.png" alt="文件修改的内容" loading="lazy" /></p> -<ol start="5"> -<li>完成~~~ 把终端关掉再次打开就应该能看到效果了。</li> -</ol> -<blockquote> - <p><strong>PS. 不可使用sudo chmod</strong></p> -<p>一定要直接sudo -i进入root用户,如果使用sudo chmod以普通用户的身份修改sudoers文件的话,改完会发现无法使用sudo指令把权限改回去了,提示“任何人可读写,无法找到有效的sudoers”。其实还有一种更加安全的操作,但是那个编辑器用起来没有vim顺手,</p> - -</blockquote> -<p>参考:https://blog.csdn.net/wxqee/article/details/72718869</p> - - - - - deepin和UOS,快捷方式,开机自启动 - https://www.small09.top/posts/210429-deepinautorun/ - Thu, 29 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210429-deepinautorun/ - - - - <p>修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。</p> -<h2>桌面快捷方式<span class="hx:absolute hx:-mt-20" id="桌面快捷方式"></span> - <a href="#%e6%a1%8c%e9%9d%a2%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>deepin的桌面快捷方式是以<code>*.desktop</code>文件的形式实现的,所以我们需要添加自定义快捷方式的话,只要在桌面添加要给desktop格式的文本文件,编辑内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>[Desktop Entry] -Name=ddd -Exec=&#34;/usr/sbin/xx.sh&#34; -Type=Application</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Desktop Entry</code>表示声明该文件为快捷方式文件。<code>Name</code>是这个文件要显示的名字,设置了之后就可以隐藏原名称和扩展名。<code>Exec</code>是程序的启动脚本,或者启动指令。<code>Type</code>是程序类型,在开始菜单的分类中可以体现。以上四行是必须要有的参数,还有一些其他的参数不影响执行。Exec的脚本必须赋予777权限以执行。</p> -<p>把这个文件放在<code>~/Desktop</code>,就可以看到桌面上多了一个快捷方式了。</p> -<h2>开始菜单<span class="hx:absolute hx:-mt-20" id="开始菜单"></span> - <a href="#%e5%bc%80%e5%a7%8b%e8%8f%9c%e5%8d%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo cp ~/Desktop/刚刚的.desktop /usr/share/applications</code>,过一会或者注销重新登录就能看到开始菜单的响应类型下出现这个快捷方式了。</p> -<h2>开机自动执行<span class="hx:absolute hx:-mt-20" id="开机自动执行"></span> - <a href="#%e5%bc%80%e6%9c%ba%e8%87%aa%e5%8a%a8%e6%89%a7%e8%a1%8c" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>UOS/Deepin和Ubuntu<span class="hx:absolute hx:-mt-20" id="uosdeepin和ubuntu"></span> - <a href="#uosdeepin%e5%92%8cubuntu" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>cp ~/Desktop/刚刚的.desktop ~/.config/autostart</code></p> -<p>需要这个的原因主要是我执行触摸屏映射的指令经常会在桌面启动前(<code>lightdm.service</code>)执行,导致error从而无法进入桌面,将脚本放进<code>/etc/profile.d</code>之后第二天就失效了,所以需要一个在登录桌面后就实现自动执行的功能,多种方法对比下来还是放进桌面环境的开机自启文件夹比较靠谱。这样一般会在进入桌面后5-10秒自动执行,稳定性大幅提高。</p> -<p>经过实际查阅资料和测试,Ubuntu1604也完全适用上面的步骤,只不过可能需要在<code>~/.config/</code>下手动创建一个<code>autostart</code>目录。由于1604已经停止支持,许多人转入了更新的ubuntu系统,猜测近几年的也可以尝试一下。</p> -<h3>麒麟和其他使用X11桌面的Linux<span class="hx:absolute hx:-mt-20" id="麒麟和其他使用x11桌面的linux"></span> - <a href="#%e9%ba%92%e9%ba%9f%e5%92%8c%e5%85%b6%e4%bb%96%e4%bd%bf%e7%94%a8x11%e6%a1%8c%e9%9d%a2%e7%9a%84linux" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>本条目包含UOS和Ubuntu、deepin系统</p> -<p>自启动目录为<code>/etc/xdg/autostart</code>,同样的desktop文件放进去即可。但是麒麟中我使用上面的基础desktop报错,可能需要添加其他内容。</p> - - - - - Linux启用四个以上的串口 - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - Tue, 20 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - - - - <p>工控板安装Linux常常最多只能看到四个串口,通过修改引导文件可以显示所有的串口。</p> -<h2>先说结论<span class="hx:absolute hx:-mt-20" id="先说结论"></span> - <a href="#%e5%85%88%e8%af%b4%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># 1.修改开机grub文件</span> -</span></span><span style="display:flex;"><span>sudo vi /etc/default/grub -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2.在&#34;GRUB_CMDLINE_LINUX_DEFAULT=&#34;一行的结尾空格,添加内容</span> -</span></span><span style="display:flex;"><span> 8250.nr_uarts<span style="color:#f92672">=</span><span style="color:#ae81ff">8</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3.更新开机引导并重启</span> -</span></span><span style="display:flex;"><span>sudo update-grub</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>再说细节<span class="hx:absolute hx:-mt-20" id="再说细节"></span> - <a href="#%e5%86%8d%e8%af%b4%e7%bb%86%e8%8a%82" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>给带有多串口的工控机安装国产Linux操作系统UOS,发现<code>/dev/ttyS</code>只有四个,而且一个都不通,其实这是Linux 的通病,如果发行商没有提前配置,我们只能看到四个不能用的串口。但是工控机都有8-16个串口,不得不想办法让他们能够正常使用,而许多串口芯片只需要基本的驱动就能运行,也不提供专有驱动的源代码编译<font size=2 color=#ff0000>(一般安装专用驱动后,串口名称会改变,比如xr17v358芯片的驱动安装后名称变成ttyXR0)</font>,我们只有从linux本身下手了。</p> -<p>经过多番查找资料,虽然不知道为什么,但是我们应该修改<code>/etc/default/grub</code>文件,其中有一行是这样的:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;这里面 的内容 先不管 它&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>我看了UOS(含Deepin)、Ubuntu和服务器的Centos7都有,在这一行的最后添加<code>8250.nr_uart=32</code>,其中数字&lt;=32都行,效果如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;这里面 的内容 先不管 它 8250.nr_uarts=32&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后更新一下系统的引导</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo update-gurb -</span></span><span style="display:flex;"><span>reboot</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>重启完了你就能看到更多的串口啦!配合<a href="https://www.small09.top/?p=24"target="_blank" rel="noopener">修改udev规则</a>,你就可以用普通用户的权限使用串口通信了。但是请注意其他隐患,比如这个芯片配合基本驱动只能完成基础的收发功能,流控的RTS、CTS等还是需要专用驱动实现的!</p> -<h2>最后吐槽<span class="hx:absolute hx:-mt-20" id="最后吐槽"></span> - <a href="#%e6%9c%80%e5%90%8e%e5%90%90%e6%a7%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>为了串口问题我找了一下午的资料,最后才在外网找到了一个能用的。国内的教程都是说要修改<code>/boot/gurb/gurb2</code>,宝友,这可不兴改啊,这个改坏了系统可就没了啊!这些文件普通用户连浏览权限都没就可见其重要性。</p> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><a href="https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/"target="_blank" rel="noopener">https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/</a></p> -<p>核心步骤就参考了这个,在Linux方面大家还是多用google,多用英文去搜索吧!</p> - - - - - Linux修改mac地址 - https://www.small09.top/posts/210328-linuxchangemacip/ - Sun, 28 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210328-linuxchangemacip/ - - - - <p>当Linux的图形界面没有或失效的时候,该如何更改mac地址?</p> -<h1>Linux调整网卡MAC地址(指令)</h1><p>有的时候需要使用欺骗的方法为电脑设置新的mac,比如存在上网网卡限制,或者想要隐藏自己的真实mac地址。这里列举三种修改mac的方法,适用于Debian系的Linux,其他的应该类似。</p> -<h2>方法一:ifconfig<span class="hx:absolute hx:-mt-20" id="方法一ifconfig"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%b8%80ifconfig" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># ifconfig 查看网卡名称$NAME</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 需要sudo权限</span> -</span></span><span style="display:flex;"><span>ifconfig $NAME down -</span></span><span style="display:flex;"><span>ifconfig $NAME hw ether $NEW_MAC -</span></span><span style="display:flex;"><span>ifconfig $NAME up -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 使用ifconfig检查有没有改变</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>方法二:macchanger<span class="hx:absolute hx:-mt-20" id="方法二macchanger"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%ba%8cmacchanger" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo apt install macchanger</code>,安装过程提示是否自启,随便。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ifconfig $NAME down -</span></span><span style="display:flex;"><span>macchanger -m $NEW_MAC $NAME -</span></span><span style="display:flex;"><span>ifconfig $NAME up</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>ps:macchanger可以附加多种参数,如-m指定mac地址,-s查看状态,-r随机地址</p> -<h2>备注:<span class="hx:absolute hx:-mt-20" id="备注"></span> - <a href="#%e5%a4%87%e6%b3%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上两种方法是软件层面的修改,不会对硬件造成损伤,重启之后就能恢复如初。如果是要长期有效,可以把这些命令写入脚本开机自启。除了这两个,还有另一种软修改的方法,因为我总是提示失败就遗忘了。</p> -<p>有些方法会提到修改/etc目录下的文件实现MAC地址的修改,但是我一个文件都没找到(UOS),这个是因系统而异的,不同的发行版可以选择性的编译这些文件,就会造成有人有有人没有,因为没有实践,所以就不写在这里了。</p> -<h2>方法三:ethtool(慎用)<span class="hx:absolute hx:-mt-20" id="方法三ethtool慎用"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%b8%89ethtool%e6%85%8e%e7%94%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上方法都失效,可以直接修改网卡的物理MAC地址,修改后无法恢复,慎用</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 首先检查mac是否支持修改</span> -</span></span><span style="display:flex;"><span>ethtool -i $NAME -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果 supports-eeprom-access: no,大概率不支持修改</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 查看网卡的mac寄存器</span> -</span></span><span style="display:flex;"><span>ethtool -e $NAME -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果无法读取,大概率不支持修改</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 修改mac,按字节修改</span> -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">0</span> value 0xAA -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">1</span> value 0xBB -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">2</span> value 0xCC -</span></span><span style="display:flex;"><span>...共六行 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果修改无效,则驱动不支持修改</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>如果以上方法都无法修改,则建议申请新的ip。。。<span class="hx:absolute hx:-mt-20" id="如果以上方法都无法修改则建议申请新的ip"></span> - <a href="#%e5%a6%82%e6%9e%9c%e4%bb%a5%e4%b8%8a%e6%96%b9%e6%b3%95%e9%83%bd%e6%97%a0%e6%b3%95%e4%bf%ae%e6%94%b9%e5%88%99%e5%bb%ba%e8%ae%ae%e7%94%b3%e8%af%b7%e6%96%b0%e7%9a%84ip" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><em><font size="1">文章首发于<a href="small09.top" target="前往火柴盒" title="前往Kushidou个人博客" rel="noopener">香风家的小别墅</a>,转载请携带出处。</font></em></p> - - - - - 关于使用HUGO建立博客站点 - https://www.small09.top/posts/about_hugo_website/ - Tue, 23 Mar 2021 09:15:09 +0800 - - https://www.small09.top/posts/about_hugo_website/ - - - - <p>使用hugo建立本站的规划和记录。</p> -<h1>关于使用HUGO建立博客</h1><p>在经历了worldpress的性能消耗和慢速加载后,我现在决定换用hugo+caddy的建站模式。昨天已经完成了caddy2的基础设置,现在开始测试使用hugo。</p> -<h2>hugo的安装与首次创建<span class="hx:absolute hx:-mt-20" id="hugo的安装与首次创建"></span> - <a href="#hugo%e7%9a%84%e5%ae%89%e8%a3%85%e4%b8%8e%e9%a6%96%e6%ac%a1%e5%88%9b%e5%bb%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>安装使用<em>chocolatey</em>,一个windows下的仿apt、yum的软件包管理器。安装好chocolatey后,根据hugo官网的内容,<code>choco install hugo -confirm</code>安装基础的hugo(好处是不用再配置环境变量了)。</p> -<p>为hugo创建目录,进入后<code>hugo site new website</code>,hugo会自动建立它所需要的层级结构。</p> -<p>添加第一个页面,`hugo new xxx/xxx.md&rsquo;,创建的内容会出现在content下,创建多级目录也适合将来归类。</p> -<h2>编写文章<span class="hx:absolute hx:-mt-20" id="编写文章"></span> - <a href="#%e7%bc%96%e5%86%99%e6%96%87%e7%ab%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>hugo的文章是基于markdown文档的,创建的文章会自动加入以下抬头</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-TOML" data-lang="TOML"><span style="display:flex;"><span><span style="color:#a6e22e">---</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">title</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;$文章标题&#34;</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">date</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#960050;background-color:#1e0010">$时间</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">draft</span><span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#66d9ef">true</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">---</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这个可以修改为json或ymal格式,理应可以添加更多项目,这个之后再研究。</p> -<h2>主题/皮肤<span class="hx:absolute hx:-mt-20" id="主题皮肤"></span> - <a href="#%e4%b8%bb%e9%a2%98%e7%9a%ae%e8%82%a4" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>主题放在themes下,我在知乎上找到了一个高赞且顺眼的,<a href="https://www.zhihu.com/question/266175192/answer/460456938"target="_blank" rel="noopener">有哪些好看的Hugo主题? - 飞雪无情的回答 - 知乎</a>,文章中附了github连接,那么我们直接git过来就完事了。</p> -<h2>生成网站<span class="hx:absolute hx:-mt-20" id="生成网站"></span> - <a href="#%e7%94%9f%e6%88%90%e7%bd%91%e7%ab%99" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>文章+主题都有了,现在可以生成第一个网站了(虽然写这些字的时候,网站还没生成)。<code>hugo</code>就能直接产生网页,保存至public文件夹。<code>hugo server</code>可以启动一个服务器预览静态网页。</p> - - - - - Linux串口和udev理解 - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - - - - <p>配置串口权限,顺便看一下linux的udev规则。</p> -<h2>串口的问题<span class="hx:absolute hx:-mt-20" id="串口的问题"></span> - <a href="#%e4%b8%b2%e5%8f%a3%e7%9a%84%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在现场开发的同事反映UOS工控机没有配置串口,每次都需要sudo才能使用。(明明在家里你们都会自己配置好环境与权限,为什么到了现场反而不会了需要我提供协助呢?)</p> -<p>我之前没考虑过这个问题,认为串口就是得root权限操作才安全。但是既然提出了需求,就赶紧百度并测试一下吧。</p> -<h2>赋予普通用户串口权限的两种方法<span class="hx:absolute hx:-mt-20" id="赋予普通用户串口权限的两种方法"></span> - <a href="#%e8%b5%8b%e4%ba%88%e6%99%ae%e9%80%9a%e7%94%a8%e6%88%b7%e4%b8%b2%e5%8f%a3%e6%9d%83%e9%99%90%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在百度上,给普通用户串口权限有两种主流方法(可能2会了,Google上不去),一种是将用户放入特殊的用户组,从而获得权限。另一种是加入udev规则,在串口插入时自动更改权限。</p> -<p>我个人更倾向于使用第二种方案,因为公司中不同的人装系统就可能起不同的名字,之后进入生产环境可能又会起新的名字,所以采用第二种设置规则的办法,便于之后制作恢复镜像和一键部署。</p> -<h2>xxx.rules<span class="hx:absolute hx:-mt-20" id="xxxrules"></span> - <a href="#xxxrules" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo vi /etc/udev/rules.d/70-tty-usb-rules</code>,写入以下内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>KERNEL<span style="color:#f92672">==</span><span style="color:#e6db74">&#34;ttyS*&#34;</span>,MODE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0666&#34;</span> -</span></span><span style="display:flex;"><span>KERNEL<span style="color:#f92672">==</span><span style="color:#e6db74">&#34;ttyUSB*&#34;</span>,MODE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0666&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这一段的意思是匹配所有ttyS和ttyUSB,插入时都赋予0666的权限,即所有用户都可读可写。重新加载一下设备,就可以按规则配置权限进行操作了。</p> -<h2>udev规则<span class="hx:absolute hx:-mt-20" id="udev规则"></span> - <a href="#udev%e8%a7%84%e5%88%99" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>udev是什么?udev是Linux下的设备文件管理方式,运行在用户侧(devfs在内核侧管理设备文件)。有了udev,<code>/dev</code>目录下的文件就都是真实存在的已连接的设备了。</p> -<p>udev的规则都保存在<code>/etc/udev/rules.d</code>目录下,文件名的格式为<code>数字-名称.rules</code>,数字表示加载顺序,一般是从小往大加载;名称按功能自定义,最后以.rules结尾。这些规则会在设备接入时生效。</p> -<p>规则文件按行执行,每行分为两个部分:匹配和赋值,每个参数使用逗号,分割。</p> -<blockquote> - <p>(这段复制自引用2,仅供参考)。 -<strong>1、udev 规则的所有操作符</strong> -<strong>==</strong>  比较键、值,若等于,则该条件满足; -<strong>!=</strong>  比较键、值,若不等于,则该条件满足; -<strong>=</strong>   对一个键赋值; -<strong>+=</strong>  为一个表示多个条目的键赋值。 -<strong>:=</strong>  对一个键赋值,并拒绝之后所有对该键的改动,防止后面的规则文件对该键重赋值。</p> -<p><strong>2、udev 规则的匹配键</strong> -<strong>ACTION</strong>        事件 (uevent) 的行为,例如:add、remove。 -<strong>KERNEL</strong>         内核设备名称,例如:sda, cdrom。 -<strong>DEVPATH</strong>        设备的 devpath 路径。 -<strong>SUBSYSTEM</strong>       设备的子系统名称,例如:sda 的子系统为 block。 -<strong>BUS</strong>           设备在 devpath 里的总线名称,例如:usb。 -<strong>DRIVER</strong>         设备在 devpath 里的设备驱动名称,例如:ide-cdrom。 -<strong>ID</strong>            设备在 devpath 里的识别号。 -<strong>SYSFS{filename}</strong>    设备的 devpath 路径下,设备的属性文件“filename”里的内容。 -<strong>ENV{key}</strong>       环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。 -<strong>PROGRAM</strong>        调用外部命令。 -<strong>RESULT</strong>         外部命令 PROGRAM 的返回结果。</p> -<p><strong>3、udev 的重要赋值键</strong> -<strong>NAME</strong>           /dev目录下显示的文件名重命名 -<strong>SYMLINK</strong>          为 /dev下文件进行符号链接,防止覆盖系统默认产生的文件 -<strong>OWNER, GROUP, MODE</strong>  为设备设定权限。 -<strong>ENV{key}</strong>         导入一个环境变量。</p> -<p><strong>4、udev 的值和可调用的替换操作符</strong> -Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符: -<strong>$kernel, %k</strong>        设备的内核设备名称,例如:sda、cdrom。 -<strong>$number, %n</strong>        设备的内核号码,例如:sda3 的内核号码是 3。 -<strong>$devpath, %p</strong>       设备的 devpath路径。 -<strong>$id, %b</strong>          设备在 devpath里的 ID 号。 -<strong>$sysfs{file}, %s{file}</strong>   设备的 sysfs里 file 的内容。其实就是设备的属性值。 -<strong>$env{key}, %E{key}</strong>   一个环境变量的值。 -<strong>$major, %M</strong>        设备的 major 号。 -<strong>$minor %m</strong>        设备的 minor 号。 -<strong>$result, %c</strong>        PROGRAM 返回的结果。 -<strong>$parent, %P</strong>       父设备的设备文件名。 -<strong>$root, %r</strong>         udev_root的值,默认是 /dev/。 -<strong>$tempnode, %N</strong>      临时设备名。 -<strong>%%</strong>            符号 % 本身。 -<strong>$$</strong>             符号 $ 本身。</p> - -</blockquote> -<h2>参考<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://www.cnblogs.com/qixianyu/p/6869744.html -[2]https://www.cnblogs.com/cslunatic/p/3171837.html</p> - - - - - Linux多显示器触屏调试与暂行解决方案 - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - - - - <p>由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。</p> -<p><em>2021-03-22更新部分内容</em> -<em>2021-04-28再次更新内容</em></p> -<p><strong>2021-09-14 文章已有新版本,请访问《<a href="https://www.small09.top/posts/210824-linuxtouchscreenfin/"target="_blank" rel="noopener">Linux处理多触屏的终极解决方案</a>》</strong></p> -<h2>问题来源<span class="hx:absolute hx:-mt-20" id="问题来源"></span> - <a href="#%e9%97%ae%e9%a2%98%e6%9d%a5%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 -接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为</p> -<p><code>xinput map-to-output $触屏设备id $显示屏名称</code></p> -<blockquote> - <p>2021-04-28更新</p> -<p><code>xinput map-to-output</code>指令支持触摸屏名称作为参数,比如我通过<code>xinput</code>指令看到有一个触摸屏的设备名称为<code>ILITEK XXXX</code>,那么我映射的时候直接输入</p> -<blockquote> - <p><code>xinput map-to-output &quot;ILITEK XXX&quot; HDMI-1</code></p> - -</blockquote> - -</blockquote> -<h2>尝试解决<span class="hx:absolute hx:-mt-20" id="尝试解决"></span> - <a href="#%e5%b0%9d%e8%af%95%e8%a7%a3%e5%86%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ul> -<li>首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。</li> -<li><del>然后<code>xinput list-props $id</code>查看设备的VID,这个在后续自动化处理有用。</del></li> -<li><code>xrandr</code>查看<code>$显示器名称</code></li> -</ul> -<h2>自动化处理<span class="hx:absolute hx:-mt-20" id="自动化处理"></span> - <a href="#%e8%87%aa%e5%8a%a8%e5%8c%96%e5%a4%84%e7%90%86" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 2021-04-28更新:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 本部分后面的都可以不看了!</span> -</span></span><span style="display:flex;"><span>xinput map-to-output <span style="color:#e6db74">&#34;DEVICE_NAME&#34;</span> DISPLAY -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><strong>仅作归档!下面这些方法过于繁琐!</strong></p> -<p>利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。<code>bash this.sh VID1 VID2 ScreenID</code></p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。</span> -</span></span><span style="display:flex;"><span>MYID_FIRST<span style="color:#f92672">=</span>$1 -</span></span><span style="display:flex;"><span>MYID_SECOND<span style="color:#f92672">=</span>$2 -</span></span><span style="display:flex;"><span>OUT_PUT<span style="color:#f92672">=</span>$3 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#[1]</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> MY_INDEX<span style="color:#f92672">=</span>$I -</span></span><span style="display:flex;"><span> break; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>xinput map-to-output $MY_INDEX $OUT_PUT -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI2</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI1</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput | grep -iw DEVICE_NAME<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID#*id=<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID%% *<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>xinput map-to-output $TOUCH_ID SCREEN_NAME</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),<del>使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id</del>。</p> -<p>经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在<code>~/.bashrc</code>中,这样只需要打开一次终端,就可以实现屏幕重新映射。</p> -<h2>后续问题<span class="hx:absolute hx:-mt-20" id="后续问题"></span> - <a href="#%e5%90%8e%e7%bb%ad%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li>当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。</li> -<li>当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数</li> -<li>如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。</li> -</ol> -<h2>触屏校准(如果需要)<span class="hx:absolute hx:-mt-20" id="触屏校准如果需要"></span> - <a href="#%e8%a7%a6%e5%b1%8f%e6%a0%a1%e5%87%86%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>网上说的利用校准来区分多触摸屏的方法是<strong>完全错误</strong>的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)</p> -<ul> -<li><code>sudo apt install xinput-calibrator</code>,需要更新源</li> -<li><code>sudo xinput_calibrator</code></li> -<li>将校准信息保存到<code>/usr/share/X11/xorg.conf.d/10-evdev.conf</code>的&quot;Driver evdev”下面一行,重启生效。</li> -</ul> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 -[2]https://blog.csdn.net/qq_33406883/article/details/106649087 -[3]https://segmentfault.com/a/1190000020334077</p> - - - - - 使用Docker安装TeamSpeak - https://www.small09.top/posts/210218-teamspeakwithdocker/ - Thu, 18 Feb 2021 00:00:00 +0800 - - https://www.small09.top/posts/210218-teamspeakwithdocker/ - - - - <p>TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。</p> -<h2>Teamspeak<span class="hx:absolute hx:-mt-20" id="teamspeak"></span> - <a href="#teamspeak" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。</p> -<p>所以,选择docker安装ts就是一个很不错的选择。</p> -<h2>Docker及其安装<span class="hx:absolute hx:-mt-20" id="docker及其安装"></span> - <a href="#docker%e5%8f%8a%e5%85%b6%e5%ae%89%e8%a3%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。</p> -<p>我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo yum install docker <span style="color:#75715e">#安装docker程序,会自动选择合适的</span> -</span></span><span style="display:flex;"><span>sudo systemctl start docker <span style="color:#75715e">#启动docker服务</span> -</span></span><span style="display:flex;"><span>sudo systemctl enable docker <span style="color:#75715e">#允许docker开机自启</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>Docker安装TS<span class="hx:absolute hx:-mt-20" id="docker安装ts"></span> - <a href="#docker%e5%ae%89%e8%a3%85ts" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak</code></p> -<p>直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。</p> -<h2>端口<span class="hx:absolute hx:-mt-20" id="端口"></span> - <a href="#%e7%ab%af%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>从指令可以看出,docker需要使用到<strong>9987,10011,30033</strong>三个端口,所以需要到服务器后台开启防火墙上对应端口。</p> -<h2>管理员密钥<span class="hx:absolute hx:-mt-20" id="管理员密钥"></span> - <a href="#%e7%ae%a1%e7%90%86%e5%91%98%e5%af%86%e9%92%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。</p> -<p><code>docker ps -a</code>查找所有容器。</p> -<p><code>docker logs -f [CONTATINER ID]</code>查看log,找到token即可。客户端设置之后再说。</p> -<p>密钥只会在第一次运行时打印,注意保存。</p> -<p><em>参考:<a href="https://woolio.cn/683/"target="_blank" rel="noopener">https://woolio.cn/683/</a></em></p> - - - - - diff --git a/public/js/flexsearch.433e941a8a573ebb9931fc16fc75266ab6b93f569ac2fb4f3dc66882e0416f4c.js b/public/js/flexsearch.433e941a8a573ebb9931fc16fc75266ab6b93f569ac2fb4f3dc66882e0416f4c.js deleted file mode 100644 index 970b757..0000000 --- a/public/js/flexsearch.433e941a8a573ebb9931fc16fc75266ab6b93f569ac2fb4f3dc66882e0416f4c.js +++ /dev/null @@ -1,96 +0,0 @@ -/**! - * FlexSearch.js v0.8.143 (Bundle) - * Author and Copyright: Thomas Wilkerling - * Licence: Apache-2.0 - * Hosted by Nextapps GmbH - * https://github.com/nextapps-de/flexsearch - */ -(function _f(self){'use strict';if(typeof module!=='undefined')self=module;else if(typeof process !== 'undefined')self=process;self._factory=_f;var t;function z(a,c,b){const e=typeof b,d=typeof a;if("undefined"!==e){if("undefined"!==d){if(b){if("function"===d&&e===d)return function(h){return a(b(h))};c=a.constructor;if(c===b.constructor){if(c===Array)return b.concat(a);if(c===Map){var f=new Map(b);for(var g of a)f.set(g[0],g[1]);return f}if(c===Set){g=new Set(b);for(f of a.values())g.add(f);return g}}}return a}return b}return"undefined"===d?c:a}function B(){return Object.create(null)}function E(a){return"string"===typeof a} -function I(a){return"object"===typeof a}function aa(a){const c=[];for(const b of a.keys())c.push(b);return c}function ba(a,c){if(E(c))a=a[c];else for(let b=0;a&&b"a1a".split(b).length; -this.numeric=z(a.numeric,e)}else{try{this.split=z(this.split,da)}catch(d){this.split=/\s+/}this.numeric=z(a.numeric,z(this.numeric,!0))}this.prepare=z(a.prepare,null,this.prepare);this.finalize=z(a.finalize,null,this.finalize);b=a.filter;this.filter="function"===typeof b?b:z(b&&new Set(b),null,this.filter);this.dedupe=z(a.dedupe,!1,this.dedupe);this.matcher=z((b=a.matcher)&&new Map(b),null,this.matcher);this.mapper=z((b=a.mapper)&&new Map(b),null,this.mapper);this.stemmer=z((b=a.stemmer)&&new Map(b), -null,this.stemmer);this.replacer=z(a.replacer,null,this.replacer);this.minlength=z(a.minlength,1,this.minlength);this.maxlength=z(a.maxlength,0,this.maxlength);this.rtl=z(a.rtl,!1,this.rtl);if(this.cache=b=z(a.cache,!0,this.cache))this.H=null,this.S="number"===typeof b?b:2E5,this.B=new Map,this.G=new Map,this.L=this.K=128;this.h="";this.M=null;this.A="";this.N=null;if(this.matcher)for(const d of this.matcher.keys())this.h+=(this.h?"|":"")+d;if(this.stemmer)for(const d of this.stemmer.keys())this.A+= -(this.A?"|":"")+d;return this};t.addStemmer=function(a,c){this.stemmer||(this.stemmer=new Map);this.stemmer.set(a,c);this.A+=(this.A?"|":"")+a;this.N=null;this.cache&&K(this);return this};t.addFilter=function(a){"function"===typeof a?this.filter=a:(this.filter||(this.filter=new Set),this.filter.add(a));this.cache&&K(this);return this}; -t.addMapper=function(a,c){if("object"===typeof a)return this.addReplacer(a,c);if(1a.length&&(this.dedupe||this.mapper))return this.addMapper(a,c);this.matcher||(this.matcher=new Map);this.matcher.set(a,c);this.h+=(this.h?"|":"")+a;this.M=null;this.cache&&K(this);return this}; -t.addReplacer=function(a,c){if("string"===typeof a)return this.addMatcher(a,c);this.replacer||(this.replacer=[]);this.replacer.push(a,c);this.cache&&K(this);return this}; -t.encode=function(a){if(this.cache&&a.length<=this.K)if(this.H){if(this.B.has(a))return this.B.get(a)}else this.H=setTimeout(K,50,this);this.normalize&&("function"===typeof this.normalize?a=this.normalize(a):a=ia?a.normalize("NFKD").replace(ia,"").toLowerCase():a.toLowerCase());this.prepare&&(a=this.prepare(a));this.numeric&&3this.stemmer.get(k)),d!==g&&this.filter&& -g.length>=this.minlength&&("function"===typeof this.filter?!this.filter(g):this.filter.has(g))&&(g=""));if(g&&(this.mapper||this.dedupe&&1this.matcher.get(k)));if(g&&this.replacer)for(d=0;g&&dthis.S&&(this.G.clear(),this.L=this.L/1.1|0));g&&b.push(g)}this.finalize&&(b=this.finalize(b)||b);this.cache&&a.length<=this.K&&(this.B.set(a,b),this.B.size>this.S&&(this.B.clear(),this.K=this.K/1.1|0));return b};function K(a){a.H=null;a.B.clear();a.G.clear()};let M,ja;async function ka(a){a=a.data;var c=a.task;const b=a.id;let e=a.args;switch(c){case "init":ja=a.options||{};(c=a.factory)?(Function("return "+c)()(self),M=new self.FlexSearch.Index(ja),delete self.FlexSearch):M=new N(ja);postMessage({id:b});break;default:let d;"export"===c&&(e[1]?(e[0]=ja.export,e[2]=0,e[3]=1):e=null);"import"===c?e[0]&&(a=await ja.import.call(M,e[0]),M.import(e[0],a)):(d=e&&M[c].apply(M,e))&&d.then&&(d=await d);postMessage("search"===c?{id:b,msg:d}:{id:b})}};function la(a){ma.call(a,"add");ma.call(a,"append");ma.call(a,"search");ma.call(a,"update");ma.call(a,"remove")}let na,oa,pa;function qa(){na=pa=0} -function ma(a){this[a+"Async"]=function(){const c=arguments;var b=c[c.length-1];let e;"function"===typeof b&&(e=b,delete c[c.length-1]);na?pa||(pa=Date.now()-oa>=this.priority*this.priority*3):(na=setTimeout(qa,0),oa=Date.now());if(pa){const f=this;return new Promise(g=>{setTimeout(function(){g(f[a+"Async"].apply(f,c))},0)})}const d=this[a].apply(this,c);b=d.then?d:new Promise(f=>f(d));e&&b.then(e);return b}};let O=0; -function P(a={}){function c(g){function h(k){k=k.data||k;const l=k.id,n=l&&d.h[l];n&&(n(k.msg),delete d.h[l])}this.worker=g;this.h=B();if(this.worker){e?this.worker.on("message",h):this.worker.onmessage=h;if(a.config)return new Promise(function(k){d.h[++O]=function(){k(d);1E9=g.length)c-=g.length;else{c=g[e?"splice":"slice"](c,b);const h=c.length;if(h&&(d=d.length?d.concat(c):c,b-=h,e&&(a.length-=h),!b))break;c=0}return d} -function R(a){if(!this||this.constructor!==R)return new R(a);this.index=a?[a]:[];this.length=a?a.length:0;const c=this;return new Proxy([],{get(b,e){if("length"===e)return c.length;if("push"===e)return function(d){c.index[c.index.length-1].push(d);c.length++};if("pop"===e)return function(){if(c.length)return c.length--,c.index[c.index.length-1].pop()};if("indexOf"===e)return function(d){let f=0;for(let g=0,h,k;gb||e?k.slice(e,b+e):k;else{if(ab||e)k=k.slice(e,b+e)}else{d=[];for(let m= -0,q;me)e-=q.length;else{if(q.length>b||e)q=q.slice(e,b+e),b-=q.length,e&&(e-=q.length);d.push(q);if(!b)break}k=1c?c?a.slice(b,b+c):a.slice(b):a,e?V.call(this,a):a;let d=[];for(let f=0,g,h;f=h){b-=h;continue}bc&&(g=g.slice(0,c),h=c);if(!d.length&&h>=c)return e?V.call(this,g):g;d.push(g);c-=h;if(!c)break}d=1a.length?this.result=a[0]:(this.result=Ga(a,b,e,!1,this.h),e=0));return f?this.resolve(b,e,d):this};W.prototype.and=function(){let a=this.result.length,c,b,e,d;if(!a){const f=arguments[0];f&&(a=!!f.suggest,d=f.resolve,c=f.limit,b=f.offset,e=f.enrich&&d)}if(a){const {O:f,P:g,limit:h,offset:k,enrich:l,resolve:n,suggest:m}=Ja(this,"and",arguments);return La.call(this,f,g,h,k,l,n,m)}return d?this.resolve(c,b,e):this}; -function La(a,c,b,e,d,f,g){if(c.length){const h=this;return Promise.all(c).then(function(k){a=[];for(let l=0,n;la.length)this.result=a[0];else{if(c=ca(a))return this.result=Fa(a,c,b,e,g,this.h,f),f?d?V.call(this.index,this.result):this.result:this;this.result=[]}else g||(this.result=a);return f?this.resolve(b,e,d):this};W.prototype.xor=function(){const {O:a,P:c,limit:b,offset:e,enrich:d,resolve:f,suggest:g}=Ja(this,"xor",arguments);return Ma.call(this,a,c,b,e,d,f,g)}; -function Ma(a,c,b,e,d,f,g){if(c.length){const h=this;return Promise.all(c).then(function(k){a=[];for(let l=0,n;la.length)this.result=a[0];else return this.result=Na.call(this,a,b,e,f,this.h),f?d?V.call(this.index,this.result):this.result:this;else g||(this.result=a);return f?this.resolve(b,e,d):this} -function Na(a,c,b,e,d){const f=[],g=B();let h=0;for(let k=0,l;kb||e)a=a.slice(e,e+b);d&&(a=V.call(this,a));return a}}function V(a){if(!this||!this.store)return a;const c=Array(a.length);for(let b=0,e;bthis.limit&&this.cache.delete(this.cache.keys().next().value)}; -X.prototype.get=function(a){const c=this.cache.get(a);c&&this.h!==a&&(this.cache.delete(a),this.cache.set(this.h=a,c));return c};X.prototype.remove=function(a){for(const c of this.cache){const b=c[0];c[1].includes(a)&&this.cache.delete(b)}};X.prototype.clear=function(){this.cache.clear();this.h=""};const Wa={normalize:!1,numeric:!1,split:/\s+/};const Xa={normalize:!0};const Ya={normalize:!0,dedupe:!0};const Za=new Map([["b","p"],["v","f"],["w","f"],["z","s"],["x","s"],["d","t"],["n","m"],["c","k"],["g","k"],["j","k"],["q","k"],["i","e"],["y","e"],["u","o"]]);const $a=new Map([["ae","a"],["oe","o"],["sh","s"],["kh","k"],["th","t"],["ph","f"],["pf","f"]]),ab=[/([^aeo])h(.)/g,"$1$2",/([aeo])h([^aeo]|$)/g,"$1$2",/(.)\1+/g,"$1"];const bb={a:"",e:"",i:"",o:"",u:"",y:"",b:1,f:1,p:1,v:1,c:2,g:2,j:2,k:2,q:2,s:2,x:2,z:2,"\u00df":2,d:3,t:3,l:4,m:5,n:5,r:6};var cb={X:Wa,W:Xa,Y:Ya,LatinBalance:{normalize:!0,dedupe:!0,mapper:Za},LatinAdvanced:{normalize:!0,dedupe:!0,mapper:Za,matcher:$a,replacer:ab},LatinExtra:{normalize:!0,dedupe:!0,mapper:Za,replacer:ab.concat([/(?!^)[aeo]/g,""]),matcher:$a},LatinSoundex:{normalize:!0,dedupe:!1,include:{letter:!0},finalize:function(a){for(let b=0;bu;f--){g=r.substring(u,f);v=this.rtl?d-1-u:u;var h=this.score?this.score(c,r,p,g,v):eb(q,e,p,d,v); -fb(this,n,g,h,a,b)}break}case "bidirectional":case "reverse":if(1g?0:1), -e,p,h-1,k-1),v=this.bidirectional&&r>f;fb(this,l,v?f:r,u,a,b,v?r:f)}}}}this.fastupdate||this.reg.add(a)}else c=""}this.db&&(c||this.commit_task.push({del:a}),this.T&&gb(this));return this}; -function fb(a,c,b,e,d,f,g){let h=g?a.ctx:a.map,k;if(!c[b]||g&&!(k=c[b])[g])if(g?(c=k||(c[b]=B()),c[g]=1,(k=h.get(g))?h=k:h.set(g,h=new Map)):c[b]=1,(k=h.get(b))?h=k:h.set(b,h=k=[]),h=h[e]||(h[e]=[]),!f||!h.includes(d)){if(h.length===2**31-1){c=new R(h);if(a.fastupdate)for(let l of a.reg.values())l.includes(h)&&(l[l.indexOf(h)]=c);k[e]=h=c}h.push(d);a.fastupdate&&((e=a.reg.get(d))?e.push(h):a.reg.set(d,[h]))}} -function eb(a,c,b,e,d){return b&&1b)&&(k=b,b=c,c=k);if(a.db)return a.db.get(c,b,e,d,f,g,h);a=b?(a=a.ctx.get(b))&&a.get(c):a.map.get(c);return a};N.prototype.remove=function(a,c){const b=this.reg.size&&(this.fastupdate?this.reg.get(a):this.reg.has(a));if(b){if(this.fastupdate)for(let e=0,d;ed.length)d.pop();else{const f=d.indexOf(a);f===b.length-1?d.pop():d.splice(f,1)}}else lb(this.map,a),this.depth&&lb(this.ctx,a);c||this.reg.delete(a)}this.db&&(this.commit_task.push({del:a}),this.T&&gb(this));this.cache&&this.cache.remove(a);return this}; -function lb(a,c){let b=0;if(a.constructor===Array)for(let e=0,d,f;eb.add(a,c)):this.add(a,c)}; -function mb(a){let c=0;if(a.constructor===Array)for(let b=0,e;b=n.length){e-=n.length;continue}const m=b?e+Math.min(n.length-e,b):n.length;for(let q=e;q=f.length)return[];if(!c&&!b)return f;f=f.slice(b,b+c);return e?d.enrich(f):f})}; -t.enrich=function(a){"object"!==typeof a&&(a=[a]);const c=this.db.transaction("reg","readonly").objectStore("reg"),b=[];for(let e=0;e{a.onsuccess=a.oncomplete=function(){c&&c(this.result);c=null;b(this.result)};a.onerror=a.onblocked=e;a=null})};const rb={Index:N,Charset:cb,Encoder:J,Document:U,Worker:P,Resolver:W,IndexedDB:pb,Language:{}},tb="undefined"!==typeof self?self:"undefined"!==typeof global?global:self;let ub;(ub=tb.define)&&ub.amd?ub([],function(){return rb}):"object"===typeof tb.exports?tb.exports=rb:tb.FlexSearch=rb;}(this||self)); diff --git a/public/js/flexsearch.9f5b5908f93ae86f1ecd4b043b799f580c2d1654e703dd9357d568ac41b2547a.js b/public/js/flexsearch.9f5b5908f93ae86f1ecd4b043b799f580c2d1654e703dd9357d568ac41b2547a.js deleted file mode 100644 index 82ae0dd..0000000 --- a/public/js/flexsearch.9f5b5908f93ae86f1ecd4b043b799f580c2d1654e703dd9357d568ac41b2547a.js +++ /dev/null @@ -1,2525 +0,0 @@ -/**! - * FlexSearch.js v0.8.143 (Bundle/Debug) - * Author and Copyright: Thomas Wilkerling - * Licence: Apache-2.0 - * Hosted by Nextapps GmbH - * https://github.com/nextapps-de/flexsearch - */ -(function _f(self){'use strict';if(typeof module!=='undefined')self=module;else if(typeof process !== 'undefined')self=process;self._factory=_f; -var t; -function z(a, c, b) { - const e = typeof b, d = typeof a; - if ("undefined" !== e) { - if ("undefined" !== d) { - if (b) { - if ("function" === d && e === d) { - return function(k) { - return a(b(k)); - }; - } - c = a.constructor; - if (c === b.constructor) { - if (c === Array) { - return b.concat(a); - } - if (c === Map) { - var f = new Map(b); - for (var g of a) { - f.set(g[0], g[1]); - } - return f; - } - if (c === Set) { - g = new Set(b); - for (f of a.values()) { - g.add(f); - } - return g; - } - } - } - return a; - } - return b; - } - return "undefined" === d ? c : a; -} -function B() { - return Object.create(null); -} -function E(a) { - return "string" === typeof a; -} -function I(a) { - return "object" === typeof a; -} -function aa(a) { - const c = []; - for (const b of a.keys()) { - c.push(b); - } - return c; -} -function ba(a, c) { - if (E(c)) { - a = a[c]; - } else { - for (let b = 0; a && b < c.length; b++) { - a = a[c[b]]; - } - } - return a; -} -function ca(a) { - let c = 0; - for (let b = 0, e; b < a.length; b++) { - (e = a[b]) && c < e.length && (c = e.length); - } - return c; -} -;const da = /[^\p{L}\p{N}]+/u, ea = /(\d{3})/g, fa = /(\D)(\d{3})/g, ha = /(\d{3})(\D)/g, ia = /[\u0300-\u036f]/g; -function ja(a = {}) { - if (!this || this.constructor !== ja) { - return new ja(...arguments); - } - if (arguments.length) { - for (a = 0; a < arguments.length; a++) { - this.assign(arguments[a]); - } - } else { - this.assign(a); - } -} -t = ja.prototype; -t.assign = function(a) { - this.normalize = z(a.normalize, !0, this.normalize); - let c = a.include, b = c || a.exclude || a.split, e; - if (b || "" === b) { - if ("object" === typeof b && b.constructor !== RegExp) { - let d = ""; - e = !c; - c || (d += "\\p{Z}"); - b.letter && (d += "\\p{L}"); - b.number && (d += "\\p{N}", e = !!c); - b.symbol && (d += "\\p{S}"); - b.punctuation && (d += "\\p{P}"); - b.control && (d += "\\p{C}"); - if (b = b.char) { - d += "object" === typeof b ? b.join("") : b; - } - try { - this.split = new RegExp("[" + (c ? "^" : "") + d + "]+", "u"); - } catch (f) { - console.error("Your split configuration:", b, "is not supported on this platform. It falls back to using simple whitespace splitter instead: /s+/."), this.split = /\s+/; - } - } else { - this.split = b, e = !1 === b || 2 > "a1a".split(b).length; - } - this.numeric = z(a.numeric, e); - } else { - try { - this.split = z(this.split, da); - } catch (d) { - console.warn("This platform does not support unicode regex. It falls back to using simple whitespace splitter instead: /s+/."), this.split = /\s+/; - } - this.numeric = z(a.numeric, z(this.numeric, !0)); - } - this.prepare = z(a.prepare, null, this.prepare); - this.finalize = z(a.finalize, null, this.finalize); - b = a.filter; - this.filter = "function" === typeof b ? b : z(b && new Set(b), null, this.filter); - this.dedupe = z(a.dedupe, !1, this.dedupe); - this.matcher = z((b = a.matcher) && new Map(b), null, this.matcher); - this.mapper = z((b = a.mapper) && new Map(b), null, this.mapper); - this.stemmer = z((b = a.stemmer) && new Map(b), null, this.stemmer); - this.replacer = z(a.replacer, null, this.replacer); - this.minlength = z(a.minlength, 1, this.minlength); - this.maxlength = z(a.maxlength, 0, this.maxlength); - this.rtl = z(a.rtl, !1, this.rtl); - if (this.cache = b = z(a.cache, !0, this.cache)) { - this.H = null, this.S = "number" === typeof b ? b : 2e5, this.B = new Map(), this.G = new Map(), this.L = this.K = 128; - } - this.h = ""; - this.M = null; - this.A = ""; - this.N = null; - if (this.matcher) { - for (const d of this.matcher.keys()) { - this.h += (this.h ? "|" : "") + d; - } - } - if (this.stemmer) { - for (const d of this.stemmer.keys()) { - this.A += (this.A ? "|" : "") + d; - } - } - return this; -}; -t.addStemmer = function(a, c) { - this.stemmer || (this.stemmer = new Map()); - this.stemmer.set(a, c); - this.A += (this.A ? "|" : "") + a; - this.N = null; - this.cache && J(this); - return this; -}; -t.addFilter = function(a) { - "function" === typeof a ? this.filter = a : (this.filter || (this.filter = new Set()), this.filter.add(a)); - this.cache && J(this); - return this; -}; -t.addMapper = function(a, c) { - if ("object" === typeof a) { - return this.addReplacer(a, c); - } - if (1 < a.length) { - return this.addMatcher(a, c); - } - this.mapper || (this.mapper = new Map()); - this.mapper.set(a, c); - this.cache && J(this); - return this; -}; -t.addMatcher = function(a, c) { - if ("object" === typeof a) { - return this.addReplacer(a, c); - } - if (2 > a.length && (this.dedupe || this.mapper)) { - return this.addMapper(a, c); - } - this.matcher || (this.matcher = new Map()); - this.matcher.set(a, c); - this.h += (this.h ? "|" : "") + a; - this.M = null; - this.cache && J(this); - return this; -}; -t.addReplacer = function(a, c) { - if ("string" === typeof a) { - return this.addMatcher(a, c); - } - this.replacer || (this.replacer = []); - this.replacer.push(a, c); - this.cache && J(this); - return this; -}; -t.encode = function(a) { - if (this.cache && a.length <= this.K) { - if (this.H) { - if (this.B.has(a)) { - return this.B.get(a); - } - } else { - this.H = setTimeout(J, 50, this); - } - } - this.normalize && ("function" === typeof this.normalize ? a = this.normalize(a) : a = ia ? a.normalize("NFKD").replace(ia, "").toLowerCase() : a.toLowerCase()); - this.prepare && (a = this.prepare(a)); - this.numeric && 3 < a.length && (a = a.replace(fa, "$1 $2").replace(ha, "$1 $2").replace(ea, "$1 ")); - const c = !(this.dedupe || this.mapper || this.filter || this.matcher || this.stemmer || this.replacer); - let b = [], e = this.split || "" === this.split ? a.split(this.split) : a; - for (let f = 0, g, k; f < e.length; f++) { - if ((g = k = e[f]) && !(g.length < this.minlength)) { - if (c) { - b.push(g); - } else { - if (!this.filter || ("function" === typeof this.filter ? this.filter(g) : !this.filter.has(g))) { - if (this.cache && g.length <= this.L) { - if (this.H) { - var d = this.G.get(g); - if (d || "" === d) { - d && b.push(d); - continue; - } - } else { - this.H = setTimeout(J, 50, this); - } - } - this.stemmer && 2 < g.length && (this.N || (this.N = new RegExp("(?!^)(" + this.A + ")$")), d = g, g = g.replace(this.N, h => this.stemmer.get(h)), d !== g && this.filter && g.length >= this.minlength && ("function" === typeof this.filter ? !this.filter(g) : this.filter.has(g)) && (g = "")); - if (g && (this.mapper || this.dedupe && 1 < g.length)) { - d = ""; - for (let h = 0, l = "", n, m; h < g.length; h++) { - n = g.charAt(h), n === l && this.dedupe || ((m = this.mapper && this.mapper.get(n)) || "" === m ? m === l && this.dedupe || !(l = m) || (d += m) : d += l = n); - } - g = d; - } - this.matcher && 1 < g.length && (this.M || (this.M = new RegExp("(" + this.h + ")", "g")), g = g.replace(this.M, h => this.matcher.get(h))); - if (g && this.replacer) { - for (d = 0; g && d < this.replacer.length; d += 2) { - g = g.replace(this.replacer[d], this.replacer[d + 1]); - } - } - this.cache && k.length <= this.L && (this.G.set(k, g), this.G.size > this.S && (this.G.clear(), this.L = this.L / 1.1 | 0)); - g && b.push(g); - } - } - } - } - this.finalize && (b = this.finalize(b) || b); - this.cache && a.length <= this.K && (this.B.set(a, b), this.B.size > this.S && (this.B.clear(), this.K = this.K / 1.1 | 0)); - return b; -}; -function J(a) { - a.H = null; - a.B.clear(); - a.G.clear(); -} -;let K, M; -async function ka(a) { - a = a.data; - var c = a.task; - const b = a.id; - let e = a.args; - switch(c) { - case "init": - M = a.options || {}; - (c = a.factory) ? (Function("return " + c)()(self), K = new self.FlexSearch.Index(M), delete self.FlexSearch) : K = new N(M); - postMessage({id:b}); - break; - default: - let d; - if ("export" === c) { - if (!M.export || "function" !== typeof M.export) { - throw Error('Either no extern configuration provided for the Worker-Index or no method was defined on the config property "export".'); - } - e[1] ? (e[0] = M.export, e[2] = 0, e[3] = 1) : e = null; - } - if ("import" === c) { - if (!M.import || "function" !== typeof M.import) { - throw Error('Either no extern configuration provided for the Worker-Index or no method was defined on the config property "import".'); - } - e[0] && (a = await M.import.call(K, e[0]), K.import(e[0], a)); - } else { - (d = e && K[c].apply(K, e)) && d.then && (d = await d); - } - postMessage("search" === c ? {id:b, msg:d} : {id:b}); - } -} -;function la(a) { - ma.call(a, "add"); - ma.call(a, "append"); - ma.call(a, "search"); - ma.call(a, "update"); - ma.call(a, "remove"); -} -let na, oa, pa; -function qa() { - na = pa = 0; -} -function ma(a) { - this[a + "Async"] = function() { - const c = arguments; - var b = c[c.length - 1]; - let e; - "function" === typeof b && (e = b, delete c[c.length - 1]); - na ? pa || (pa = Date.now() - oa >= this.priority * this.priority * 3) : (na = setTimeout(qa, 0), oa = Date.now()); - if (pa) { - const f = this; - return new Promise(g => { - setTimeout(function() { - g(f[a + "Async"].apply(f, c)); - }, 0); - }); - } - const d = this[a].apply(this, c); - b = d.then ? d : new Promise(f => f(d)); - e && b.then(e); - return b; - }; -} -;let O = 0; -function P(a = {}) { - function c(g) { - function k(h) { - h = h.data || h; - const l = h.id, n = l && d.h[l]; - n && (n(h.msg), delete d.h[l]); - } - this.worker = g; - this.h = B(); - if (this.worker) { - e ? this.worker.on("message", k) : this.worker.onmessage = k; - if (a.config) { - return new Promise(function(h) { - d.h[++O] = function() { - h(d); - 1e9 < O && (O = 0); - }; - d.worker.postMessage({id:O, task:"init", factory:b, options:a}); - }); - } - this.worker.postMessage({task:"init", factory:b, options:a}); - this.priority = a.priority || 4; - return this; - } - } - if (!this || this.constructor !== P) { - return new P(a); - } - let b = "undefined" !== typeof self ? self._factory : "undefined" !== typeof window ? window._factory : null; - b && (b = b.toString()); - const e = "undefined" === typeof window, d = this, f = ra(b, e, a.worker); - return f.then ? f.then(function(g) { - return c.call(d, g); - }) : c.call(this, f); -} -Q("add"); -Q("append"); -Q("search"); -Q("update"); -Q("remove"); -Q("clear"); -Q("export"); -Q("import"); -la(P.prototype); -function Q(a) { - P.prototype[a] = function() { - const c = this, b = [].slice.call(arguments); - var e = b[b.length - 1]; - let d; - "function" === typeof e && (d = e, b.pop()); - e = new Promise(function(f) { - "export" === a && "function" === typeof b[0] && (b[0] = null); - c.h[++O] = f; - c.worker.postMessage({task:a, id:O, args:b}); - }); - return d ? (e.then(d), this) : e; - }; -} -function ra(a, c, b) { - return c ? "undefined" !== typeof module ? new(require("worker_threads")["Worker"])(__dirname+"/node/node.js") : import("worker_threads").then(function(worker){return new worker["Worker"]((1,eval)("import.meta.dirname")+"/node/node.mjs")}) : a ? new window.Worker(URL.createObjectURL(new Blob(["onmessage=" + ka.toString()], {type:"text/javascript"}))) : new window.Worker("string" === typeof b ? b : (0,eval)("import.meta.url").replace("/worker.js", "/worker/worker.js").replace("flexsearch.bundle.module.min.js", - "module/worker/worker.js"), {type:"module"}); -} -;function sa(a, c = 0) { - let b = [], e = []; - c && (c = 250000 / c * 5000 | 0); - for (const d of a.entries()) { - e.push(d), e.length === c && (b.push(e), e = []); - } - e.length && b.push(e); - return b; -} -function ta(a, c) { - c || (c = new Map()); - for (let b = 0, e; b < a.length; b++) { - e = a[b], c.set(e[0], e[1]); - } - return c; -} -function ua(a, c = 0) { - let b = [], e = []; - c && (c = 250000 / c * 1000 | 0); - for (const d of a.entries()) { - e.push([d[0], sa(d[1])[0]]), e.length === c && (b.push(e), e = []); - } - e.length && b.push(e); - return b; -} -function va(a, c) { - c || (c = new Map()); - for (let b = 0, e, d; b < a.length; b++) { - e = a[b], d = c.get(e[0]), c.set(e[0], ta(e[1], d)); - } - return c; -} -function wa(a) { - let c = [], b = []; - for (const e of a.keys()) { - b.push(e), 250000 === b.length && (c.push(b), b = []); - } - b.length && c.push(b); - return c; -} -function xa(a, c) { - c || (c = new Set()); - for (let b = 0; b < a.length; b++) { - c.add(a[b]); - } - return c; -} -function ya(a, c, b, e, d, f, g = 0) { - const k = e && e.constructor === Array; - var h = k ? e.shift() : e; - if (!h) { - return this.export(a, c, d, f + 1); - } - if ((h = a((c ? c + "." : "") + (g + 1) + "." + b, JSON.stringify(h))) && h.then) { - const l = this; - return h.then(function() { - return ya.call(l, a, c, b, k ? e : null, d, f, g + 1); - }); - } - return ya.call(this, a, c, b, k ? e : null, d, f, g + 1); -} -function za(a, c) { - let b = ""; - for (const e of a.entries()) { - a = e[0]; - const d = e[1]; - let f = ""; - for (let g = 0, k; g < d.length; g++) { - k = d[g] || [""]; - let h = ""; - for (let l = 0; l < k.length; l++) { - h += (h ? "," : "") + ("string" === c ? '"' + k[l] + '"' : k[l]); - } - h = "[" + h + "]"; - f += (f ? "," : "") + h; - } - f = '["' + a + '",[' + f + "]]"; - b += (b ? "," : "") + f; - } - return b; -} -;function Aa(a, c, b, e) { - let d = []; - for (let f = 0, g; f < a.index.length; f++) { - if (g = a.index[f], c >= g.length) { - c -= g.length; - } else { - c = g[e ? "splice" : "slice"](c, b); - const k = c.length; - if (k && (d = d.length ? d.concat(c) : c, b -= k, e && (a.length -= k), !b)) { - break; - } - c = 0; - } - } - return d; -} -function R(a) { - if (!this || this.constructor !== R) { - return new R(a); - } - this.index = a ? [a] : []; - this.length = a ? a.length : 0; - const c = this; - return new Proxy([], {get(b, e) { - if ("length" === e) { - return c.length; - } - if ("push" === e) { - return function(d) { - c.index[c.index.length - 1].push(d); - c.length++; - }; - } - if ("pop" === e) { - return function() { - if (c.length) { - return c.length--, c.index[c.index.length - 1].pop(); - } - }; - } - if ("indexOf" === e) { - return function(d) { - let f = 0; - for (let g = 0, k, h; g < c.index.length; g++) { - k = c.index[g]; - h = k.indexOf(d); - if (0 <= h) { - return f + h; - } - f += k.length; - } - return -1; - }; - } - if ("includes" === e) { - return function(d) { - for (let f = 0; f < c.index.length; f++) { - if (c.index[f].includes(d)) { - return !0; - } - } - return !1; - }; - } - if ("slice" === e) { - return function(d, f) { - return Aa(c, d || 0, f || c.length, !1); - }; - } - if ("splice" === e) { - return function(d, f) { - return Aa(c, d || 0, f || c.length, !0); - }; - } - if ("constructor" === e) { - return Array; - } - if ("symbol" !== typeof e) { - return (b = c.index[e / 2 ** 31 | 0]) && b[e]; - } - }, set(b, e, d) { - b = e / 2 ** 31 | 0; - (c.index[b] || (c.index[b] = []))[e] = d; - c.length++; - return !0; - }}); -} -R.prototype.clear = function() { - this.index.length = 0; -}; -R.prototype.destroy = function() { - this.proxy = this.index = null; -}; -R.prototype.push = function() { -}; -function S(a = 8) { - if (!this || this.constructor !== S) { - return new S(a); - } - this.index = B(); - this.h = []; - this.size = 0; - 32 < a ? (this.B = Ba, this.A = BigInt(a)) : (this.B = Ca, this.A = a); -} -S.prototype.get = function(a) { - const c = this.index[this.B(a)]; - return c && c.get(a); -}; -S.prototype.set = function(a, c) { - var b = this.B(a); - let e = this.index[b]; - e ? (b = e.size, e.set(a, c), (b -= e.size) && this.size++) : (this.index[b] = e = new Map([[a, c]]), this.h.push(e), this.size++); -}; -function T(a = 8) { - if (!this || this.constructor !== T) { - return new T(a); - } - this.index = B(); - this.h = []; - this.size = 0; - 32 < a ? (this.B = Ba, this.A = BigInt(a)) : (this.B = Ca, this.A = a); -} -T.prototype.add = function(a) { - var c = this.B(a); - let b = this.index[c]; - b ? (c = b.size, b.add(a), (c -= b.size) && this.size++) : (this.index[c] = b = new Set([a]), this.h.push(b), this.size++); -}; -t = S.prototype; -t.has = T.prototype.has = function(a) { - const c = this.index[this.B(a)]; - return c && c.has(a); -}; -t.delete = T.prototype.delete = function(a) { - const c = this.index[this.B(a)]; - c && c.delete(a) && this.size--; -}; -t.clear = T.prototype.clear = function() { - this.index = B(); - this.h = []; - this.size = 0; -}; -t.values = T.prototype.values = function*() { - for (let a = 0; a < this.h.length; a++) { - for (let c of this.h[a].values()) { - yield c; - } - } -}; -t.keys = T.prototype.keys = function*() { - for (let a = 0; a < this.h.length; a++) { - for (let c of this.h[a].keys()) { - yield c; - } - } -}; -t.entries = T.prototype.entries = function*() { - for (let a = 0; a < this.h.length; a++) { - for (let c of this.h[a].entries()) { - yield c; - } - } -}; -function Ca(a) { - let c = 2 ** this.A - 1; - if ("number" == typeof a) { - return a & c; - } - let b = 0, e = this.A + 1; - for (let d = 0; d < a.length; d++) { - b = (b * e ^ a.charCodeAt(d)) & c; - } - return 32 === this.A ? b + 2 ** 31 : b; -} -function Ba(a) { - let c = BigInt(2) ** this.A - BigInt(1); - var b = typeof a; - if ("bigint" === b) { - return a & c; - } - if ("number" === b) { - return BigInt(a) & c; - } - b = BigInt(0); - let e = this.A + BigInt(1); - for (let d = 0; d < a.length; d++) { - b = (b * e ^ BigInt(a.charCodeAt(d))) & c; - } - return b; -} -;U.prototype.add = function(a, c, b) { - I(a) && (c = a, a = ba(c, this.key)); - if (c && (a || 0 === a)) { - if (!b && this.reg.has(a)) { - return this.update(a, c); - } - for (let k = 0, h; k < this.field.length; k++) { - h = this.D[k]; - var e = this.index.get(this.field[k]); - if ("function" === typeof h) { - var d = h(c); - d && e.add(a, d, !1, !0); - } else { - if (d = h.I, !d || d(c)) { - h.constructor === String ? h = ["" + h] : E(h) && (h = [h]), Da(c, h, this.J, 0, e, a, h[0], b); - } - } - } - if (this.tag) { - for (e = 0; e < this.F.length; e++) { - var f = this.F[e], g = this.R[e]; - d = this.tag.get(g); - let k = B(); - if ("function" === typeof f) { - if (f = f(c), !f) { - continue; - } - } else { - const h = f.I; - if (h && !h(c)) { - continue; - } - f.constructor === String && (f = "" + f); - f = ba(c, f); - } - if (d && f) { - E(f) && (f = [f]); - for (let h = 0, l, n; h < f.length; h++) { - if (l = f[h], !k[l] && (k[l] = 1, (g = d.get(l)) ? n = g : d.set(l, n = []), !b || !n.includes(a))) { - if (n.length === 2 ** 31 - 1) { - g = new R(n); - if (this.fastupdate) { - for (let m of this.reg.values()) { - m.includes(n) && (m[m.indexOf(n)] = g); - } - } - d.set(l, n = g); - } - n.push(a); - this.fastupdate && ((g = this.reg.get(a)) ? g.push(n) : this.reg.set(a, [n])); - } - } - } else { - d || console.warn("Tag '" + g + "' was not found"); - } - } - } - if (this.store && (!b || !this.store.has(a))) { - let k; - if (this.C) { - k = B(); - for (let h = 0, l; h < this.C.length; h++) { - l = this.C[h]; - if ((b = l.I) && !b(c)) { - continue; - } - let n; - if ("function" === typeof l) { - n = l(c); - if (!n) { - continue; - } - l = [l.V]; - } else if (E(l) || l.constructor === String) { - k[l] = c[l]; - continue; - } - Ea(c, k, l, 0, l[0], n); - } - } - this.store.set(a, k || c); - } - this.worker && (this.fastupdate || this.reg.add(a)); - } - return this; -}; -function Ea(a, c, b, e, d, f) { - a = a[d]; - if (e === b.length - 1) { - c[d] = f || a; - } else if (a) { - if (a.constructor === Array) { - for (c = c[d] = Array(a.length), d = 0; d < a.length; d++) { - Ea(a, c, b, e, d); - } - } else { - c = c[d] || (c[d] = B()), d = b[++e], Ea(a, c, b, e, d); - } - } -} -function Da(a, c, b, e, d, f, g, k) { - if (a = a[g]) { - if (e === c.length - 1) { - if (a.constructor === Array) { - if (b[e]) { - for (c = 0; c < a.length; c++) { - d.add(f, a[c], !0, !0); - } - return; - } - a = a.join(" "); - } - d.add(f, a, k, !0); - } else { - if (a.constructor === Array) { - for (g = 0; g < a.length; g++) { - Da(a, c, b, e, d, f, g, k); - } - } else { - g = c[++e], Da(a, c, b, e, d, f, g, k); - } - } - } else { - d.db && d.remove(f); - } -} -;function Fa(a, c, b, e, d, f, g) { - const k = a.length; - let h = [], l, n; - l = B(); - for (let m = 0, q, p, r, u; m < c; m++) { - for (let v = 0; v < k; v++) { - if (r = a[v], m < r.length && (q = r[m])) { - for (let w = 0; w < q.length; w++) { - p = q[w]; - (n = l[p]) ? l[p]++ : (n = 0, l[p] = 1); - u = h[n] || (h[n] = []); - if (!g) { - let y = m + (v || !d ? 0 : f || 0); - u = u[y] || (u[y] = []); - } - u.push(p); - if (g && b && n === k - 1 && u.length - e === b) { - return u; - } - } - } - } - } - if (a = h.length) { - if (d) { - h = 1 < h.length ? Ga(h, b, e, g, f) : (h = h[0]).length > b || e ? h.slice(e, b + e) : h; - } else { - if (a < k) { - return []; - } - h = h[a - 1]; - if (b || e) { - if (g) { - if (h.length > b || e) { - h = h.slice(e, b + e); - } - } else { - d = []; - for (let m = 0, q; m < h.length; m++) { - if (q = h[m], q.length > e) { - e -= q.length; - } else { - if (q.length > b || e) { - q = q.slice(e, b + e), b -= q.length, e && (e -= q.length); - } - d.push(q); - if (!b) { - break; - } - } - } - h = 1 < d.length ? [].concat.apply([], d) : d[0]; - } - } - } - } - return h; -} -function Ga(a, c, b, e, d) { - const f = [], g = B(); - let k; - var h = a.length; - let l; - if (e) { - for (d = h - 1; 0 <= d; d--) { - if (l = (e = a[d]) && e.length) { - for (h = 0; h < l; h++) { - if (k = e[h], !g[k]) { - if (g[k] = 1, b) { - b--; - } else { - if (f.push(k), f.length === c) { - return f; - } - } - } - } - } - } - } else { - for (let n = h - 1, m, q = 0; 0 <= n; n--) { - m = a[n]; - for (let p = 0; p < m.length; p++) { - if (l = (e = m[p]) && e.length) { - for (let r = 0; r < l; r++) { - if (k = e[r], !g[k]) { - if (g[k] = 1, b) { - b--; - } else { - let u = (p + (n < h - 1 ? d || 0 : 0)) / (n + 1) | 0; - (f[u] || (f[u] = [])).push(k); - if (++q === c) { - return f; - } - } - } - } - } - } - } - } - return f; -} -function Ha(a, c, b) { - const e = B(), d = []; - for (let f = 0, g; f < c.length; f++) { - g = c[f]; - for (let k = 0; k < g.length; k++) { - e[g[k]] = 1; - } - } - if (b) { - for (let f = 0, g; f < a.length; f++) { - g = a[f], e[g] && (d.push(g), e[g] = 0); - } - } else { - for (let f = 0, g, k; f < a.result.length; f++) { - for (g = a.result[f], c = 0; c < g.length; c++) { - k = g[c], e[k] && ((d[f] || (d[f] = [])).push(k), e[k] = 0); - } - } - } - return d; -} -;function Ia(a, c, b, e) { - if (!a.length) { - return a; - } - if (1 === a.length) { - return a = a[0], a = b || a.length > c ? c ? a.slice(b, b + c) : a.slice(b) : a, e ? V.call(this, a) : a; - } - let d = []; - for (let f = 0, g, k; f < a.length; f++) { - if ((g = a[f]) && (k = g.length)) { - if (b) { - if (b >= k) { - b -= k; - continue; - } - b < k && (g = c ? g.slice(b, b + c) : g.slice(b), k = g.length, b = 0); - } - k > c && (g = g.slice(0, c), k = c); - if (!d.length && k >= c) { - return e ? V.call(this, g) : g; - } - d.push(g); - c -= k; - if (!c) { - break; - } - } - } - d = 1 < d.length ? [].concat.apply([], d) : d[0]; - return e ? V.call(this, d) : d; -} -;function Ja(a, c, b) { - var e = b[0]; - if (e.then) { - return Promise.all(b).then(function(n) { - return a[c].apply(a, n); - }); - } - if (e[0] && e[0].index) { - return a[c].apply(a, e); - } - e = []; - let d = [], f = 0, g = 0, k, h, l; - for (let n = 0, m; n < b.length; n++) { - if (m = b[n]) { - let q; - if (m.constructor === W) { - q = m.result; - } else if (m.constructor === Array) { - q = m; - } else { - if (f = m.limit || 0, g = m.offset || 0, l = m.suggest, h = m.resolve, k = m.enrich && h, m.index) { - m.resolve = !1, m.enrich = !1, q = m.index.search(m).result, m.resolve = h, m.enrich = k; - } else if (m.and) { - q = a.and(m.and); - } else if (m.or) { - q = a.or(m.or); - } else if (m.xor) { - q = a.xor(m.xor); - } else if (m.not) { - q = a.not(m.not); - } else { - continue; - } - } - if (q.then) { - d.push(q); - } else if (q.length) { - e[n] = q; - } else if (!l && ("and" === c || "xor" === c)) { - e = []; - break; - } - } - } - return {O:e, P:d, limit:f, offset:g, enrich:k, resolve:h, suggest:l}; -} -;W.prototype.or = function() { - const {O:a, P:c, limit:b, offset:e, enrich:d, resolve:f} = Ja(this, "or", arguments); - return Ka.call(this, a, c, b, e, d, f); -}; -function Ka(a, c, b, e, d, f) { - if (c.length) { - const g = this; - return Promise.all(c).then(function(k) { - a = []; - for (let h = 0, l; h < k.length; h++) { - (l = k[h]).length && (a[h] = l); - } - return Ka.call(g, a, [], b, e, d, f); - }); - } - a.length && (this.result.length && a.push(this.result), 2 > a.length ? this.result = a[0] : (this.result = Ga(a, b, e, !1, this.h), e = 0)); - return f ? this.resolve(b, e, d) : this; -} -;W.prototype.and = function() { - let a = this.result.length, c, b, e, d; - if (!a) { - const f = arguments[0]; - f && (a = !!f.suggest, d = f.resolve, c = f.limit, b = f.offset, e = f.enrich && d); - } - if (a) { - const {O:f, P:g, limit:k, offset:h, enrich:l, resolve:n, suggest:m} = Ja(this, "and", arguments); - return La.call(this, f, g, k, h, l, n, m); - } - return d ? this.resolve(c, b, e) : this; -}; -function La(a, c, b, e, d, f, g) { - if (c.length) { - const k = this; - return Promise.all(c).then(function(h) { - a = []; - for (let l = 0, n; l < h.length; l++) { - (n = h[l]).length && (a[l] = n); - } - return La.call(k, a, [], b, e, d, f, g); - }); - } - if (a.length) { - if (this.result.length && a.unshift(this.result), 2 > a.length) { - this.result = a[0]; - } else { - if (c = ca(a)) { - return this.result = Fa(a, c, b, e, g, this.h, f), f ? d ? V.call(this.index, this.result) : this.result : this; - } - this.result = []; - } - } else { - g || (this.result = a); - } - return f ? this.resolve(b, e, d) : this; -} -;W.prototype.xor = function() { - const {O:a, P:c, limit:b, offset:e, enrich:d, resolve:f, suggest:g} = Ja(this, "xor", arguments); - return Ma.call(this, a, c, b, e, d, f, g); -}; -function Ma(a, c, b, e, d, f, g) { - if (c.length) { - const k = this; - return Promise.all(c).then(function(h) { - a = []; - for (let l = 0, n; l < h.length; l++) { - (n = h[l]).length && (a[l] = n); - } - return Ma.call(k, a, [], b, e, d, f, g); - }); - } - if (a.length) { - if (this.result.length && a.unshift(this.result), 2 > a.length) { - this.result = a[0]; - } else { - return this.result = Na.call(this, a, b, e, f, this.h), f ? d ? V.call(this.index, this.result) : this.result : this; - } - } else { - g || (this.result = a); - } - return f ? this.resolve(b, e, d) : this; -} -function Na(a, c, b, e, d) { - const f = [], g = B(); - let k = 0; - for (let h = 0, l; h < a.length; h++) { - if (l = a[h]) { - k < l.length && (k = l.length); - for (let n = 0, m; n < l.length; n++) { - if (m = l[n]) { - for (let q = 0, p; q < m.length; q++) { - p = m[q], g[p] = g[p] ? 2 : 1; - } - } - } - } - } - for (let h = 0, l, n = 0; h < k; h++) { - for (let m = 0, q; m < a.length; m++) { - if (q = a[m]) { - if (l = q[h]) { - for (let p = 0, r; p < l.length; p++) { - if (r = l[p], 1 === g[r]) { - if (b) { - b--; - } else { - if (e) { - if (f.push(r), f.length === c) { - return f; - } - } else { - const u = h + (m ? d : 0); - f[u] || (f[u] = []); - f[u].push(r); - if (++n === c) { - return f; - } - } - } - } - } - } - } - } - } - return f; -} -;W.prototype.not = function() { - const {O:a, P:c, limit:b, offset:e, enrich:d, resolve:f, suggest:g} = Ja(this, "not", arguments); - return Oa.call(this, a, c, b, e, d, f, g); -}; -function Oa(a, c, b, e, d, f, g) { - if (c.length) { - const k = this; - return Promise.all(c).then(function(h) { - a = []; - for (let l = 0, n; l < h.length; l++) { - (n = h[l]).length && (a[l] = n); - } - return Oa.call(k, a, [], b, e, d, f, g); - }); - } - if (a.length && this.result.length) { - this.result = Pa.call(this, a, b, e, f); - } else if (f) { - return this.resolve(b, e, d); - } - return f ? d ? V.call(this.index, this.result) : this.result : this; -} -function Pa(a, c, b, e) { - const d = []; - a = new Set(a.flat().flat()); - for (let f = 0, g, k = 0; f < this.result.length; f++) { - if (g = this.result[f]) { - for (let h = 0, l; h < g.length; h++) { - if (l = g[h], !a.has(l)) { - if (b) { - b--; - } else { - if (e) { - if (d.push(l), d.length === c) { - return d; - } - } else { - if (d[f] || (d[f] = []), d[f].push(l), ++k === c) { - return d; - } - } - } - } - } - } - } - return d; -} -;function W(a) { - if (!this || this.constructor !== W) { - return new W(a); - } - if (a && a.index) { - return a.resolve = !1, this.index = a.index, this.h = a.boost || 0, this.result = a.index.search(a).result, this; - } - this.index = null; - this.result = a || []; - this.h = 0; -} -W.prototype.limit = function(a) { - if (this.result.length) { - const c = []; - for (let b = 0, e; b < this.result.length; b++) { - if (e = this.result[b]) { - if (e.length <= a) { - if (c[b] = e, a -= e.length, !a) { - break; - } - } else { - c[b] = e.slice(0, a); - break; - } - } - } - this.result = c; - } - return this; -}; -W.prototype.offset = function(a) { - if (this.result.length) { - const c = []; - for (let b = 0, e; b < this.result.length; b++) { - if (e = this.result[b]) { - e.length <= a ? a -= e.length : (c[b] = e.slice(a), a = 0); - } - } - this.result = c; - } - return this; -}; -W.prototype.boost = function(a) { - this.h += a; - return this; -}; -W.prototype.resolve = function(a, c, b) { - const e = this.result, d = this.index; - this.result = this.index = null; - return e.length ? ("object" === typeof a && (b = a.enrich, c = a.offset, a = a.limit), Ia.call(d, e, a || 100, c, b)) : e; -}; -B(); -U.prototype.search = function(a, c, b, e) { - b || (!c && I(a) ? (b = a, a = "") : I(c) && (b = c, c = 0)); - let d = []; - var f = [], g; - let k; - let h, l; - let n = 0; - var m = !0; - let q; - if (b) { - b.constructor === Array && (b = {index:b}); - a = b.query || a; - var p = b.pluck; - k = b.merge; - h = p || b.field || (h = b.index) && (h.index ? null : h); - l = this.tag && b.tag; - var r = b.suggest; - m = !1 !== b.resolve; - if (!m && !p) { - if (h = h || this.field) { - E(h) ? p = h : (h.constructor === Array && 1 === h.length && (h = h[0]), p = h.field || h.index); - } - if (!p) { - throw Error("Apply resolver on document search requires either the option 'pluck' to be set or just select a single field name in your query."); - } - } - this.store && b.enrich && !m && console.warn("Enrich results can only be done on a final resolver task or when calling .resolve({ enrich: true })"); - q = (g = this.store && b.enrich && m) && b.highlight; - c = b.limit || c; - var u = b.offset || 0; - c || (c = 100); - if (l && (!this.db || !e)) { - l.constructor !== Array && (l = [l]); - var v = []; - for (let A = 0, x; A < l.length; A++) { - x = l[A]; - if (E(x)) { - throw Error("A tag option can't be a string, instead it needs a { field: tag } format."); - } - if (x.field && x.tag) { - var w = x.tag; - if (w.constructor === Array) { - for (var y = 0; y < w.length; y++) { - v.push(x.field, w[y]); - } - } else { - v.push(x.field, w); - } - } else { - w = Object.keys(x); - for (let D = 0, H, C; D < w.length; D++) { - if (H = w[D], C = x[H], C.constructor === Array) { - for (y = 0; y < C.length; y++) { - v.push(H, C[y]); - } - } else { - v.push(H, C); - } - } - } - } - if (!v.length) { - throw Error("Your tag definition within the search options is probably wrong. No valid tags found."); - } - l = v; - if (!a) { - m = []; - if (v.length) { - for (f = 0; f < v.length; f += 2) { - if (this.db) { - p = this.index.get(v[f]); - if (!p) { - console.warn("Tag '" + v[f] + ":" + v[f + 1] + "' will be skipped because there is no field '" + v[f] + "'."); - continue; - } - m.push(p = p.db.tag(v[f + 1], c, u, g)); - } else { - p = Qa.call(this, v[f], v[f + 1], c, u, g); - } - d.push({field:v[f], tag:v[f + 1], result:p}); - } - } - return m.length ? Promise.all(m).then(function(A) { - for (let x = 0; x < A.length; x++) { - d[x].result = A[x]; - } - return d; - }) : d; - } - } - h && h.constructor !== Array && (h = [h]); - } - h || (h = this.field); - v = !e && (this.worker || this.db) && []; - let F; - for (let A = 0, x, D, H; A < h.length; A++) { - D = h[A]; - if (this.db && this.tag && !this.D[A]) { - continue; - } - let C; - E(D) || (C = D, D = C.field, a = C.query || a, c = C.limit || c, u = C.offset || u, r = C.suggest || r, g = this.store && (C.enrich || g)); - if (e) { - x = e[A]; - } else { - if (w = C || b, y = this.index.get(D), l && (this.db && (w.tag = l, F = y.db.support_tag_search, w.field = h), F || (w.enrich = !1)), v) { - v[A] = y.search(a, c, w); - w && g && (w.enrich = g); - continue; - } else { - x = y.search(a, c, w), w && g && (w.enrich = g); - } - } - H = x && (m ? x.length : x.result.length); - if (l && H) { - w = []; - y = 0; - if (this.db && e) { - if (!F) { - for (let G = h.length; G < e.length; G++) { - let L = e[G]; - if (L && L.length) { - y++, w.push(L); - } else if (!r) { - return m ? d : new W(d); - } - } - } - } else { - for (let G = 0, L, tb; G < l.length; G += 2) { - L = this.tag.get(l[G]); - if (!L) { - if (console.warn("Tag '" + l[G] + ":" + l[G + 1] + "' will be skipped because there is no field '" + l[G] + "'."), r) { - continue; - } else { - return m ? d : new W(d); - } - } - if (tb = (L = L && L.get(l[G + 1])) && L.length) { - y++, w.push(L); - } else if (!r) { - return m ? d : new W(d); - } - } - } - if (y) { - x = Ha(x, w, m); - H = x.length; - if (!H && !r) { - return m ? x : new W(x); - } - y--; - } - } - if (H) { - f[n] = D, d.push(x), n++; - } else if (1 === h.length) { - return m ? d : new W(d); - } - } - if (v) { - if (this.db && l && l.length && !F) { - for (g = 0; g < l.length; g += 2) { - f = this.index.get(l[g]); - if (!f) { - if (console.warn("Tag '" + l[g] + ":" + l[g + 1] + "' was not found because there is no field '" + l[g] + "'."), r) { - continue; - } else { - return m ? d : new W(d); - } - } - v.push(f.db.tag(l[g + 1], c, u, !1)); - } - } - const A = this; - return Promise.all(v).then(function(x) { - return x.length ? A.search(a, c, b, x) : x; - }); - } - if (!n) { - return m ? d : new W(d); - } - if (p && (!g || !this.store)) { - return d[0]; - } - v = []; - for (u = 0; u < f.length; u++) { - r = d[u]; - g && r.length && "undefined" === typeof r[0].doc && (this.db ? v.push(r = this.index.get(this.field[0]).db.enrich(r)) : r = V.call(this, r)); - if (p) { - return m ? r : new W(r); - } - d[u] = {field:f[u], result:r}; - } - if (g && this.db && v.length) { - const A = this; - return Promise.all(v).then(function(x) { - for (let D = 0; D < x.length; D++) { - d[D].result = x[D]; - } - return k ? Ra(d, c) : q ? Sa(d, a, A.index, A.field, A.D, q) : d; - }); - } - return k ? Ra(d, c) : q ? Sa(d, a, this.index, this.field, this.D, q) : d; -}; -function Sa(a, c, b, e, d, f) { - let g, k, h; - for (let n = 0, m, q, p, r; n < a.length; n++) { - let u = a[n].result; - m = a[n].field; - p = b.get(m); - q = p.encoder; - h = p.tokenize; - r = d[e.indexOf(m)]; - q !== g && (g = q, k = g.encode(c)); - for (let v = 0; v < u.length; v++) { - let w = ""; - var l = ba(u[v].doc, r); - let y = g.encode(l); - l = l.split(g.split); - for (let F = 0, A, x; F < y.length; F++) { - A = y[F]; - x = l[F]; - if (!A || !x) { - continue; - } - let D; - for (let H = 0, C; H < k.length; H++) { - if (C = k[H], "strict" === h) { - if (A === C) { - w += (w ? " " : "") + f.replace("$1", x); - D = !0; - break; - } - } else { - const G = A.indexOf(C); - if (-1 < G) { - w += (w ? " " : "") + x.substring(0, G) + f.replace("$1", x.substring(G, C.length)) + x.substring(G + C.length); - D = !0; - break; - } - } - } - D || (w += (w ? " " : "") + l[F]); - } - u[v].highlight = w; - } - } - return a; -} -function Ra(a, c) { - const b = [], e = B(); - for (let d = 0, f, g; d < a.length; d++) { - f = a[d]; - g = f.result; - for (let k = 0, h, l, n; k < g.length; k++) { - if (l = g[k], "object" !== typeof l && (l = {id:l}), h = l.id, n = e[h]) { - n.push(f.field); - } else { - if (b.length === c) { - return b; - } - l.field = e[h] = [f.field]; - b.push(l); - } - } - } - return b; -} -function Qa(a, c, b, e, d) { - let f = this.tag.get(a); - if (!f) { - return console.warn("Tag '" + a + "' was not found"), []; - } - if ((a = (f = f && f.get(c)) && f.length - e) && 0 < a) { - if (a > b || e) { - f = f.slice(e, e + b); - } - d && (f = V.call(this, f)); - return f; - } -} -function V(a) { - if (!this || !this.store) { - return a; - } - const c = Array(a.length); - for (let b = 0, e; b < a.length; b++) { - e = a[b], c[b] = {id:e, doc:this.store.get(e)}; - } - return c; -} -;function U(a) { - if (!this || this.constructor !== U) { - return new U(a); - } - const c = a.document || a.doc || a; - let b, e; - this.D = []; - this.field = []; - this.J = []; - this.key = (b = c.key || c.id) && Ta(b, this.J) || "id"; - (e = a.keystore || 0) && (this.keystore = e); - this.fastupdate = !!a.fastupdate; - this.reg = !this.fastupdate || a.worker || a.db ? e ? new T(e) : new Set() : e ? new S(e) : new Map(); - this.C = (b = c.store || null) && b && !0 !== b && []; - this.store = b && (e ? new S(e) : new Map()); - this.cache = (b = a.cache || null) && new X(b); - a.cache = !1; - this.worker = a.worker; - this.priority = a.priority || 4; - this.index = Ua.call(this, a, c); - this.tag = null; - if (b = c.tag) { - if ("string" === typeof b && (b = [b]), b.length) { - this.tag = new Map(); - this.F = []; - this.R = []; - for (let d = 0, f, g; d < b.length; d++) { - f = b[d]; - g = f.field || f; - if (!g) { - throw Error("The tag field from the document descriptor is undefined."); - } - f.custom ? this.F[d] = f.custom : (this.F[d] = Ta(g, this.J), f.filter && ("string" === typeof this.F[d] && (this.F[d] = new String(this.F[d])), this.F[d].I = f.filter)); - this.R[d] = g; - this.tag.set(g, new Map()); - } - } - } - if (this.worker) { - this.fastupdate = !1; - a = []; - for (const d of this.index.values()) { - d.then && a.push(d); - } - if (a.length) { - const d = this; - return Promise.all(a).then(function(f) { - let g = 0; - for (const k of d.index.entries()) { - const h = k[0]; - k[1].then && d.index.set(h, f[g++]); - } - return d; - }); - } - } else { - a.db && (this.fastupdate = !1, this.mount(a.db)); - } -} -t = U.prototype; -t.mount = function(a) { - if (this.worker) { - throw Error("You can't use Worker-Indexes on a persistent model. That would be useless, since each of the persistent model acts like Worker-Index by default (Master/Slave)."); - } - let c = this.field; - if (this.tag) { - for (let d = 0, f; d < this.R.length; d++) { - f = this.R[d]; - var b = void 0; - this.index.set(f, b = new N({}, this.reg)); - c === this.field && (c = c.slice(0)); - c.push(f); - b.tag = this.tag.get(f); - } - } - b = []; - const e = {db:a.db, type:a.type, fastupdate:a.fastupdate}; - for (let d = 0, f, g; d < c.length; d++) { - e.field = g = c[d]; - f = this.index.get(g); - const k = new a.constructor(a.id, e); - k.id = a.id; - b[d] = k.mount(f); - f.document = !0; - d ? f.bypass = !0 : f.store = this.store; - } - this.db = !0; - return Promise.all(b); -}; -t.commit = async function(a, c) { - const b = []; - for (const e of this.index.values()) { - b.push(e.commit(a, c)); - } - await Promise.all(b); - this.reg.clear(); -}; -t.destroy = function() { - const a = []; - for (const c of this.index.values()) { - a.push(c.destroy()); - } - return Promise.all(a); -}; -function Ua(a, c) { - const b = new Map(); - let e = c.index || c.field || c; - E(e) && (e = [e]); - for (let d = 0, f, g; d < e.length; d++) { - f = e[d]; - E(f) || (g = f, f = f.field); - g = I(g) ? Object.assign({}, a, g) : a; - if (this.worker) { - const k = new P(g); - b.set(f, k); - } - this.worker || b.set(f, new N(g, this.reg)); - g.custom ? this.D[d] = g.custom : (this.D[d] = Ta(f, this.J), g.filter && ("string" === typeof this.D[d] && (this.D[d] = new String(this.D[d])), this.D[d].I = g.filter)); - this.field[d] = f; - } - if (this.C) { - a = c.store; - E(a) && (a = [a]); - for (let d = 0, f, g; d < a.length; d++) { - f = a[d], g = f.field || f, f.custom ? (this.C[d] = f.custom, f.custom.V = g) : (this.C[d] = Ta(g, this.J), f.filter && ("string" === typeof this.C[d] && (this.C[d] = new String(this.C[d])), this.C[d].I = f.filter)); - } - } - return b; -} -function Ta(a, c) { - const b = a.split(":"); - let e = 0; - for (let d = 0; d < b.length; d++) { - a = b[d], "]" === a[a.length - 1] && (a = a.substring(0, a.length - 2)) && (c[e] = !0), a && (b[e++] = a); - } - e < b.length && (b.length = e); - return 1 < e ? b : b[0]; -} -t.append = function(a, c) { - return this.add(a, c, !0); -}; -t.update = function(a, c) { - return this.remove(a).add(a, c); -}; -t.remove = function(a) { - I(a) && (a = ba(a, this.key)); - for (var c of this.index.values()) { - c.remove(a, !0); - } - if (this.reg.has(a)) { - if (this.tag && !this.fastupdate) { - for (let b of this.tag.values()) { - for (let e of b) { - c = e[0]; - const d = e[1], f = d.indexOf(a); - -1 < f && (1 < d.length ? d.splice(f, 1) : b.delete(c)); - } - } - } - this.store && this.store.delete(a); - this.reg.delete(a); - } - this.cache && this.cache.remove(a); - return this; -}; -t.clear = function() { - const a = []; - for (const c of this.index.values()) { - const b = c.clear(); - b.then && a.push(b); - } - if (this.tag) { - for (const c of this.tag.values()) { - c.clear(); - } - } - this.store && this.store.clear(); - this.cache && this.cache.clear(); - return a.length ? Promise.all(a) : this; -}; -t.contain = function(a) { - return this.db ? this.index.get(this.field[0]).db.has(a) : this.reg.has(a); -}; -t.cleanup = function() { - for (const a of this.index.values()) { - a.cleanup(); - } - return this; -}; -t.get = function(a) { - return this.db ? this.index.get(this.field[0]).db.enrich(a).then(function(c) { - return c[0] && c[0].doc; - }) : this.store.get(a); -}; -t.set = function(a, c) { - this.store.set(a, c); - return this; -}; -t.searchCache = Va; -t.export = function(a, c, b = 0, e = 0) { - if (b < this.field.length) { - const g = this.field[b]; - if ((c = this.index.get(g).export(a, g, b, e = 1)) && c.then) { - const k = this; - return c.then(function() { - return k.export(a, g, b + 1); - }); - } - return this.export(a, g, b + 1); - } - let d, f; - switch(e) { - case 0: - d = "reg"; - f = wa(this.reg); - c = null; - break; - case 1: - d = "tag"; - f = this.tag && ua(this.tag, this.reg.size); - c = null; - break; - case 2: - d = "doc"; - f = this.store && sa(this.store); - c = null; - break; - default: - return; - } - return ya.call(this, a, c, d, f, b, e); -}; -t.import = function(a, c) { - var b = a.split("."); - "json" === b[b.length - 1] && b.pop(); - const e = 2 < b.length ? b[0] : ""; - b = 2 < b.length ? b[2] : b[1]; - if (this.worker && e) { - return this.index.get(e).import(a); - } - if (c) { - "string" === typeof c && (c = JSON.parse(c)); - if (e) { - return this.index.get(e).import(b, c); - } - switch(b) { - case "reg": - this.fastupdate = !1; - this.reg = xa(c, this.reg); - for (let d = 0, f; d < this.field.length; d++) { - f = this.index.get(this.field[d]), f.fastupdate = !1, f.reg = this.reg; - } - if (this.worker) { - c = []; - for (const d of this.index.values()) { - c.push(d.import(a)); - } - return Promise.all(c); - } - break; - case "tag": - this.tag = va(c, this.tag); - break; - case "doc": - this.store = ta(c, this.store); - } - } -}; -la(U.prototype); -function Va(a, c, b) { - a = ("object" === typeof a ? "" + a.query : a).toLowerCase(); - this.cache || (this.cache = new X()); - let e = this.cache.get(a); - if (!e) { - e = this.search(a, c, b); - if (e.then) { - const d = this; - e.then(function(f) { - d.cache.set(a, f); - return f; - }); - } - this.cache.set(a, e); - } - return e; -} -function X(a) { - this.limit = a && !0 !== a ? a : 1000; - this.cache = new Map(); - this.h = ""; -} -X.prototype.set = function(a, c) { - this.cache.set(this.h = a, c); - this.cache.size > this.limit && this.cache.delete(this.cache.keys().next().value); -}; -X.prototype.get = function(a) { - const c = this.cache.get(a); - c && this.h !== a && (this.cache.delete(a), this.cache.set(this.h = a, c)); - return c; -}; -X.prototype.remove = function(a) { - for (const c of this.cache) { - const b = c[0]; - c[1].includes(a) && this.cache.delete(b); - } -}; -X.prototype.clear = function() { - this.cache.clear(); - this.h = ""; -}; -const Wa = {normalize:!1, numeric:!1, split:/\s+/}; -const Xa = {normalize:!0}; -const Ya = {normalize:!0, dedupe:!0}; -const Za = new Map([["b", "p"], ["v", "f"], ["w", "f"], ["z", "s"], ["x", "s"], ["d", "t"], ["n", "m"], ["c", "k"], ["g", "k"], ["j", "k"], ["q", "k"], ["i", "e"], ["y", "e"], ["u", "o"]]); -const $a = new Map([["ae", "a"], ["oe", "o"], ["sh", "s"], ["kh", "k"], ["th", "t"], ["ph", "f"], ["pf", "f"]]), ab = [/([^aeo])h(.)/g, "$1$2", /([aeo])h([^aeo]|$)/g, "$1$2", /(.)\1+/g, "$1"]; -const bb = {a:"", e:"", i:"", o:"", u:"", y:"", b:1, f:1, p:1, v:1, c:2, g:2, j:2, k:2, q:2, s:2, x:2, z:2, "\u00df":2, d:3, t:3, l:4, m:5, n:5, r:6}; -var cb = {X:Wa, W:Xa, Y:Ya, LatinBalance:{normalize:!0, dedupe:!0, mapper:Za}, LatinAdvanced:{normalize:!0, dedupe:!0, mapper:Za, matcher:$a, replacer:ab}, LatinExtra:{normalize:!0, dedupe:!0, mapper:Za, replacer:ab.concat([/(?!^)[aeo]/g, ""]), matcher:$a}, LatinSoundex:{normalize:!0, dedupe:!1, include:{letter:!0}, finalize:function(a) { - for (let b = 0; b < a.length; b++) { - var c = a[b]; - let e = c.charAt(0), d = bb[e]; - for (let f = 1, g; f < c.length && (g = c.charAt(f), "h" === g || "w" === g || !(g = bb[g]) || g === d || (e += g, d = g, 4 !== e.length)); f++) { - } - a[b] = e; - } -}}, LatinExact:Wa, LatinDefault:Xa, LatinSimple:Ya}; -const db = {memory:{resolution:1}, performance:{resolution:3, fastupdate:!0, context:{depth:1, resolution:1}}, match:{tokenize:"forward"}, score:{resolution:9, context:{depth:2, resolution:3}}}; -N.prototype.add = function(a, c, b, e) { - if (c && (a || 0 === a)) { - if (!e && !b && this.reg.has(a)) { - return this.update(a, c); - } - c = this.encoder.encode(c); - if (e = c.length) { - const l = B(), n = B(), m = this.depth, q = this.resolution; - for (let p = 0; p < e; p++) { - let r = c[this.rtl ? e - 1 - p : p]; - var d = r.length; - if (d && (m || !n[r])) { - var f = this.score ? this.score(c, r, p, null, 0) : eb(q, e, p), g = ""; - switch(this.tokenize) { - case "full": - if (2 < d) { - for (let u = 0, v; u < d; u++) { - for (f = d; f > u; f--) { - g = r.substring(u, f); - v = this.rtl ? d - 1 - u : u; - var k = this.score ? this.score(c, r, p, g, v) : eb(q, e, p, d, v); - fb(this, n, g, k, a, b); - } - } - break; - } - case "bidirectional": - case "reverse": - if (1 < d) { - for (k = d - 1; 0 < k; k--) { - g = r[this.rtl ? d - 1 - k : k] + g; - var h = this.score ? this.score(c, r, p, g, k) : eb(q, e, p, d, k); - fb(this, n, g, h, a, b); - } - g = ""; - } - case "forward": - if (1 < d) { - for (k = 0; k < d; k++) { - g += r[this.rtl ? d - 1 - k : k], fb(this, n, g, f, a, b); - } - break; - } - default: - if (fb(this, n, r, f, a, b), m && 1 < e && p < e - 1) { - for (d = B(), g = this.U, f = r, k = Math.min(m + 1, this.rtl ? p + 1 : e - p), d[f] = 1, h = 1; h < k; h++) { - if ((r = c[this.rtl ? e - 1 - p - h : p + h]) && !d[r]) { - d[r] = 1; - const u = this.score ? this.score(c, f, p, r, h - 1) : eb(g + (e / 2 > g ? 0 : 1), e, p, k - 1, h - 1), v = this.bidirectional && r > f; - fb(this, l, v ? f : r, u, a, b, v ? r : f); - } - } - } - } - } - } - this.fastupdate || this.reg.add(a); - } else { - c = ""; - } - } - this.db && (c || this.commit_task.push({del:a}), this.T && gb(this)); - return this; -}; -function fb(a, c, b, e, d, f, g) { - let k = g ? a.ctx : a.map, h; - if (!c[b] || g && !(h = c[b])[g]) { - if (g ? (c = h || (c[b] = B()), c[g] = 1, (h = k.get(g)) ? k = h : k.set(g, k = new Map())) : c[b] = 1, (h = k.get(b)) ? k = h : k.set(b, k = h = []), k = k[e] || (k[e] = []), !f || !k.includes(d)) { - if (k.length === 2 ** 31 - 1) { - c = new R(k); - if (a.fastupdate) { - for (let l of a.reg.values()) { - l.includes(k) && (l[l.indexOf(k)] = c); - } - } - h[e] = k = c; - } - k.push(d); - a.fastupdate && ((e = a.reg.get(d)) ? e.push(k) : a.reg.set(d, [k])); - } - } -} -function eb(a, c, b, e, d) { - return b && 1 < a ? c + (e || 0) <= a ? b + (d || 0) : (a - 1) / (c + (e || 0)) * (b + (d || 0)) + 1 | 0 : 0; -} -;N.prototype.search = function(a, c, b) { - b || (!c && I(a) ? (b = a, a = "") : I(c) && (b = c, c = 0)); - let e = [], d, f, g, k = 0, h, l, n, m, q; - b ? (a = b.query || a, c = b.limit || c, k = b.offset || 0, f = b.context, g = b.suggest, q = (h = !1 !== b.resolve) && b.enrich, n = b.boost, m = b.resolution, l = this.db && b.tag) : h = this.resolve; - let p = this.encoder.encode(a); - d = p.length; - c = c || (h ? 100 : 0); - if (1 === d) { - return hb.call(this, p[0], "", c, k, h, q, l); - } - f = this.depth && !1 !== f; - if (2 === d && f && !g) { - return hb.call(this, p[0], p[1], c, k, h, q, l); - } - let r = B(), u = 0, v; - 1 < d && f && (v = p[0], u = 1); - m || 0 === m || (m = v ? this.U : this.resolution); - if (this.db) { - if (this.db.search && (a = this.db.search(this, p, c, k, g, h, q, l), !1 !== a)) { - return a; - } - const w = this; - return async function() { - for (let y, F; u < d; u++) { - if ((F = p[u]) && !r[F]) { - r[F] = 1; - y = await ib(w, F, v, 0, 0, !1, !1); - if (y = jb(y, e, g, m)) { - e = y; - break; - } - v && (g && y && e.length || (v = F)); - } - g && v && u === d - 1 && !e.length && (m = w.resolution, v = "", u = -1, r = B()); - } - return kb(e, m, c, k, g, n, h); - }(); - } - for (let w, y; u < d; u++) { - if ((y = p[u]) && !r[y]) { - r[y] = 1; - w = ib(this, y, v, 0, 0, !1, !1); - if (w = jb(w, e, g, m)) { - e = w; - break; - } - v && (g && w && e.length || (v = y)); - } - g && v && u === d - 1 && !e.length && (m = this.resolution, v = "", u = -1, r = B()); - } - return kb(e, m, c, k, g, n, h); -}; -function kb(a, c, b, e, d, f, g) { - let k = a.length, h = a; - if (1 < k) { - h = Fa(a, c, b, e, d, f, g); - } else if (1 === k) { - return g ? Ia.call(null, a[0], b, e) : new W(a[0]); - } - return g ? h : new W(h); -} -function hb(a, c, b, e, d, f, g) { - a = ib(this, a, c, b, e, d, f, g); - return this.db ? a.then(function(k) { - return d ? k || [] : new W(k); - }) : a && a.length ? d ? Ia.call(this, a, b, e) : new W(a) : d ? [] : new W(); -} -function jb(a, c, b, e) { - let d = []; - if (a && a.length) { - if (a.length <= e) { - c.push(a); - return; - } - for (let f = 0, g; f < e; f++) { - if (g = a[f]) { - d[f] = g; - } - } - if (d.length) { - c.push(d); - return; - } - } - if (!b) { - return d; - } -} -function ib(a, c, b, e, d, f, g, k) { - let h; - b && (h = a.bidirectional && c > b) && (h = b, b = c, c = h); - if (a.db) { - return a.db.get(c, b, e, d, f, g, k); - } - a = b ? (a = a.ctx.get(b)) && a.get(c) : a.map.get(c); - return a; -} -;N.prototype.remove = function(a, c) { - const b = this.reg.size && (this.fastupdate ? this.reg.get(a) : this.reg.has(a)); - if (b) { - if (this.fastupdate) { - for (let e = 0, d; e < b.length; e++) { - if (d = b[e]) { - if (2 > d.length) { - d.pop(); - } else { - const f = d.indexOf(a); - f === b.length - 1 ? d.pop() : d.splice(f, 1); - } - } - } - } else { - lb(this.map, a), this.depth && lb(this.ctx, a); - } - c || this.reg.delete(a); - } - this.db && (this.commit_task.push({del:a}), this.T && gb(this)); - this.cache && this.cache.remove(a); - return this; -}; -function lb(a, c) { - let b = 0; - if (a.constructor === Array) { - for (let e = 0, d, f; e < a.length; e++) { - if ((d = a[e]) && d.length) { - if (f = d.indexOf(c), 0 <= f) { - 1 < d.length ? (d.splice(f, 1), b++) : delete a[e]; - break; - } else { - b++; - } - } - } - } else { - for (let e of a.entries()) { - const d = e[0], f = lb(e[1], c); - f ? b += f : a.delete(d); - } - } - return b; -} -;function N(a, c) { - if (!this || this.constructor !== N) { - return new N(a); - } - if (a) { - var b = E(a) ? a : a.preset; - b && (db[b] || console.warn("Preset not found: " + b), a = Object.assign({}, db[b], a)); - } else { - a = {}; - } - b = a.context; - const e = !0 === b ? {depth:1} : b || {}, d = E(a.encoder) ? cb[a.encoder] : a.encode || a.encoder || Xa; - this.encoder = d.encode ? d : "object" === typeof d ? new ja(d) : {encode:d}; - this.resolution = a.resolution || 9; - this.tokenize = b = (b = a.tokenize) && "default" !== b && "exact" !== b && b || "strict"; - this.depth = "strict" === b && e.depth || 0; - this.bidirectional = !1 !== e.bidirectional; - this.fastupdate = !!a.fastupdate; - this.score = a.score || null; - e && "strict" !== this.tokenize && console.warn('Context-Search could not applied, because it is just supported when using the tokenizer "strict".'); - (b = a.keystore || 0) && (this.keystore = b); - this.map = b ? new S(b) : new Map(); - this.ctx = b ? new S(b) : new Map(); - this.reg = c || (this.fastupdate ? b ? new S(b) : new Map() : b ? new T(b) : new Set()); - this.U = e.resolution || 3; - this.rtl = d.rtl || a.rtl || !1; - this.cache = (b = a.cache || null) && new X(b); - this.resolve = !1 !== a.resolve; - if (b = a.db) { - this.db = this.mount(b); - } - this.T = !1 !== a.commit; - this.commit_task = []; - this.commit_timer = null; - this.priority = a.priority || 4; -} -t = N.prototype; -t.mount = function(a) { - this.commit_timer && (clearTimeout(this.commit_timer), this.commit_timer = null); - return a.mount(this); -}; -t.commit = function(a, c) { - this.commit_timer && (clearTimeout(this.commit_timer), this.commit_timer = null); - return this.db.commit(this, a, c); -}; -t.destroy = function() { - this.commit_timer && (clearTimeout(this.commit_timer), this.commit_timer = null); - return this.db.destroy(); -}; -function gb(a) { - a.commit_timer || (a.commit_timer = setTimeout(function() { - a.commit_timer = null; - a.db.commit(a, void 0, void 0); - }, 1)); -} -t.clear = function() { - this.map.clear(); - this.ctx.clear(); - this.reg.clear(); - this.cache && this.cache.clear(); - this.db && (this.commit_timer && clearTimeout(this.commit_timer), this.commit_timer = null, this.commit_task = [{clear:!0}]); - return this; -}; -t.append = function(a, c) { - return this.add(a, c, !0); -}; -t.contain = function(a) { - return this.db ? this.db.has(a) : this.reg.has(a); -}; -t.update = function(a, c) { - const b = this, e = this.remove(a); - return e && e.then ? e.then(() => b.add(a, c)) : this.add(a, c); -}; -function mb(a) { - let c = 0; - if (a.constructor === Array) { - for (let b = 0, e; b < a.length; b++) { - (e = a[b]) && (c += e.length); - } - } else { - for (const b of a.entries()) { - const e = b[0], d = mb(b[1]); - d ? c += d : a.delete(e); - } - } - return c; -} -t.cleanup = function() { - if (!this.fastupdate) { - return console.info('Cleanup the index isn\'t required when not using "fastupdate".'), this; - } - mb(this.map); - this.depth && mb(this.ctx); - return this; -}; -t.searchCache = Va; -t.export = function(a, c, b = 0, e = 0) { - let d, f; - switch(e) { - case 0: - d = "reg"; - f = wa(this.reg); - break; - case 1: - d = "cfg"; - f = null; - break; - case 2: - d = "map"; - f = sa(this.map, this.reg.size); - break; - case 3: - d = "ctx"; - f = ua(this.ctx, this.reg.size); - break; - default: - return; - } - return ya.call(this, a, c, d, f, b, e); -}; -t.import = function(a, c) { - if (c) { - switch("string" === typeof c && (c = JSON.parse(c)), a = a.split("."), "json" === a[a.length - 1] && a.pop(), 3 === a.length && a.shift(), a = 1 < a.length ? a[1] : a[0], a) { - case "reg": - this.fastupdate = !1; - this.reg = xa(c, this.reg); - break; - case "map": - this.map = ta(c, this.map); - break; - case "ctx": - this.ctx = va(c, this.ctx); - } - } -}; -t.serialize = function(a = !0) { - let c = "", b = "", e = ""; - if (this.reg.size) { - let f; - for (var d of this.reg.keys()) { - f || (f = typeof d), c += (c ? "," : "") + ("string" === f ? '"' + d + '"' : d); - } - c = "index.reg=new Set([" + c + "]);"; - b = za(this.map, f); - b = "index.map=new Map([" + b + "]);"; - for (const g of this.ctx.entries()) { - d = g[0]; - let k = za(g[1], f); - k = "new Map([" + k + "])"; - k = '["' + d + '",' + k + "]"; - e += (e ? "," : "") + k; - } - e = "index.ctx=new Map([" + e + "]);"; - } - return a ? "function inject(index){" + c + b + e + "}" : c + b + e; -}; -la(N.prototype); -const nb = "undefined" !== typeof window && (window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB), ob = ["map", "ctx", "tag", "reg", "cfg"], Y = B(); -function pb(a, c = {}) { - if (!this) { - return new pb(a, c); - } - "object" === typeof a && (c = a, a = a.name); - a || console.info("Default storage space was used, because a name was not passed."); - this.id = "flexsearch" + (a ? ":" + a.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""); - this.field = c.field ? c.field.toLowerCase().replace(/[^a-z0-9_\-]/g, "") : ""; - this.type = c.type; - this.fastupdate = this.support_tag_search = !1; - this.db = null; - this.h = {}; -} -t = pb.prototype; -t.mount = function(a) { - if (!a.encoder) { - return a.mount(this); - } - a.db = this; - return this.open(); -}; -t.open = function() { - if (this.db) { - return this.db; - } - let a = this; - navigator.storage && navigator.storage.persist(); - Y[a.id] || (Y[a.id] = []); - Y[a.id].push(a.field); - const c = nb.open(a.id, 1); - c.onupgradeneeded = function() { - const b = a.db = this.result; - for (let e = 0, d; e < ob.length; e++) { - d = ob[e]; - for (let f = 0, g; f < Y[a.id].length; f++) { - g = Y[a.id][f], b.objectStoreNames.contains(d + ("reg" !== d ? g ? ":" + g : "" : "")) || b.createObjectStore(d + ("reg" !== d ? g ? ":" + g : "" : "")); - } - } - }; - return a.db = Z(c, function(b) { - a.db = b; - a.db.onversionchange = function() { - a.close(); - }; - }); -}; -t.close = function() { - this.db && this.db.close(); - this.db = null; -}; -t.destroy = function() { - const a = nb.deleteDatabase(this.id); - return Z(a); -}; -t.clear = function() { - const a = []; - for (let b = 0, e; b < ob.length; b++) { - e = ob[b]; - for (let d = 0, f; d < Y[this.id].length; d++) { - f = Y[this.id][d], a.push(e + ("reg" !== e ? f ? ":" + f : "" : "")); - } - } - const c = this.db.transaction(a, "readwrite"); - for (let b = 0; b < a.length; b++) { - c.objectStore(a[b]).clear(); - } - return Z(c); -}; -t.get = function(a, c, b = 0, e = 0, d = !0, f = !1) { - a = this.db.transaction((c ? "ctx" : "map") + (this.field ? ":" + this.field : ""), "readonly").objectStore((c ? "ctx" : "map") + (this.field ? ":" + this.field : "")).get(c ? c + ":" + a : a); - const g = this; - return Z(a).then(function(k) { - let h = []; - if (!k || !k.length) { - return h; - } - if (d) { - if (!b && !e && 1 === k.length) { - return k[0]; - } - for (let l = 0, n; l < k.length; l++) { - if ((n = k[l]) && n.length) { - if (e >= n.length) { - e -= n.length; - continue; - } - const m = b ? e + Math.min(n.length - e, b) : n.length; - for (let q = e; q < m; q++) { - h.push(n[q]); - } - e = 0; - if (h.length === b) { - break; - } - } - } - return f ? g.enrich(h) : h; - } - return k; - }); -}; -t.tag = function(a, c = 0, b = 0, e = !1) { - a = this.db.transaction("tag" + (this.field ? ":" + this.field : ""), "readonly").objectStore("tag" + (this.field ? ":" + this.field : "")).get(a); - const d = this; - return Z(a).then(function(f) { - if (!f || !f.length || b >= f.length) { - return []; - } - if (!c && !b) { - return f; - } - f = f.slice(b, b + c); - return e ? d.enrich(f) : f; - }); -}; -t.enrich = function(a) { - "object" !== typeof a && (a = [a]); - const c = this.db.transaction("reg", "readonly").objectStore("reg"), b = []; - for (let e = 0; e < a.length; e++) { - b[e] = Z(c.get(a[e])); - } - return Promise.all(b).then(function(e) { - for (let d = 0; d < e.length; d++) { - e[d] = {id:a[d], doc:e[d] ? JSON.parse(e[d]) : null}; - } - return e; - }); -}; -t.has = function(a) { - a = this.db.transaction("reg", "readonly").objectStore("reg").getKey(a); - return Z(a).then(function(c) { - return !!c; - }); -}; -t.search = null; -t.info = function() { -}; -t.transaction = function(a, c, b) { - a += "reg" !== a ? this.field ? ":" + this.field : "" : ""; - let e = this.h[a + ":" + c]; - if (e) { - return b.call(this, e); - } - let d = this.db.transaction(a, c); - this.h[a + ":" + c] = e = d.objectStore(a); - const f = b.call(this, e); - this.h[a + ":" + c] = null; - return Z(d).finally(function() { - d = e = null; - return f; - }); -}; -t.commit = async function(a, c, b) { - if (c) { - await this.clear(), a.commit_task = []; - } else { - let e = a.commit_task; - a.commit_task = []; - for (let d = 0, f; d < e.length; d++) { - if (f = e[d], f.clear) { - await this.clear(); - c = !0; - break; - } else { - e[d] = f.del; - } - } - c || (b || (e = e.concat(aa(a.reg))), e.length && await this.remove(e)); - } - a.reg.size && (await this.transaction("map", "readwrite", function(e) { - for (const d of a.map) { - const f = d[0], g = d[1]; - g.length && (c ? e.put(g, f) : e.get(f).onsuccess = function() { - let k = this.result; - var h; - if (k && k.length) { - const l = Math.max(k.length, g.length); - for (let n = 0, m, q; n < l; n++) { - if ((q = g[n]) && q.length) { - if ((m = k[n]) && m.length) { - for (h = 0; h < q.length; h++) { - m.push(q[h]); - } - } else { - k[n] = q; - } - h = 1; - } - } - } else { - k = g, h = 1; - } - h && e.put(k, f); - }); - } - }), await this.transaction("ctx", "readwrite", function(e) { - for (const d of a.ctx) { - const f = d[0], g = d[1]; - for (const k of g) { - const h = k[0], l = k[1]; - l.length && (c ? e.put(l, f + ":" + h) : e.get(f + ":" + h).onsuccess = function() { - let n = this.result; - var m; - if (n && n.length) { - const q = Math.max(n.length, l.length); - for (let p = 0, r, u; p < q; p++) { - if ((u = l[p]) && u.length) { - if ((r = n[p]) && r.length) { - for (m = 0; m < u.length; m++) { - r.push(u[m]); - } - } else { - n[p] = u; - } - m = 1; - } - } - } else { - n = l, m = 1; - } - m && e.put(n, f + ":" + h); - }); - } - } - }), a.store ? await this.transaction("reg", "readwrite", function(e) { - for (const d of a.store) { - const f = d[0], g = d[1]; - e.put("object" === typeof g ? JSON.stringify(g) : 1, f); - } - }) : a.bypass || await this.transaction("reg", "readwrite", function(e) { - for (const d of a.reg.keys()) { - e.put(1, d); - } - }), a.tag && await this.transaction("tag", "readwrite", function(e) { - for (const d of a.tag) { - const f = d[0], g = d[1]; - g.length && (e.get(f).onsuccess = function() { - let k = this.result; - k = k && k.length ? k.concat(g) : g; - e.put(k, f); - }); - } - }), a.map.clear(), a.ctx.clear(), a.tag && a.tag.clear(), a.store && a.store.clear(), a.document || a.reg.clear()); -}; -function qb(a, c, b) { - const e = a.value; - let d, f = 0; - for (let g = 0, k; g < e.length; g++) { - if (k = b ? e : e[g]) { - for (let h = 0, l, n; h < c.length; h++) { - if (n = c[h], l = k.indexOf(n), 0 <= l) { - if (d = 1, 1 < k.length) { - k.splice(l, 1); - } else { - e[g] = []; - break; - } - } - } - f += k.length; - } - if (b) { - break; - } - } - f ? d && a.update(e) : a.delete(); - a.continue(); -} -t.remove = function(a) { - "object" !== typeof a && (a = [a]); - return Promise.all([this.transaction("map", "readwrite", function(c) { - c.openCursor().onsuccess = function() { - const b = this.result; - b && qb(b, a); - }; - }), this.transaction("ctx", "readwrite", function(c) { - c.openCursor().onsuccess = function() { - const b = this.result; - b && qb(b, a); - }; - }), this.transaction("tag", "readwrite", function(c) { - c.openCursor().onsuccess = function() { - const b = this.result; - b && qb(b, a, !0); - }; - }), this.transaction("reg", "readwrite", function(c) { - for (let b = 0; b < a.length; b++) { - c.delete(a[b]); - } - })]); -}; -function Z(a, c) { - return new Promise((b, e) => { - a.onsuccess = a.oncomplete = function() { - c && c(this.result); - c = null; - b(this.result); - }; - a.onerror = a.onblocked = e; - a = null; - }); -} -;const rb = {Index:N, Charset:cb, Encoder:ja, Document:U, Worker:P, Resolver:W, IndexedDB:pb, Language:{}}, sb = "undefined" !== typeof self ? self : "undefined" !== typeof global ? global : self; -let ub; -(ub = sb.define) && ub.amd ? ub([], function() { - return rb; -}) : "object" === typeof sb.exports ? sb.exports = rb : sb.FlexSearch = rb; -}(this||self)); diff --git a/public/js/main-head.js b/public/js/main-head.js deleted file mode 100644 index 8fb4191..0000000 --- a/public/js/main-head.js +++ /dev/null @@ -1,22 +0,0 @@ -// The section must not be in the banner.js (body) file because it can create a quick flash. - -if (localStorage.getItem('banner-closed')) { - document.documentElement.style.setProperty("--hextra-banner-height", "0px"); - document.documentElement.classList.add("hextra-banner-hidden"); -} - -; -// The section must not be in the theme.js (body) file because it can create a quick flash (switch between light and dark). - -function setTheme(theme) { - document.documentElement.classList.remove("light", "dark"); - - if (theme !== "light" && theme !== "dark") { - theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; - } - - document.documentElement.classList.add(theme); - document.documentElement.style.colorScheme = theme; -} - -setTheme("color-theme" in localStorage ? localStorage.getItem("color-theme") : 'system') diff --git a/public/js/main-head.min.94da6f95b126542222dab3a6e07ffefe1aaf63ec3ca555e827b58b80e7d3f0b7.js b/public/js/main-head.min.94da6f95b126542222dab3a6e07ffefe1aaf63ec3ca555e827b58b80e7d3f0b7.js deleted file mode 100644 index ae77987..0000000 --- a/public/js/main-head.min.94da6f95b126542222dab3a6e07ffefe1aaf63ec3ca555e827b58b80e7d3f0b7.js +++ /dev/null @@ -1 +0,0 @@ -localStorage.getItem("banner-closed")&&(document.documentElement.style.setProperty("--hextra-banner-height","0px"),document.documentElement.classList.add("hextra-banner-hidden"));function setTheme(e){document.documentElement.classList.remove("light","dark"),e!=="light"&&e!=="dark"&&(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),document.documentElement.classList.add(e),document.documentElement.style.colorScheme=e}setTheme("color-theme"in localStorage?localStorage.getItem("color-theme"):"system") \ No newline at end of file diff --git a/public/js/main.js b/public/js/main.js deleted file mode 100644 index 4e51018..0000000 --- a/public/js/main.js +++ /dev/null @@ -1,1082 +0,0 @@ -// Back to top button - -document.addEventListener("DOMContentLoaded", function () { - const backToTop = document.querySelector("#backToTop"); - if (backToTop) { - backToTop.addEventListener("click", scrollUp); - document.addEventListener("scroll", (e) => { - if (window.scrollY > 300) { - backToTop.classList.remove("hx:opacity-0"); - backToTop.removeAttribute("tabindex"); - } else { - backToTop.classList.add("hx:opacity-0"); - backToTop.setAttribute("tabindex", "-1"); - } - }); - } -}); - -function scrollUp() { - const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; - window.scroll({ - top: 0, - left: 0, - behavior: prefersReducedMotion ? 'auto' : 'smooth', - }); -} - -; -// -; -// Copy button for code blocks - -document.addEventListener('DOMContentLoaded', function () { - const getCopyIcon = () => { - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - svg.innerHTML = ` - - `; - svg.setAttribute('fill', 'none'); - svg.setAttribute('viewBox', '0 0 24 24'); - svg.setAttribute('stroke', 'currentColor'); - svg.setAttribute('stroke-width', '2'); - return svg; - } - - const getSuccessIcon = () => { - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - svg.innerHTML = ` - - `; - svg.setAttribute('fill', 'none'); - svg.setAttribute('viewBox', '0 0 24 24'); - svg.setAttribute('stroke', 'currentColor'); - svg.setAttribute('stroke-width', '2'); - return svg; - } - - // Make scrollable code blocks focusable for keyboard users. - const updateScrollableCodeBlocks = () => { - document.querySelectorAll('.hextra-code-block pre, .highlight pre').forEach(function (pre) { - if (pre.scrollWidth > pre.clientWidth) { - pre.setAttribute('tabindex', '0'); - } else { - pre.removeAttribute('tabindex'); - } - }); - }; - - updateScrollableCodeBlocks(); - - let resizeRaf; - window.addEventListener('resize', () => { - if (resizeRaf) { - cancelAnimationFrame(resizeRaf); - } - resizeRaf = requestAnimationFrame(updateScrollableCodeBlocks); - }); - - document.querySelectorAll('.hextra-code-copy-btn').forEach(function (button) { - // Add copy and success icons - button.querySelector('.hextra-copy-icon')?.appendChild(getCopyIcon()); - button.querySelector('.hextra-success-icon')?.appendChild(getSuccessIcon()); - - // Add click event listener for copy button - button.addEventListener('click', function (e) { - e.preventDefault(); - // Get the code target - const target = button.parentElement.previousElementSibling; - let codeElement; - if (target.tagName === 'CODE') { - codeElement = target; - } else { - // Select the last code element in case line numbers are present - const codeElements = target.querySelectorAll('code'); - codeElement = codeElements[codeElements.length - 1]; - } - if (codeElement) { - let code = codeElement.innerText; - // Replace double newlines with single newlines in the innerText - // as each line inside has trailing newline '\n' - if ("lang" in codeElement.dataset) { - code = code.replace(/\n\n/g, '\n'); - } - navigator.clipboard.writeText(code).then(function () { - button.classList.add('copied'); - var originalLabel = button.getAttribute('aria-label'); - var copiedLabel = button.dataset.copiedLabel || 'Copied!'; - button.setAttribute('aria-label', copiedLabel); - setTimeout(function () { - button.classList.remove('copied'); - button.setAttribute('aria-label', originalLabel); - }, 1000); - }).catch(function (err) { - console.error('Failed to copy text: ', err); - }); - } else { - console.error('Target element not found'); - } - }); - }); -}); - -; -// -(function () { - const faviconEl = document.getElementById("favicon-svg"); - const faviconDarkExists = "false" === "true"; - - if (faviconEl && faviconDarkExists) { - const lightFavicon = '/favicon.svg'; - const darkFavicon = '/favicon-dark.svg'; - - const darkModeQuery = window.matchMedia("(prefers-color-scheme: dark)"); - - function updateFavicon(e) { - faviconEl.href = e.matches ? darkFavicon : lightFavicon; - } - - // Set favicon on load - updateFavicon(darkModeQuery); - - // Listen for system preference changes - darkModeQuery.addEventListener("change", updateFavicon); - } -})(); - -; -// Script for filetree shortcode collapsing/expanding folders used in the theme -// ====================================================================== -document.addEventListener("DOMContentLoaded", function () { - const folders = document.querySelectorAll(".hextra-filetree-folder"); - folders.forEach(function (folder) { - folder.addEventListener("click", function () { - Array.from(folder.children).forEach(function (el) { - el.dataset.state = el.dataset.state === "open" ? "closed" : "open"; - }); - var newState = folder.nextElementSibling.dataset.state === "open" ? "closed" : "open"; - folder.nextElementSibling.dataset.state = newState; - folder.setAttribute('aria-expanded', newState === 'open' ? 'true' : 'false'); - }); - }); -}); - -; -(function () { - const languageSwitchers = document.querySelectorAll('.hextra-language-switcher'); - const closeSwitcher = (switcher, focusSwitcher = false) => { - switcher.dataset.state = 'closed'; - switcher.setAttribute('aria-expanded', 'false'); - const optionsElement = switcher.nextElementSibling; - optionsElement.classList.add('hx:hidden'); - if (focusSwitcher) { - switcher.focus(); - } - }; - - const openSwitcher = (switcher, focusTarget = "none") => { - switcher.dataset.state = 'open'; - switcher.setAttribute('aria-expanded', 'true'); - const optionsElement = switcher.nextElementSibling; - if (optionsElement.classList.contains('hx:hidden')) { - toggleMenu(switcher); - } else { - resizeMenu(switcher); - } - - if (focusTarget !== "none") { - const items = Array.from(optionsElement.querySelectorAll('[role="menuitem"]')); - if (items.length > 0) { - const target = focusTarget === "last" ? items[items.length - 1] : items[0]; - target.focus(); - } - } - }; - - languageSwitchers.forEach((switcher) => { - switcher.addEventListener('click', (e) => { - e.preventDefault(); - - if (switcher.dataset.state === 'open') { - closeSwitcher(switcher); - } else { - openSwitcher(switcher); - } - }); - - switcher.addEventListener('keydown', (e) => { - if (e.key === 'ArrowDown') { - e.preventDefault(); - openSwitcher(switcher, 'first'); - } else if (e.key === 'ArrowUp') { - e.preventDefault(); - openSwitcher(switcher, 'last'); - } - }); - }); - - document.querySelectorAll('.hextra-language-options[role=menu]').forEach((menu) => { - menu.addEventListener('keydown', (e) => { - const items = Array.from(menu.querySelectorAll('[role="menuitem"]')); - if (items.length === 0) return; - - const currentIndex = items.indexOf(document.activeElement); - let newIndex; - - switch (e.key) { - case 'ArrowDown': - e.preventDefault(); - newIndex = (currentIndex + 1) % items.length; - items[newIndex].focus(); - break; - case 'ArrowUp': - e.preventDefault(); - newIndex = (currentIndex - 1 + items.length) % items.length; - items[newIndex].focus(); - break; - case 'Home': - e.preventDefault(); - items[0].focus(); - break; - case 'End': - e.preventDefault(); - items[items.length - 1].focus(); - break; - case 'Escape': { - e.preventDefault(); - const switcher = menu.previousElementSibling; - if (switcher) { - closeSwitcher(switcher, true); - } - break; - } - } - }); - }); - - window.addEventListener("resize", () => languageSwitchers.forEach(resizeMenu)); - - // Dismiss language switcher when clicking outside. - document.addEventListener('click', (e) => { - if (!e.target.closest('.hextra-language-switcher') && !e.target.closest('.hextra-language-options')) { - languageSwitchers.forEach((switcher) => { - closeSwitcher(switcher); - }); - } - }); -})(); - -; -// Hamburger menu for mobile navigation - -document.addEventListener('DOMContentLoaded', function () { - const menu = document.querySelector('.hextra-hamburger-menu'); - const sidebarContainer = document.querySelector('.hextra-sidebar-container'); - const mobileQuery = window.matchMedia('(max-width: 767px)'); - - function isMenuOpen() { - return menu.querySelector('svg').classList.contains('open'); - } - - // On mobile, the sidebar is off-screen so hide it from assistive tech - function syncAriaHidden() { - if (mobileQuery.matches) { - sidebarContainer.setAttribute('aria-hidden', isMenuOpen() ? 'false' : 'true'); - } else { - sidebarContainer.removeAttribute('aria-hidden'); - } - } - - // Set initial state - syncAriaHidden(); - mobileQuery.addEventListener('change', syncAriaHidden); - - function toggleMenu(options = {}) { - const { focusOnOpen = true } = options; - - // Toggle the hamburger menu - menu.querySelector('svg').classList.toggle('open'); - - // When the menu is open, we want to show the navigation sidebar - sidebarContainer.classList.toggle('hx:max-md:[transform:translate3d(0,-100%,0)]'); - sidebarContainer.classList.toggle('hx:max-md:[transform:translate3d(0,0,0)]'); - - // When the menu is open, we want to prevent the body from scrolling - document.body.classList.toggle('hx:overflow-hidden'); - document.body.classList.toggle('hx:md:overflow-auto'); - - // Sync aria-expanded and aria-hidden - const isOpen = isMenuOpen(); - menu.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); - syncAriaHidden(); - - // Move focus into sidebar when opening, restore when closing - if (isOpen) { - if (focusOnOpen) { - const firstFocusable = sidebarContainer.querySelector('a, button, input, [tabindex="0"]'); - if (firstFocusable) firstFocusable.focus(); - } - } else { - menu.focus(); - } - } - - menu.addEventListener('click', (e) => { - e.preventDefault(); - // Pointer-initiated clicks on mobile should not force focus into the search input, - // which opens the software keyboard immediately. - toggleMenu({ focusOnOpen: e.detail === 0 }); - }); - - // Close menu on Escape key (mobile only) - document.addEventListener('keydown', (e) => { - if (e.key === 'Escape' && mobileQuery.matches && isMenuOpen()) { - toggleMenu(); - } - }); - - // Select all anchor tags in the sidebar container - const sidebarLinks = sidebarContainer.querySelectorAll('a'); - - // Add click event listener to each anchor tag - sidebarLinks.forEach(link => { - link.addEventListener('click', (e) => { - // Check if the href attribute contains a hash symbol (links to a heading) - if (link.getAttribute('href') && link.getAttribute('href').startsWith('#')) { - // Only dismiss overlay on mobile view - if (window.innerWidth < 768) { - toggleMenu(); - } - } - }); - }); -}); - -; -(function () { - const hiddenClass = "hx:hidden"; - const dropdownToggles = document.querySelectorAll(".hextra-nav-menu-toggle"); - const closeDropdown = (toggle, focusToggle = false) => { - toggle.dataset.state = "closed"; - toggle.setAttribute("aria-expanded", "false"); - const menuItemsElement = toggle.nextElementSibling; - menuItemsElement.classList.add(hiddenClass); - if (focusToggle) { - toggle.focus(); - } - }; - - const openDropdown = (toggle, focusTarget = "none") => { - // Close all other dropdowns first. - dropdownToggles.forEach((otherToggle) => { - if (otherToggle !== toggle) { - closeDropdown(otherToggle); - } - }); - - toggle.dataset.state = "open"; - toggle.setAttribute("aria-expanded", "true"); - const menuItemsElement = toggle.nextElementSibling; - - // Position dropdown centered with toggle. - menuItemsElement.style.position = "absolute"; - menuItemsElement.style.top = "100%"; - menuItemsElement.style.left = "50%"; - menuItemsElement.style.transform = "translateX(-50%)"; - menuItemsElement.style.zIndex = "1000"; - menuItemsElement.classList.remove(hiddenClass); - - if (focusTarget !== "none") { - const items = Array.from(menuItemsElement.querySelectorAll('[role="menuitem"]')); - if (items.length > 0) { - const target = focusTarget === "last" ? items[items.length - 1] : items[0]; - target.focus(); - } - } - }; - - dropdownToggles.forEach((toggle) => { - toggle.addEventListener("click", (e) => { - e.preventDefault(); - e.stopPropagation(); - - // Toggle current dropdown. - const isOpen = toggle.dataset.state === "open"; - if (isOpen) { - closeDropdown(toggle); - } else { - openDropdown(toggle); - } - }); - - toggle.addEventListener("keydown", (e) => { - if (e.key === "ArrowDown") { - e.preventDefault(); - openDropdown(toggle, "first"); - } else if (e.key === "ArrowUp") { - e.preventDefault(); - openDropdown(toggle, "last"); - } - }); - }); - - document.querySelectorAll(".hextra-nav-menu-items[role=menu]").forEach((menu) => { - menu.addEventListener("keydown", (e) => { - const items = Array.from(menu.querySelectorAll('[role="menuitem"]')); - if (items.length === 0) return; - - const currentIndex = items.indexOf(document.activeElement); - let newIndex; - - switch (e.key) { - case "ArrowDown": - e.preventDefault(); - newIndex = (currentIndex + 1) % items.length; - items[newIndex].focus(); - break; - case "ArrowUp": - e.preventDefault(); - newIndex = (currentIndex - 1 + items.length) % items.length; - items[newIndex].focus(); - break; - case "Home": - e.preventDefault(); - items[0].focus(); - break; - case "End": - e.preventDefault(); - items[items.length - 1].focus(); - break; - case "Escape": { - e.preventDefault(); - const toggle = menu.previousElementSibling; - if (toggle) { - closeDropdown(toggle, true); - } - break; - } - } - }); - }); - - // Dismiss dropdown when clicking outside. - document.addEventListener("click", (e) => { - if (!e.target.closest(".hextra-nav-menu-toggle") && !e.target.closest(".hextra-nav-menu-items")) { - dropdownToggles.forEach((toggle) => { - closeDropdown(toggle); - }); - } - }); - - // Close dropdowns on escape key. - document.addEventListener("keydown", (e) => { - if (e.key === "Escape") { - dropdownToggles.forEach((toggle) => { - if (toggle.dataset.state === "open") { - closeDropdown(toggle, true); - } - }); - } - }); -})(); - -; -document.addEventListener('DOMContentLoaded', () => { - // Pre-fetch markdown content for all copy buttons to avoid Safari NotAllowedError - // Safari requires clipboard writes to happen synchronously within user gesture - const copyButtons = document.querySelectorAll('.hextra-page-context-menu-copy'); - const contentCache = new Map(); - - // Pre-fetch content for each button on page load - copyButtons.forEach(button => { - const url = button.dataset.url; - if (url) { - fetch(url) - .then(response => { - if (response.ok) return response.text(); - throw new Error('Failed to fetch'); - }) - .then(markdown => contentCache.set(url, markdown)) - .catch(error => console.error('Failed to pre-fetch markdown:', error)); - } - }); - - // Initialize copy buttons with synchronous clipboard access - copyButtons.forEach(button => { - button.addEventListener('click', () => { - const url = button.dataset.url; - const markdown = contentCache.get(url); - - if (markdown) { - // Synchronous clipboard write initiation - works in Safari - navigator.clipboard.writeText(markdown) - .then(() => { - button.classList.add('copied'); - setTimeout(() => button.classList.remove('copied'), 1000); - }) - .catch(error => console.error('Failed to copy markdown:', error)); - } else { - // Fallback: fetch and copy (may fail in Safari if content not pre-fetched) - fetch(url) - .then(response => { - if (!response.ok) throw new Error('Failed to fetch'); - return response.text(); - }) - .then(text => { - contentCache.set(url, text); - return navigator.clipboard.writeText(text); - }) - .then(() => { - button.classList.add('copied'); - setTimeout(() => button.classList.remove('copied'), 1000); - }) - .catch(error => console.error('Failed to copy markdown:', error)); - } - }); - }); - - // Initialize dropdown toggles - const dropdownToggles = document.querySelectorAll('.hextra-page-context-menu-toggle'); - dropdownToggles.forEach(toggle => { - const container = toggle.closest('.hextra-page-context-menu'); - const menu = container.querySelector('.hextra-page-context-menu-dropdown'); - const chevron = toggle.querySelector('[data-chevron]'); - - toggle.addEventListener('click', (e) => { - e.stopPropagation(); - const isOpen = toggle.dataset.state === 'open'; - - // Close all other dropdowns first - dropdownToggles.forEach(t => { - if (t !== toggle) { - t.dataset.state = 'closed'; - t.setAttribute('aria-expanded', 'false'); - const otherContainer = t.closest('.hextra-page-context-menu'); - const otherMenu = otherContainer.querySelector('.hextra-page-context-menu-dropdown'); - const otherChevron = t.querySelector('[data-chevron]'); - otherMenu.classList.add('hx:hidden'); - if (otherChevron) { - otherChevron.style.transform = ''; - } - } - }); - - // Toggle current - toggle.dataset.state = isOpen ? 'closed' : 'open'; - toggle.setAttribute('aria-expanded', isOpen ? 'false' : 'true'); - menu.classList.toggle('hx:hidden', isOpen); - - // Rotate chevron icon - if (chevron) { - chevron.style.transform = isOpen ? '' : 'rotate(180deg)'; - } - }); - }); - - // Close dropdown when clicking outside - document.addEventListener('click', (e) => { - // Check if click is outside any dropdown container - const isOutside = !e.target.closest('.hextra-page-context-menu'); - if (isOutside) { - dropdownToggles.forEach(toggle => { - toggle.dataset.state = 'closed'; - toggle.setAttribute('aria-expanded', 'false'); - const container = toggle.closest('.hextra-page-context-menu'); - const menu = container.querySelector('.hextra-page-context-menu-dropdown'); - const chevron = toggle.querySelector('[data-chevron]'); - menu.classList.add('hx:hidden'); - if (chevron) { - chevron.style.transform = ''; - } - }); - } - }); - - // Close dropdown on Escape key and return focus to toggle - document.addEventListener('keydown', (e) => { - if (e.key === 'Escape') { - dropdownToggles.forEach(toggle => { - if (toggle.dataset.state === 'open') { - const container = toggle.closest('.hextra-page-context-menu'); - closeDropdown(container); - toggle.focus(); - } - }); - } - }); - - // Helper to close dropdown - const closeDropdown = (container) => { - if (!container) return; - - const toggle = container.querySelector('.hextra-page-context-menu-toggle'); - const menu = container.querySelector('.hextra-page-context-menu-dropdown'); - - if (!toggle || !menu) return; - - const chevron = toggle.querySelector('[data-chevron]'); - toggle.dataset.state = 'closed'; - toggle.setAttribute('aria-expanded', 'false'); - menu.classList.add('hx:hidden'); - if (chevron) { - chevron.style.transform = ''; - } - }; - - // Handle dropdown menu copy action - document.querySelectorAll('.hextra-page-context-menu-dropdown button[data-action="copy"]').forEach(btn => { - btn.addEventListener('click', async (e) => { - e.stopPropagation(); - const container = btn.closest('.hextra-page-context-menu'); - if (!container) return; - - const copyBtn = container.querySelector('.hextra-page-context-menu-copy'); - if (!copyBtn) return; - - closeDropdown(container); - copyBtn.click(); - }); - }); - - // Handle dropdown menu view action - document.querySelectorAll('.hextra-page-context-menu-dropdown button[data-action="view"]').forEach(btn => { - btn.addEventListener('click', (e) => { - e.stopPropagation(); - const container = btn.closest('.hextra-page-context-menu'); - if (!container) return; - - const url = btn.dataset.url; - if (!url) return; - - closeDropdown(container); - window.open(url, '_blank', 'noopener,noreferrer'); - }); - }); -}); - -; -document.addEventListener("DOMContentLoaded", function () { - scrollToActiveItem(); - enableCollapsibles(); -}); - -function enableCollapsibles() { - const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); - buttons.forEach(function (button) { - button.addEventListener("click", function (e) { - e.preventDefault(); - const list = button.closest('li'); - if (list) { - list.classList.toggle("open"); - button.setAttribute('aria-expanded', list.classList.contains('open') ? 'true' : 'false'); - } - }); - }); -} - -function scrollToActiveItem() { - const sidebarScrollbar = document.querySelector("aside.hextra-sidebar-container > .hextra-scrollbar"); - const activeItems = document.querySelectorAll(".hextra-sidebar-active-item"); - const visibleActiveItem = Array.from(activeItems).find(function (activeItem) { - return activeItem.getBoundingClientRect().height > 0; - }); - - if (!visibleActiveItem) { - return; - } - - const yOffset = visibleActiveItem.clientHeight; - const yDistance = visibleActiveItem.getBoundingClientRect().top - sidebarScrollbar.getBoundingClientRect().top; - sidebarScrollbar.scrollTo({ - behavior: "instant", - top: yDistance - yOffset - }); -} - -; -function computeMenuTranslation(switcher, optionsElement) { - // Calculate the position of a language options element. - const switcherRect = switcher.getBoundingClientRect(); - - // Must be called before optionsElement.clientWidth. - optionsElement.style.minWidth = `${Math.max(switcherRect.width, 50)}px`; - - const isOnTop = switcher.dataset.location === 'top'; - const isOnBottom = switcher.dataset.location === 'bottom'; - const isOnBottomRight = switcher.dataset.location === 'bottom-right'; - const isRTL = document.documentElement.dir === 'rtl' - - // Stuck on the left side of the switcher. - let x = switcherRect.left; - - if (isOnTop && !isRTL || isOnBottom && isRTL || isOnBottomRight && !isRTL) { - // Stuck on the right side of the switcher. - x = switcherRect.right - optionsElement.clientWidth; - } - - // Stuck on the top of the switcher. - let y = switcherRect.top - window.innerHeight - 10; - - if (isOnTop) { - // Stuck on the bottom of the switcher. - y = switcherRect.top - window.innerHeight + optionsElement.clientHeight + switcher.clientHeight + 4; - } - - return { x: x, y: y }; -} - -function toggleMenu(switcher) { - const optionsElement = switcher.nextElementSibling; - - optionsElement.classList.toggle('hx:hidden'); - - // Calculate the position of a language options element. - const translate = computeMenuTranslation(switcher, optionsElement); - - optionsElement.style.transform = `translate3d(${translate.x}px, ${translate.y}px, 0)`; -} - -function resizeMenu(switcher) { - const optionsElement = switcher.nextElementSibling; - - if (optionsElement.classList.contains('hx:hidden')) return; - - // Calculate the position of a language options element. - const translate = computeMenuTranslation(switcher, optionsElement); - - optionsElement.style.transform = `translate3d(${translate.x}px, ${translate.y}px, 0)`; -} - -; -(function () { - function updateGroup(container, index) { - const tabs = Array.from(container.querySelectorAll('.hextra-tabs-toggle')); - tabs.forEach((tab, i) => { - tab.dataset.state = i === index ? 'selected' : ''; - if (i === index) { - tab.setAttribute('aria-selected', 'true'); - tab.tabIndex = 0; - } else { - tab.setAttribute('aria-selected', 'false'); - tab.tabIndex = -1; - } - }); - const panelsContainer = container.parentElement.nextElementSibling; - if (!panelsContainer) return; - Array.from(panelsContainer.children).forEach((panel, i) => { - panel.dataset.state = i === index ? 'selected' : ''; - panel.setAttribute('aria-hidden', i === index ? 'false' : 'true'); - if (i === index) { - panel.tabIndex = 0; - } else { - panel.removeAttribute('tabindex'); - } - }); - } - - const syncGroups = document.querySelectorAll('[data-tab-group]'); - - syncGroups.forEach((group) => { - const key = encodeURIComponent(group.dataset.tabGroup); - const saved = localStorage.getItem('hextra-tab-' + key); - if (saved !== null) { - updateGroup(group, parseInt(saved, 10)); - } - }); - - document.querySelectorAll('.hextra-tabs-toggle').forEach((button) => { - button.addEventListener('click', function (e) { - const targetButton = e.currentTarget; - const container = targetButton.parentElement; - const index = Array.from(container.querySelectorAll('.hextra-tabs-toggle')).indexOf( - targetButton - ); - - if (container.dataset.tabGroup) { - // Sync behavior: update all tab groups with the same name - const tabGroupValue = container.dataset.tabGroup; - const key = encodeURIComponent(tabGroupValue); - document - .querySelectorAll('[data-tab-group="' + tabGroupValue + '"]') - .forEach((grp) => updateGroup(grp, index)); - localStorage.setItem('hextra-tab-' + key, index.toString()); - } else { - // Non-sync behavior: update only this specific tab group - updateGroup(container, index); - } - }); - - // Keyboard navigation for tabs - button.addEventListener('keydown', function (e) { - const container = button.parentElement; - const tabs = Array.from(container.querySelectorAll('.hextra-tabs-toggle')); - const currentIndex = tabs.indexOf(button); - let newIndex; - - switch (e.key) { - case 'ArrowRight': - case 'ArrowDown': - e.preventDefault(); - newIndex = (currentIndex + 1) % tabs.length; - break; - case 'ArrowLeft': - case 'ArrowUp': - e.preventDefault(); - newIndex = (currentIndex - 1 + tabs.length) % tabs.length; - break; - case 'Home': - e.preventDefault(); - newIndex = 0; - break; - case 'End': - e.preventDefault(); - newIndex = tabs.length - 1; - break; - default: - return; - } - - if (container.dataset.tabGroup) { - const tabGroupValue = container.dataset.tabGroup; - const key = encodeURIComponent(tabGroupValue); - document - .querySelectorAll('[data-tab-group="' + tabGroupValue + '"]') - .forEach((grp) => updateGroup(grp, newIndex)); - localStorage.setItem('hextra-tab-' + key, newIndex.toString()); - } else { - updateGroup(container, newIndex); - } - tabs[newIndex].focus(); - }); - }); -})(); - -; -document.addEventListener("DOMContentLoaded", function () { - // Hugo task lists render bare checkboxes; provide an accessible name. - document.querySelectorAll("main#content li > input[type='checkbox']").forEach(function (checkbox) { - if (checkbox.hasAttribute("aria-label") || checkbox.hasAttribute("aria-labelledby")) { - return; - } - var listItem = checkbox.closest("li"); - if (!listItem) return; - - var labelText = listItem.textContent.replace(/\s+/g, " ").trim(); - if (labelText) { - checkbox.setAttribute("aria-label", labelText); - } - }); -}); - -; -// Light / Dark theme toggle -(function () { - const defaultTheme = 'system' - const themes = ["light", "dark"]; - - const themeToggleButtons = document.querySelectorAll(".hextra-theme-toggle"); - const themeToggleOptions = document.querySelectorAll(".hextra-theme-toggle-options button[role=menuitemradio]"); - - function applyTheme(theme) { - theme = themes.includes(theme) ? theme : "system"; - - themeToggleButtons.forEach((btn) => btn.parentElement.dataset.theme = theme ); - themeToggleOptions.forEach((option) => { - option.setAttribute('aria-checked', option.dataset.item === theme ? 'true' : 'false'); - }); - - localStorage.setItem("color-theme", theme); - } - - function switchTheme(theme) { - setTheme(theme); - applyTheme(theme); - } - - const colorTheme = "color-theme" in localStorage ? localStorage.getItem("color-theme") : defaultTheme; - switchTheme(colorTheme); - - // Add click event handler to the menu items. - themeToggleOptions.forEach((option) => { - option.addEventListener("click", function (e) { - e.preventDefault(); - - switchTheme(option.dataset.item); - }) - }) - - // Add click event handler to the buttons - themeToggleButtons.forEach((toggler) => { - toggler.addEventListener("click", function (e) { - e.preventDefault(); - - toggler.dataset.state = toggler.dataset.state === 'open' ? 'closed' : 'open'; - toggleMenu(toggler); - const isOpen = toggler.dataset.state === 'open'; - toggler.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); - - // Focus first menuitem when opening - if (isOpen) { - const firstItem = toggler.nextElementSibling.querySelector('button[role=menuitemradio]'); - if (firstItem) firstItem.focus(); - } - }); - }); - - window.addEventListener("resize", () => themeToggleButtons.forEach(resizeMenu)) - - // Dismiss the menu when clicking outside - document.addEventListener('click', (e) => { - if (e.target.closest('.hextra-theme-toggle') === null) { - themeToggleButtons.forEach((toggler) => { - toggler.dataset.state = 'closed'; - toggler.setAttribute('aria-expanded', 'false'); - toggler.nextElementSibling.classList.add('hx:hidden'); - }); - } - }); - - // Keyboard navigation for the theme menu - document.querySelectorAll('.hextra-theme-toggle-options[role=menu]').forEach(function (menu) { - menu.addEventListener('keydown', function (e) { - const items = Array.from(menu.querySelectorAll('button[role=menuitemradio]')); - const currentIndex = items.indexOf(document.activeElement); - let newIndex; - - switch (e.key) { - case 'ArrowDown': - e.preventDefault(); - newIndex = (currentIndex + 1) % items.length; - items[newIndex].focus(); - break; - case 'ArrowUp': - e.preventDefault(); - newIndex = (currentIndex - 1 + items.length) % items.length; - items[newIndex].focus(); - break; - case 'Home': - e.preventDefault(); - items[0].focus(); - break; - case 'End': - e.preventDefault(); - items[items.length - 1].focus(); - break; - case 'Escape': - e.preventDefault(); - var toggler = menu.previousElementSibling; - toggler.dataset.state = 'closed'; - toggler.setAttribute('aria-expanded', 'false'); - menu.classList.add('hx:hidden'); - toggler.focus(); - break; - } - }); - }); - - // Listen for system theme changes - window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => { - if (localStorage.getItem("color-theme") === "system") { - setTheme("system"); - } - }); -})(); - -; -/** - * TOC Scroll - Highlights active TOC links based on visible headings - * - * Uses Intersection Observer to track heading visibility and applies - * 'hextra-toc-active' class to corresponding TOC links. Selects the - * topmost heading when multiple are visible. - * - * Requires: .hextra-toc element, matching heading IDs, toc.css styles - */ -document.addEventListener("DOMContentLoaded", function () { - const toc = document.querySelector(".hextra-toc"); - if (!toc) return; - - const tocLinks = toc.querySelectorAll('a[href^="#"]'); - if (tocLinks.length === 0) return; - - const headingIds = Array.from(tocLinks).map((link) => link.getAttribute("href").substring(1)); - - const headings = headingIds.map((id) => document.getElementById(decodeURIComponent(id))).filter(Boolean); - if (headings.length === 0) return; - - let currentActiveLink = null; - let isHashNavigation = false; - - // Create intersection observer - const observer = new IntersectionObserver( - (entries) => { - // Skip observer updates during hash navigation - if (isHashNavigation) return; - - const visibleHeadings = entries.filter((entry) => entry.isIntersecting).map((entry) => entry.target); - - if (visibleHeadings.length === 0) return; - - // Find the heading closest to the top of the viewport - const topMostHeading = visibleHeadings.reduce((closest, heading) => { - const headingTop = heading.getBoundingClientRect().top; - const closestTop = closest.getBoundingClientRect().top; - return Math.abs(headingTop) < Math.abs(closestTop) ? heading : closest; - }); - - // Encode the id and make it lowercase to match the TOC link - const targetId = encodeURIComponent(topMostHeading.id).toLowerCase(); - const targetLink = toc.querySelector(`a[href="#${targetId}"]`); - - if (targetLink && targetLink !== currentActiveLink) { - // Remove active class from previous link - if (currentActiveLink) { - currentActiveLink.classList.remove("hextra-toc-active"); - currentActiveLink.removeAttribute("aria-current"); - } - - // Add active class to current link - targetLink.classList.add("hextra-toc-active"); - targetLink.setAttribute("aria-current", "location"); - currentActiveLink = targetLink; - } - }, - { - rootMargin: "-20px 0px -60% 0px", // Adjust sensitivity - threshold: [0, 0.1, 0.5, 1], - } - ); - - // Observe all headings - headings.forEach((heading) => observer.observe(heading)); - - // Handle direct navigation to page with hash - function handleHashNavigation() { - const hash = window.location.hash; // already url encoded - if (hash) { - const targetLink = toc.querySelector(`a[href="${hash}"]`); - if (targetLink) { - // Disable observer temporarily during hash navigation - isHashNavigation = true; - - if (currentActiveLink) { - currentActiveLink.classList.remove("hextra-toc-active"); - currentActiveLink.removeAttribute("aria-current"); - } - targetLink.classList.add("hextra-toc-active"); - targetLink.setAttribute("aria-current", "location"); - currentActiveLink = targetLink; - - // Re-enable observer after scroll settles - setTimeout(() => { isHashNavigation = false; }, 500); - return; - } - } - } - - // Handle hash changes navigation - window.addEventListener("hashchange", handleHashNavigation); - - // Handle initial load - setTimeout(handleHashNavigation, 100); -}); diff --git a/public/js/main.min.d9fbefbbac8caeb66025dbb14d569c30defac0effcba45486a78209fba9360af.js b/public/js/main.min.d9fbefbbac8caeb66025dbb14d569c30defac0effcba45486a78209fba9360af.js deleted file mode 100644 index 5232ade..0000000 --- a/public/js/main.min.d9fbefbbac8caeb66025dbb14d569c30defac0effcba45486a78209fba9360af.js +++ /dev/null @@ -1,6 +0,0 @@ -document.addEventListener("DOMContentLoaded",function(){const e=document.querySelector("#backToTop");e&&(e.addEventListener("click",scrollUp),document.addEventListener("scroll",t=>{window.scrollY>300?(e.classList.remove("hx:opacity-0"),e.removeAttribute("tabindex")):(e.classList.add("hx:opacity-0"),e.setAttribute("tabindex","-1"))}))});function scrollUp(){const e=window.matchMedia("(prefers-reduced-motion: reduce)").matches;window.scroll({top:0,left:0,behavior:e?"auto":"smooth"})}document.addEventListener("DOMContentLoaded",function(){const n=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","svg");return e.innerHTML=` - - `,e.setAttribute("fill","none"),e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e},s=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","svg");return e.innerHTML=` - - `,e.setAttribute("fill","none"),e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e},t=()=>{document.querySelectorAll(".hextra-code-block pre, .highlight pre").forEach(function(e){e.scrollWidth>e.clientWidth?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")})};t();let e;window.addEventListener("resize",()=>{e&&cancelAnimationFrame(e),e=requestAnimationFrame(t)}),document.querySelectorAll(".hextra-code-copy-btn").forEach(function(e){e.querySelector(".hextra-copy-icon")?.appendChild(n()),e.querySelector(".hextra-success-icon")?.appendChild(s()),e.addEventListener("click",function(t){t.preventDefault();const s=e.parentElement.previousElementSibling;let n;if(s.tagName==="CODE")n=s;else{const e=s.querySelectorAll("code");n=e[e.length-1]}if(n){let t=n.innerText;"lang"in n.dataset&&(t=t.replace(/\n\n/g,` -`)),navigator.clipboard.writeText(t).then(function(){e.classList.add("copied");var t=e.getAttribute("aria-label"),n=e.dataset.copiedLabel||"Copied!";e.setAttribute("aria-label",n),setTimeout(function(){e.classList.remove("copied"),e.setAttribute("aria-label",t)},1e3)}).catch(function(e){console.error("Failed to copy text: ",e)})}else console.error("Target element not found")})})}),function(){const e=document.getElementById("favicon-svg"),n="false"==="true";if(e&&n){const s="/favicon.svg",o="/favicon-dark.svg",n=window.matchMedia("(prefers-color-scheme: dark)");function t(t){e.href=t.matches?o:s}t(n),n.addEventListener("change",t)}}(),document.addEventListener("DOMContentLoaded",function(){const e=document.querySelectorAll(".hextra-filetree-folder");e.forEach(function(e){e.addEventListener("click",function(){Array.from(e.children).forEach(function(e){e.dataset.state=e.dataset.state==="open"?"closed":"open"});var t=e.nextElementSibling.dataset.state==="open"?"closed":"open";e.nextElementSibling.dataset.state=t,e.setAttribute("aria-expanded",t==="open"?"true":"false")})})}),function(){const e=document.querySelectorAll(".hextra-language-switcher"),t=(e,t=!1)=>{e.dataset.state="closed",e.setAttribute("aria-expanded","false");const n=e.nextElementSibling;n.classList.add("hx:hidden"),t&&e.focus()},n=(e,t="none")=>{e.dataset.state="open",e.setAttribute("aria-expanded","true");const n=e.nextElementSibling;if(n.classList.contains("hx:hidden")?toggleMenu(e):resizeMenu(e),t!=="none"){const e=Array.from(n.querySelectorAll('[role="menuitem"]'));if(e.length>0){const n=t==="last"?e[e.length-1]:e[0];n.focus()}}};e.forEach(e=>{e.addEventListener("click",s=>{s.preventDefault(),e.dataset.state==="open"?t(e):n(e)}),e.addEventListener("keydown",t=>{t.key==="ArrowDown"?(t.preventDefault(),n(e,"first")):t.key==="ArrowUp"&&(t.preventDefault(),n(e,"last"))})}),document.querySelectorAll(".hextra-language-options[role=menu]").forEach(e=>{e.addEventListener("keydown",n=>{const s=Array.from(e.querySelectorAll('[role="menuitem"]'));if(s.length===0)return;const i=s.indexOf(document.activeElement);let o;switch(n.key){case"ArrowDown":n.preventDefault(),o=(i+1)%s.length,s[o].focus();break;case"ArrowUp":n.preventDefault(),o=(i-1+s.length)%s.length,s[o].focus();break;case"Home":n.preventDefault(),s[0].focus();break;case"End":n.preventDefault(),s[s.length-1].focus();break;case"Escape":{n.preventDefault();const s=e.previousElementSibling;s&&t(s,!0);break}}})}),window.addEventListener("resize",()=>e.forEach(resizeMenu)),document.addEventListener("click",n=>{!n.target.closest(".hextra-language-switcher")&&!n.target.closest(".hextra-language-options")&&e.forEach(e=>{t(e)})})}(),document.addEventListener("DOMContentLoaded",function(){const t=document.querySelector(".hextra-hamburger-menu"),e=document.querySelector(".hextra-sidebar-container"),n=window.matchMedia("(max-width: 767px)");function s(){return t.querySelector("svg").classList.contains("open")}function o(){n.matches?e.setAttribute("aria-hidden",s()?"false":"true"):e.removeAttribute("aria-hidden")}o(),n.addEventListener("change",o);function i(n={}){const{focusOnOpen:a=!0}=n;t.querySelector("svg").classList.toggle("open"),e.classList.toggle("hx:max-md:[transform:translate3d(0,-100%,0)]"),e.classList.toggle("hx:max-md:[transform:translate3d(0,0,0)]"),document.body.classList.toggle("hx:overflow-hidden"),document.body.classList.toggle("hx:md:overflow-auto");const i=s();if(t.setAttribute("aria-expanded",i?"true":"false"),o(),i){if(a){const t=e.querySelector('a, button, input, [tabindex="0"]');t&&t.focus()}}else t.focus()}t.addEventListener("click",e=>{e.preventDefault(),i({focusOnOpen:e.detail===0})}),document.addEventListener("keydown",e=>{e.key==="Escape"&&n.matches&&s()&&i()});const a=e.querySelectorAll("a");a.forEach(e=>{e.addEventListener("click",t=>{e.getAttribute("href")&&e.getAttribute("href").startsWith("#")&&window.innerWidth<768&&i()})})}),function(){const s="hx:hidden",t=document.querySelectorAll(".hextra-nav-menu-toggle"),e=(e,t=!1)=>{e.dataset.state="closed",e.setAttribute("aria-expanded","false");const n=e.nextElementSibling;n.classList.add(s),t&&e.focus()},n=(n,o="none")=>{t.forEach(t=>{t!==n&&e(t)}),n.dataset.state="open",n.setAttribute("aria-expanded","true");const i=n.nextElementSibling;if(i.style.position="absolute",i.style.top="100%",i.style.left="50%",i.style.transform="translateX(-50%)",i.style.zIndex="1000",i.classList.remove(s),o!=="none"){const e=Array.from(i.querySelectorAll('[role="menuitem"]'));if(e.length>0){const t=o==="last"?e[e.length-1]:e[0];t.focus()}}};t.forEach(t=>{t.addEventListener("click",s=>{s.preventDefault(),s.stopPropagation();const o=t.dataset.state==="open";o?e(t):n(t)}),t.addEventListener("keydown",e=>{e.key==="ArrowDown"?(e.preventDefault(),n(t,"first")):e.key==="ArrowUp"&&(e.preventDefault(),n(t,"last"))})}),document.querySelectorAll(".hextra-nav-menu-items[role=menu]").forEach(t=>{t.addEventListener("keydown",n=>{const s=Array.from(t.querySelectorAll('[role="menuitem"]'));if(s.length===0)return;const i=s.indexOf(document.activeElement);let o;switch(n.key){case"ArrowDown":n.preventDefault(),o=(i+1)%s.length,s[o].focus();break;case"ArrowUp":n.preventDefault(),o=(i-1+s.length)%s.length,s[o].focus();break;case"Home":n.preventDefault(),s[0].focus();break;case"End":n.preventDefault(),s[s.length-1].focus();break;case"Escape":{n.preventDefault();const s=t.previousElementSibling;s&&e(s,!0);break}}})}),document.addEventListener("click",n=>{!n.target.closest(".hextra-nav-menu-toggle")&&!n.target.closest(".hextra-nav-menu-items")&&t.forEach(t=>{e(t)})}),document.addEventListener("keydown",n=>{n.key==="Escape"&&t.forEach(t=>{t.dataset.state==="open"&&e(t,!0)})})}(),document.addEventListener("DOMContentLoaded",()=>{const s=document.querySelectorAll(".hextra-page-context-menu-copy"),t=new Map;s.forEach(e=>{const n=e.dataset.url;n&&fetch(n).then(e=>{if(e.ok)return e.text();throw new Error("Failed to fetch")}).then(e=>t.set(n,e)).catch(e=>console.error("Failed to pre-fetch markdown:",e))}),s.forEach(e=>{e.addEventListener("click",()=>{const n=e.dataset.url,s=t.get(n);s?navigator.clipboard.writeText(s).then(()=>{e.classList.add("copied"),setTimeout(()=>e.classList.remove("copied"),1e3)}).catch(e=>console.error("Failed to copy markdown:",e)):fetch(n).then(e=>{if(!e.ok)throw new Error("Failed to fetch");return e.text()}).then(e=>(t.set(n,e),navigator.clipboard.writeText(e))).then(()=>{e.classList.add("copied"),setTimeout(()=>e.classList.remove("copied"),1e3)}).catch(e=>console.error("Failed to copy markdown:",e))})});const e=document.querySelectorAll(".hextra-page-context-menu-toggle");e.forEach(t=>{const s=t.closest(".hextra-page-context-menu"),o=s.querySelector(".hextra-page-context-menu-dropdown"),n=t.querySelector("[data-chevron]");t.addEventListener("click",s=>{s.stopPropagation();const i=t.dataset.state==="open";e.forEach(e=>{if(e!==t){e.dataset.state="closed",e.setAttribute("aria-expanded","false");const n=e.closest(".hextra-page-context-menu"),s=n.querySelector(".hextra-page-context-menu-dropdown"),t=e.querySelector("[data-chevron]");s.classList.add("hx:hidden"),t&&(t.style.transform="")}}),t.dataset.state=i?"closed":"open",t.setAttribute("aria-expanded",i?"false":"true"),o.classList.toggle("hx:hidden",i),n&&(n.style.transform=i?"":"rotate(180deg)")})}),document.addEventListener("click",t=>{const n=!t.target.closest(".hextra-page-context-menu");n&&e.forEach(e=>{e.dataset.state="closed",e.setAttribute("aria-expanded","false");const n=e.closest(".hextra-page-context-menu"),s=n.querySelector(".hextra-page-context-menu-dropdown"),t=e.querySelector("[data-chevron]");s.classList.add("hx:hidden"),t&&(t.style.transform="")})}),document.addEventListener("keydown",t=>{t.key==="Escape"&&e.forEach(e=>{if(e.dataset.state==="open"){const t=e.closest(".hextra-page-context-menu");n(t),e.focus()}})});const n=e=>{if(!e)return;const t=e.querySelector(".hextra-page-context-menu-toggle"),n=e.querySelector(".hextra-page-context-menu-dropdown");if(!t||!n)return;const s=t.querySelector("[data-chevron]");t.dataset.state="closed",t.setAttribute("aria-expanded","false"),n.classList.add("hx:hidden"),s&&(s.style.transform="")};document.querySelectorAll('.hextra-page-context-menu-dropdown button[data-action="copy"]').forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const s=e.closest(".hextra-page-context-menu");if(!s)return;const o=s.querySelector(".hextra-page-context-menu-copy");if(!o)return;n(s),o.click()})}),document.querySelectorAll('.hextra-page-context-menu-dropdown button[data-action="view"]').forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".hextra-page-context-menu");if(!s)return;const o=e.dataset.url;if(!o)return;n(s),window.open(o,"_blank","noopener,noreferrer")})})}),document.addEventListener("DOMContentLoaded",function(){scrollToActiveItem(),enableCollapsibles()});function enableCollapsibles(){const e=document.querySelectorAll(".hextra-sidebar-collapsible-button");e.forEach(function(e){e.addEventListener("click",function(t){t.preventDefault();const n=e.closest("li");n&&(n.classList.toggle("open"),e.setAttribute("aria-expanded",n.classList.contains("open")?"true":"false"))})})}function scrollToActiveItem(){const t=document.querySelector("aside.hextra-sidebar-container > .hextra-scrollbar"),n=document.querySelectorAll(".hextra-sidebar-active-item"),e=Array.from(n).find(function(e){return e.getBoundingClientRect().height>0});if(!e)return;const s=e.clientHeight,o=e.getBoundingClientRect().top-t.getBoundingClientRect().top;t.scrollTo({behavior:"instant",top:o-s})}function computeMenuTranslation(e,t){const n=e.getBoundingClientRect();t.style.minWidth=`${Math.max(n.width,50)}px`;const o=e.dataset.location==="top",r=e.dataset.location==="bottom",c=e.dataset.location==="bottom-right",s=document.documentElement.dir==="rtl";let i=n.left;(o&&!s||r&&s||c&&!s)&&(i=n.right-t.clientWidth);let a=n.top-window.innerHeight-10;return o&&(a=n.top-window.innerHeight+t.clientHeight+e.clientHeight+4),{x:i,y:a}}function toggleMenu(e){const t=e.nextElementSibling;t.classList.toggle("hx:hidden");const n=computeMenuTranslation(e,t);t.style.transform=`translate3d(${n.x}px, ${n.y}px, 0)`}function resizeMenu(e){const t=e.nextElementSibling;if(t.classList.contains("hx:hidden"))return;const n=computeMenuTranslation(e,t);t.style.transform=`translate3d(${n.x}px, ${n.y}px, 0)`}(function(){function e(e,t){const s=Array.from(e.querySelectorAll(".hextra-tabs-toggle"));s.forEach((e,n)=>{e.dataset.state=n===t?"selected":"",n===t?(e.setAttribute("aria-selected","true"),e.tabIndex=0):(e.setAttribute("aria-selected","false"),e.tabIndex=-1)});const n=e.parentElement.nextElementSibling;if(!n)return;Array.from(n.children).forEach((e,n)=>{e.dataset.state=n===t?"selected":"",e.setAttribute("aria-hidden",n===t?"false":"true"),n===t?e.tabIndex=0:e.removeAttribute("tabindex")})}const t=document.querySelectorAll("[data-tab-group]");t.forEach(t=>{const s=encodeURIComponent(t.dataset.tabGroup),n=localStorage.getItem("hextra-tab-"+s);n!==null&&e(t,parseInt(n,10))}),document.querySelectorAll(".hextra-tabs-toggle").forEach(t=>{t.addEventListener("click",function(t){const o=t.currentTarget,n=o.parentElement,s=Array.from(n.querySelectorAll(".hextra-tabs-toggle")).indexOf(o);if(n.dataset.tabGroup){const t=n.dataset.tabGroup,o=encodeURIComponent(t);document.querySelectorAll('[data-tab-group="'+t+'"]').forEach(t=>e(t,s)),localStorage.setItem("hextra-tab-"+o,s.toString())}else e(n,s)}),t.addEventListener("keydown",function(n){const i=t.parentElement,o=Array.from(i.querySelectorAll(".hextra-tabs-toggle")),a=o.indexOf(t);let s;switch(n.key){case"ArrowRight":case"ArrowDown":n.preventDefault(),s=(a+1)%o.length;break;case"ArrowLeft":case"ArrowUp":n.preventDefault(),s=(a-1+o.length)%o.length;break;case"Home":n.preventDefault(),s=0;break;case"End":n.preventDefault(),s=o.length-1;break;default:return}if(i.dataset.tabGroup){const t=i.dataset.tabGroup,n=encodeURIComponent(t);document.querySelectorAll('[data-tab-group="'+t+'"]').forEach(t=>e(t,s)),localStorage.setItem("hextra-tab-"+n,s.toString())}else e(i,s);o[s].focus()})})})(),document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll("main#content li > input[type='checkbox']").forEach(function(e){if(e.hasAttribute("aria-label")||e.hasAttribute("aria-labelledby"))return;var t,n=e.closest("li");if(!n)return;t=n.textContent.replace(/\s+/g," ").trim(),t&&e.setAttribute("aria-label",t)})}),function(){const s="system",o=["light","dark"],e=document.querySelectorAll(".hextra-theme-toggle"),t=document.querySelectorAll(".hextra-theme-toggle-options button[role=menuitemradio]");function i(n){n=o.includes(n)?n:"system",e.forEach(e=>e.parentElement.dataset.theme=n),t.forEach(e=>{e.setAttribute("aria-checked",e.dataset.item===n?"true":"false")}),localStorage.setItem("color-theme",n)}function n(e){setTheme(e),i(e)}const a="color-theme"in localStorage?localStorage.getItem("color-theme"):s;n(a),t.forEach(e=>{e.addEventListener("click",function(t){t.preventDefault(),n(e.dataset.item)})}),e.forEach(e=>{e.addEventListener("click",function(t){t.preventDefault(),e.dataset.state=e.dataset.state==="open"?"closed":"open",toggleMenu(e);const n=e.dataset.state==="open";if(e.setAttribute("aria-expanded",n?"true":"false"),n){const t=e.nextElementSibling.querySelector("button[role=menuitemradio]");t&&t.focus()}})}),window.addEventListener("resize",()=>e.forEach(resizeMenu)),document.addEventListener("click",t=>{t.target.closest(".hextra-theme-toggle")===null&&e.forEach(e=>{e.dataset.state="closed",e.setAttribute("aria-expanded","false"),e.nextElementSibling.classList.add("hx:hidden")})}),document.querySelectorAll(".hextra-theme-toggle-options[role=menu]").forEach(function(e){e.addEventListener("keydown",function(t){const n=Array.from(e.querySelectorAll("button[role=menuitemradio]")),i=n.indexOf(document.activeElement);let s;switch(t.key){case"ArrowDown":t.preventDefault(),s=(i+1)%n.length,n[s].focus();break;case"ArrowUp":t.preventDefault(),s=(i-1+n.length)%n.length,n[s].focus();break;case"Home":t.preventDefault(),n[0].focus();break;case"End":t.preventDefault(),n[n.length-1].focus();break;case"Escape":t.preventDefault();var o=e.previousElementSibling;o.dataset.state="closed",o.setAttribute("aria-expanded","false"),e.classList.add("hx:hidden"),o.focus();break}})}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{localStorage.getItem("color-theme")==="system"&&setTheme("system")})}(),document.addEventListener("DOMContentLoaded",function(){const t=document.querySelector(".hextra-toc");if(!t)return;const s=t.querySelectorAll('a[href^="#"]');if(s.length===0)return;const a=Array.from(s).map(e=>e.getAttribute("href").substring(1)),o=a.map(e=>document.getElementById(decodeURIComponent(e))).filter(Boolean);if(o.length===0)return;let e=null,n=!1;const r=new IntersectionObserver(s=>{if(n)return;const i=s.filter(e=>e.isIntersecting).map(e=>e.target);if(i.length===0)return;const a=i.reduce((e,t)=>{const n=t.getBoundingClientRect().top,s=e.getBoundingClientRect().top;return(n<0?-n:n)<(s<0?-s:s)?t:e}),r=encodeURIComponent(a.id).toLowerCase(),o=t.querySelector(`a[href="#${r}"]`);o&&o!==e&&(e&&(e.classList.remove("hextra-toc-active"),e.removeAttribute("aria-current")),o.classList.add("hextra-toc-active"),o.setAttribute("aria-current","location"),e=o)},{rootMargin:"-20px 0px -60% 0px",threshold:[0,.1,.5,1]});o.forEach(e=>r.observe(e));function i(){const s=window.location.hash;if(s){const o=t.querySelector(`a[href="${s}"]`);if(o){n=!0,e&&(e.classList.remove("hextra-toc-active"),e.removeAttribute("aria-current")),o.classList.add("hextra-toc-active"),o.setAttribute("aria-current","location"),e=o,setTimeout(()=>{n=!1},500);return}}}window.addEventListener("hashchange",i),setTimeout(i,100)}) \ No newline at end of file diff --git a/public/posts/210218-teamspeakwithdocker/index.html b/public/posts/210218-teamspeakwithdocker/index.html deleted file mode 100644 index 82e75a5..0000000 --- a/public/posts/210218-teamspeakwithdocker/index.html +++ /dev/null @@ -1,685 +0,0 @@ - - - - - - - -使用Docker安装TeamSpeak – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
使用Docker安装TeamSpeak
-
- - -
-

使用Docker安装TeamSpeak

- -
- -
2021/02/18·Kushidou
-
- -

TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。

-

Teamspeak -

TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。

-

所以,选择docker安装ts就是一个很不错的选择。

-

Docker及其安装 -

docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。

-

我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:

-
- -
sudo yum install docker	#安装docker程序,会自动选择合适的
-sudo systemctl start docker	#启动docker服务
-sudo systemctl enable docker	#允许docker开机自启
- -
-
-

Docker安装TS -

docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak

-

直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。

-

端口 -

从指令可以看出,docker需要使用到9987,10011,30033三个端口,所以需要到服务器后台开启防火墙上对应端口。

-

管理员密钥 -

TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。

-

docker ps -a查找所有容器。

-

docker logs -f [CONTATINER ID]查看log,找到token即可。客户端设置之后再说。

-

密钥只会在第一次运行时打印,注意保存。

-

参考:https://woolio.cn/683/

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210311-multitouchscreeninlinux/index.html b/public/posts/210311-multitouchscreeninlinux/index.html deleted file mode 100644 index 7deca5c..0000000 --- a/public/posts/210311-multitouchscreeninlinux/index.html +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - -Linux多显示器触屏调试与暂行解决方案 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux多显示器触屏调试与暂行解决方案
-
- - -
-

Linux多显示器触屏调试与暂行解决方案

- -
- -
2021/03/11·Kushidou
-
- -

由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。

-

2021-03-22更新部分内容 -2021-04-28再次更新内容

-

2021-09-14 文章已有新版本,请访问《Linux处理多触屏的终极解决方案

-

问题来源 -

最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 -接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为

-

xinput map-to-output $触屏设备id $显示屏名称

-
-

2021-04-28更新

-

xinput map-to-output指令支持触摸屏名称作为参数,比如我通过xinput指令看到有一个触摸屏的设备名称为ILITEK XXXX,那么我映射的时候直接输入

-
-

xinput map-to-output "ILITEK XXX" HDMI-1

- -
- -
-

尝试解决 -

    -
  • 首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。
  • -
  • 然后xinput list-props $id查看设备的VID,这个在后续自动化处理有用。
  • -
  • xrandr查看$显示器名称
  • -
-

自动化处理 -

- -
# 2021-04-28更新:
-# 本部分后面的都可以不看了!
-xinput map-to-output "DEVICE_NAME" DISPLAY
-# 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, 
-# 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~
- -
-
-

仅作归档!下面这些方法过于繁琐!

-

利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。bash this.sh VID1 VID2 ScreenID

-
- -
#!/bin/bash
-# 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。
-# 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。
-MYID_FIRST=$1
-MYID_SECOND=$2
-OUT_PUT=$3
-
-for I in $(xinput list --id-only)
-do
-#[1]
-    CUR_FIRST=$(xinput list-props $I|grep "Device Product ID"|awk -F : '{print $2}'|awk -F , '{print $1}'|awk '{print $1}')
-    CUR_SECOND=$(xinput list-props $I|grep "Device Product ID"|awk -F : '{print $2}'|awk -F , '{print $2}'|awk '{print $1}')
-    if [ "$MYID_FIRST" == "$CUR_FIRST" ] && [ "$MYID_SECOND" == "$CUR_SECOND" ];
-    then
-        MY_INDEX=$I
-        break;
-    fi
-done
-
-xinput map-to-output $MY_INDEX $OUT_PUT
-
-#./this.sh VID VID HDMI2
-#./this.sh VID VID HDMI1
- -
-
-
- -
#!/bin/bash
-# 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。
-TOUCH_ID=$(xinput | grep -iw DEVICE_NAME)
-TOUCH_ID=$(echo ${TOUCH_ID#*id=})
-TOUCH_ID=$(echo ${TOUCH_ID%% *})
-xinput map-to-output $TOUCH_ID SCREEN_NAME
- -
-
-

此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id

-

经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在~/.bashrc中,这样只需要打开一次终端,就可以实现屏幕重新映射。

-

后续问题 -

    -
  1. 当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。
  2. -
  3. 当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数
  4. -
  5. 如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。
  6. -
-

触屏校准(如果需要) -

网上说的利用校准来区分多触摸屏的方法是完全错误的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)

-
    -
  • sudo apt install xinput-calibrator,需要更新源
  • -
  • sudo xinput_calibrator
  • -
  • 将校准信息保存到/usr/share/X11/xorg.conf.d/10-evdev.conf的"Driver evdev”下面一行,重启生效。
  • -
-

参考: -

[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 -[2]https://blog.csdn.net/qq_33406883/article/details/106649087 -[3]https://segmentfault.com/a/1190000020334077

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210311-serialmodeandudevinlinux/index.html b/public/posts/210311-serialmodeandudevinlinux/index.html deleted file mode 100644 index ff5e00a..0000000 --- a/public/posts/210311-serialmodeandudevinlinux/index.html +++ /dev/null @@ -1,732 +0,0 @@ - - - - - - - -Linux串口和udev理解 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux串口和udev理解
-
- - -
-

Linux串口和udev理解

- -
- -
2021/03/11·Kushidou
-
- -

配置串口权限,顺便看一下linux的udev规则。

-

串口的问题 -

在现场开发的同事反映UOS工控机没有配置串口,每次都需要sudo才能使用。(明明在家里你们都会自己配置好环境与权限,为什么到了现场反而不会了需要我提供协助呢?)

-

我之前没考虑过这个问题,认为串口就是得root权限操作才安全。但是既然提出了需求,就赶紧百度并测试一下吧。

-

赋予普通用户串口权限的两种方法 -

在百度上,给普通用户串口权限有两种主流方法(可能2会了,Google上不去),一种是将用户放入特殊的用户组,从而获得权限。另一种是加入udev规则,在串口插入时自动更改权限。

-

我个人更倾向于使用第二种方案,因为公司中不同的人装系统就可能起不同的名字,之后进入生产环境可能又会起新的名字,所以采用第二种设置规则的办法,便于之后制作恢复镜像和一键部署。

-

xxx.rules -

sudo vi /etc/udev/rules.d/70-tty-usb-rules,写入以下内容:

-
- -
KERNEL=="ttyS*",MODE="0666"
-KERNEL=="ttyUSB*",MODE="0666"
- -
-
-

这一段的意思是匹配所有ttyS和ttyUSB,插入时都赋予0666的权限,即所有用户都可读可写。重新加载一下设备,就可以按规则配置权限进行操作了。

-

udev规则 -

udev是什么?udev是Linux下的设备文件管理方式,运行在用户侧(devfs在内核侧管理设备文件)。有了udev,/dev目录下的文件就都是真实存在的已连接的设备了。

-

udev的规则都保存在/etc/udev/rules.d目录下,文件名的格式为数字-名称.rules,数字表示加载顺序,一般是从小往大加载;名称按功能自定义,最后以.rules结尾。这些规则会在设备接入时生效。

-

规则文件按行执行,每行分为两个部分:匹配和赋值,每个参数使用逗号,分割。

-
-

(这段复制自引用2,仅供参考)。 -1、udev 规则的所有操作符 -==  比较键、值,若等于,则该条件满足; -!=  比较键、值,若不等于,则该条件满足; -=   对一个键赋值; -+=  为一个表示多个条目的键赋值。 -:=  对一个键赋值,并拒绝之后所有对该键的改动,防止后面的规则文件对该键重赋值。

-

2、udev 规则的匹配键 -ACTION        事件 (uevent) 的行为,例如:add、remove。 -KERNEL         内核设备名称,例如:sda, cdrom。 -DEVPATH        设备的 devpath 路径。 -SUBSYSTEM       设备的子系统名称,例如:sda 的子系统为 block。 -BUS           设备在 devpath 里的总线名称,例如:usb。 -DRIVER         设备在 devpath 里的设备驱动名称,例如:ide-cdrom。 -ID            设备在 devpath 里的识别号。 -SYSFS{filename}    设备的 devpath 路径下,设备的属性文件“filename”里的内容。 -ENV{key}       环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。 -PROGRAM        调用外部命令。 -RESULT         外部命令 PROGRAM 的返回结果。

-

3、udev 的重要赋值键 -NAME           /dev目录下显示的文件名重命名 -SYMLINK          为 /dev下文件进行符号链接,防止覆盖系统默认产生的文件 -OWNER, GROUP, MODE  为设备设定权限。 -ENV{key}         导入一个环境变量。

-

4、udev 的值和可调用的替换操作符 -Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符: -$kernel, %k        设备的内核设备名称,例如:sda、cdrom。 -$number, %n        设备的内核号码,例如:sda3 的内核号码是 3。 -$devpath, %p       设备的 devpath路径。 -$id, %b          设备在 devpath里的 ID 号。 -$sysfs{file}, %s{file}   设备的 sysfs里 file 的内容。其实就是设备的属性值。 -$env{key}, %E{key}   一个环境变量的值。 -$major, %M        设备的 major 号。 -$minor %m        设备的 minor 号。 -$result, %c        PROGRAM 返回的结果。 -$parent, %P       父设备的设备文件名。 -$root, %r         udev_root的值,默认是 /dev/。 -$tempnode, %N      临时设备名。 -%%            符号 % 本身。 -$$             符号 $ 本身。

- -
-

参考 -

[1]https://www.cnblogs.com/qixianyu/p/6869744.html -[2]https://www.cnblogs.com/cslunatic/p/3171837.html

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210328-linuxchangemacip/index.html b/public/posts/210328-linuxchangemacip/index.html deleted file mode 100644 index c3142c4..0000000 --- a/public/posts/210328-linuxchangemacip/index.html +++ /dev/null @@ -1,732 +0,0 @@ - - - - - - - -Linux修改mac地址 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux修改mac地址
-
- - -
-

Linux修改mac地址

- -
- -
2021/03/28·Kushidou
-
- -

当Linux的图形界面没有或失效的时候,该如何更改mac地址?

-

Linux调整网卡MAC地址(指令)

有的时候需要使用欺骗的方法为电脑设置新的mac,比如存在上网网卡限制,或者想要隐藏自己的真实mac地址。这里列举三种修改mac的方法,适用于Debian系的Linux,其他的应该类似。

-

方法一:ifconfig -

- -
# ifconfig    查看网卡名称$NAME
-# 需要sudo权限
-ifconfig $NAME down
-ifconfig $NAME hw ether $NEW_MAC
-ifconfig $NAME up
-# 使用ifconfig检查有没有改变
- -
-
-

方法二:macchanger -

sudo apt install macchanger,安装过程提示是否自启,随便。

-
- -
ifconfig $NAME down
-macchanger -m $NEW_MAC $NAME
-ifconfig $NAME up
- -
-
-

ps:macchanger可以附加多种参数,如-m指定mac地址,-s查看状态,-r随机地址

-

备注: -

以上两种方法是软件层面的修改,不会对硬件造成损伤,重启之后就能恢复如初。如果是要长期有效,可以把这些命令写入脚本开机自启。除了这两个,还有另一种软修改的方法,因为我总是提示失败就遗忘了。

-

有些方法会提到修改/etc目录下的文件实现MAC地址的修改,但是我一个文件都没找到(UOS),这个是因系统而异的,不同的发行版可以选择性的编译这些文件,就会造成有人有有人没有,因为没有实践,所以就不写在这里了。

-

方法三:ethtool(慎用) -

以上方法都失效,可以直接修改网卡的物理MAC地址,修改后无法恢复,慎用

-
- -
# 首先检查mac是否支持修改
-ethtool -i $NAME
-# 如果  supports-eeprom-access: no,大概率不支持修改
-
-# 查看网卡的mac寄存器
-ethtool -e $NAME
-# 如果无法读取,大概率不支持修改
-
-# 修改mac,按字节修改
-ethtool -E $NAME offset 0 value 0xAA
-ethtool -E $NAME offset 1 value 0xBB
-ethtool -E $NAME offset 2 value 0xCC
-...共六行
-# 如果修改无效,则驱动不支持修改
- -
-
-

如果以上方法都无法修改,则建议申请新的ip。。。 -

文章首发于香风家的小别墅,转载请携带出处。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210420-linuxmorethan4serialport/index.html b/public/posts/210420-linuxmorethan4serialport/index.html deleted file mode 100644 index 111015a..0000000 --- a/public/posts/210420-linuxmorethan4serialport/index.html +++ /dev/null @@ -1,722 +0,0 @@ - - - - - - - -Linux启用四个以上的串口 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux启用四个以上的串口
-
- - -
-

Linux启用四个以上的串口

- -
- -
2021/04/20·Kushidou
-
- -

工控板安装Linux常常最多只能看到四个串口,通过修改引导文件可以显示所有的串口。

-

先说结论 -

- -
# 1.修改开机grub文件
-sudo vi /etc/default/grub
-# 2.在"GRUB_CMDLINE_LINUX_DEFAULT="一行的结尾空格,添加内容
- 8250.nr_uarts=8
-# 3.更新开机引导并重启
-sudo update-grub
- -
-
-

再说细节 -

给带有多串口的工控机安装国产Linux操作系统UOS,发现/dev/ttyS只有四个,而且一个都不通,其实这是Linux 的通病,如果发行商没有提前配置,我们只能看到四个不能用的串口。但是工控机都有8-16个串口,不得不想办法让他们能够正常使用,而许多串口芯片只需要基本的驱动就能运行,也不提供专有驱动的源代码编译(一般安装专用驱动后,串口名称会改变,比如xr17v358芯片的驱动安装后名称变成ttyXR0),我们只有从linux本身下手了。

-

经过多番查找资料,虽然不知道为什么,但是我们应该修改/etc/default/grub文件,其中有一行是这样的:

-
- -
GRUB_CMDLINE_LINUX_DEFAULT="这里面 的内容 先不管 它"
- -
-
-

我看了UOS(含Deepin)、Ubuntu和服务器的Centos7都有,在这一行的最后添加8250.nr_uart=32,其中数字<=32都行,效果如下:

-
- -
GRUB_CMDLINE_LINUX_DEFAULT="这里面 的内容 先不管 它 8250.nr_uarts=32"
- -
-
-

然后更新一下系统的引导

-
- -
sudo update-gurb
-reboot
- -
-
-

重启完了你就能看到更多的串口啦!配合修改udev规则,你就可以用普通用户的权限使用串口通信了。但是请注意其他隐患,比如这个芯片配合基本驱动只能完成基础的收发功能,流控的RTS、CTS等还是需要专用驱动实现的!

-

最后吐槽 -

为了串口问题我找了一下午的资料,最后才在外网找到了一个能用的。国内的教程都是说要修改/boot/gurb/gurb2,宝友,这可不兴改啊,这个改坏了系统可就没了啊!这些文件普通用户连浏览权限都没就可见其重要性。

-

参考: -

https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/

-

核心步骤就参考了这个,在Linux方面大家还是多用google,多用英文去搜索吧!

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210429-deepinautorun/index.html b/public/posts/210429-deepinautorun/index.html deleted file mode 100644 index ffbc1ec..0000000 --- a/public/posts/210429-deepinautorun/index.html +++ /dev/null @@ -1,677 +0,0 @@ - - - - - - - -deepin和UOS,快捷方式,开机自启动 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
deepin和UOS,快捷方式,开机自启动
-
- - -
-

deepin和UOS,快捷方式,开机自启动

- -
- -
2021/04/29·Kushidou
-
- -

修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。

-

桌面快捷方式 -

deepin的桌面快捷方式是以*.desktop文件的形式实现的,所以我们需要添加自定义快捷方式的话,只要在桌面添加要给desktop格式的文本文件,编辑内容

-
- -
[Desktop Entry]
-Name=ddd
-Exec="/usr/sbin/xx.sh"
-Type=Application
- -
-
-

其中Desktop Entry表示声明该文件为快捷方式文件。Name是这个文件要显示的名字,设置了之后就可以隐藏原名称和扩展名。Exec是程序的启动脚本,或者启动指令。Type是程序类型,在开始菜单的分类中可以体现。以上四行是必须要有的参数,还有一些其他的参数不影响执行。Exec的脚本必须赋予777权限以执行。

-

把这个文件放在~/Desktop,就可以看到桌面上多了一个快捷方式了。

-

开始菜单 -

sudo cp ~/Desktop/刚刚的.desktop /usr/share/applications,过一会或者注销重新登录就能看到开始菜单的响应类型下出现这个快捷方式了。

-

开机自动执行 -

UOS/Deepin和Ubuntu -

cp ~/Desktop/刚刚的.desktop ~/.config/autostart

-

需要这个的原因主要是我执行触摸屏映射的指令经常会在桌面启动前(lightdm.service)执行,导致error从而无法进入桌面,将脚本放进/etc/profile.d之后第二天就失效了,所以需要一个在登录桌面后就实现自动执行的功能,多种方法对比下来还是放进桌面环境的开机自启文件夹比较靠谱。这样一般会在进入桌面后5-10秒自动执行,稳定性大幅提高。

-

经过实际查阅资料和测试,Ubuntu1604也完全适用上面的步骤,只不过可能需要在~/.config/下手动创建一个autostart目录。由于1604已经停止支持,许多人转入了更新的ubuntu系统,猜测近几年的也可以尝试一下。

-

麒麟和其他使用X11桌面的Linux -

本条目包含UOS和Ubuntu、deepin系统

-

自启动目录为/etc/xdg/autostart,同样的desktop文件放进去即可。但是麒麟中我使用上面的基础desktop报错,可能需要添加其他内容。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210630-sudowithoutpasswd/index.html b/public/posts/210630-sudowithoutpasswd/index.html deleted file mode 100644 index c1b7025..0000000 --- a/public/posts/210630-sudowithoutpasswd/index.html +++ /dev/null @@ -1,678 +0,0 @@ - - - - - - - -免密码使用sudo – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
免密码使用sudo
-
- - -
-

免密码使用sudo

- -
- -
2021/06/30·Kushidou
-
- -

记录一种可以免密码使用sudo的方法。

-

每次使用sudo提权,常常要输密码太烦了,所以想给自己赋予免密码的特权。

-
    -
  1. -

    首先登录root用户: sudo -i

    -
  2. -
  3. -

    这个操作的核心文件是/etc/sudoers,可以看到这个文件是只读的,要修改他需要先赋予写入权限。

    -
  4. -
-
- -
chmod 666 /etc/sudoers
- -
-
-

文件是只读权限

-
    -
  1. 使用vim修改文件,vi /etc/sudoers,把当前用户和用户组加入,如图
  2. -
-
- -
# 表示为该用户免密码
-yourname	ALL=(ALL:ALL) NOPASSWD:ALL
-# 表示为该用户组免密码
-%yourname	ALL=(ALL:ALL) NOPASSWD:ALL
-# 不用严格按照次形式,与你的这个文件中root的格式对应即可。
- -
-
-
    -
  1. :wq保存,把sodoers改回只读
  2. -
-
- -
chmod 440 /etc/sudoers
- -
-
-

文件修改的内容

-
    -
  1. 完成~~~ 把终端关掉再次打开就应该能看到效果了。
  2. -
-
-

PS. 不可使用sudo chmod

-

一定要直接sudo -i进入root用户,如果使用sudo chmod以普通用户的身份修改sudoers文件的话,改完会发现无法使用sudo指令把权限改回去了,提示“任何人可读写,无法找到有效的sudoers”。其实还有一种更加安全的操作,但是那个编辑器用起来没有vim顺手,

- -
-

参考:https://blog.csdn.net/wxqee/article/details/72718869

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210719-gpuinfoinlinux/index.html b/public/posts/210719-gpuinfoinlinux/index.html deleted file mode 100644 index 45894eb..0000000 --- a/public/posts/210719-gpuinfoinlinux/index.html +++ /dev/null @@ -1,684 +0,0 @@ - - - - - - - -Linux中获得AMD显卡的状态信息 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux中获得AMD显卡的状态信息
-
- - -
-

Linux中获得AMD显卡的状态信息

- -
- -
2021/07/19·Kushidou
-
- -

在Linux下获得AMD GPU的状态和温度信息。

-

在Linux下如果要查看Nvidia GPU的状态信息,可以使用Nvidia驱动自带的工具。而AMD显卡一般都是使用的开源驱动,这种情况下如何获得显卡的状态和占用呢?

-

文章部分图片之后再附

-

1、获取GPU信息 -

如需获得GPU的信息(型号、驱动)等,如果系统提供类似*“设备管理器”*的工具可以打开查看。或者就是用lspci指令查看。

-
- -
# 获得所有PCIe设备,在其中找到AMD GPU
-[exam@ple]:~$ lspci
-00:02.0 VGA compatible controller: xxxxxxxx
-
-[exam@ple]:~$ lspci -v -s 00:02.0
-# 这里就会显示显卡的具体信息了,包括型号、驱动等,之后补充
- -
-
-

2、GPU占用率 -

显卡占用率是一个能反映负载的直观指标,AMD显卡可以通过安装radeontop软件查看。

-

radeontop界面

-

最上面是GPU管道使用,大概类似于总体使用率的东西;最下面是内存使用率,使用sudo权限能看到更多信息。其他项目可以到radeontop的Github页面查看。

-

3、温度 -

特指GPU温度。查阅这篇文章所涉及的知识点的最初目的,也是确认机箱过热是否是GPU的问题。

-

GPU温度使用第三方软件查看,并使其实时更新。查看温度使用sensors指令,通过安装lm-sensors实现。执行sensors时只会显示一次,我们可以利用watch指令定时刷新温度显示:

-
- -
watch -n 2 sensors
-# 每隔2秒执行sensors指令显示结果
- -
-
-

![watch执行结果](图片占位)

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210824-linuxtouchscreenfin/index.html b/public/posts/210824-linuxtouchscreenfin/index.html deleted file mode 100644 index d987ae9..0000000 --- a/public/posts/210824-linuxtouchscreenfin/index.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - -Linux处理多触屏的终极解决方案 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux处理多触屏的终极解决方案
-
- - -
-

Linux处理多触屏的终极解决方案

- -
- -
2021/08/24·Kushidou
-
- -

一般Linux操作系统接入多个触摸屏的最终解!

-

21年3月中旬开始,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。

-

重要: 本文全文基于软件xinput

-

更重要: 如简介所说,仍有一种方法无法对应,具体为【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。

-

0、核心:xinput -

xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)

-
-

xinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级

-

xinput list –id-only : 仅仅列出设备ID(序号,每次开机都可能改变)

-

xinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕

-

xinput list-props : 列出某个设备的详细信息,后接参数为设备ID。

- -
-

1、简约:两个完全不同的触摸显示器 -

xinput map-to-output "$DEVICE NAME A" PORT-A

-

这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。

-

首先通过xinput查看所有的输入设备:

-
- -
~$ xinput
-┌ Virtual core pointer		id=2 [master pointer  (3)]
-|	ILITEK TLITEK-TP		id=9 [slave  pointer  (2)]
-|	ILITEK Multi-Touch		id=7 [slave  pointer  (2)]
-(下略)
- -
-
-

可以看到ILITEK ILITEK-TPILITEK Multi-Touch显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:

-

xinput map-to-output "ILITEK ILITEK-TP" HDMI-0

-

xinput map-to-output "ILITEK Multi-Touch" HDMI-1

-

这种方式的要点是1.必须带英文"",2.引号内名称须完整。map-to-output所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。

-

2、复杂但通用:VID:PID不同的显示器 -

不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。

-

通过xinput list-props [id]可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。list-props的结果示例如下:

-
- -
(后续再补)
- -
-
-

其中Device Product ID一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:

-
- -
#!/bin/bash
-# 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息:
-# 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段
-VIDA=222a
-PIDA=0001
-PORTA=VGA-0
-
-# 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行
-# 或者这里直接填写Device Product ID里面的结果,先VID后PID。
-# 字母O,不是数字0,多屏重复本段
-VIDA_O=$((16#$VIDA))
-PIDA_O=$((16#$PIDA))
-
-# =========自动处理步骤,请勿随意修改==========
-for I in $(xinput list --id-only)
-do
-# 根据设备ID取其序号
-    CUR_FIRST=$(xinput list-props $I|grep "Device Product ID"|awk -F : '{print $2}'|awk -F , '{print $1}'|awk '{print $1}')
-    CUR_SECOND=$(xinput list-props $I|grep "Device Product ID"|awk -F : '{print $2}'|awk -F , '{print $2}'|awk '{print $1}')
-# 3、屏映射,多屏重复本段
-    if [ "$VIDA_O" == "$CUR_FIRST" ] && [ "$PIDA_O" == "$CUR_SECOND" ];
-    then
-		  xinput map-to-output $I $PORTA
-    fi
-done
-exit 0
- -
-
-

这个脚本使用xinput list --id-only仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用map-to-output进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。

-

3、[2]的进阶版 -

前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。

-

在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是pyudev库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装python3+pyudev,并且使用desktop文件在开机时启动,即可。

-
- -
#!/usr/bin/python3
-# -- coding: UTF-8 --
-# -- Author: Blues --
-
-import pyudev
-import os
-
-context = pyudev.Context()
-monitor = pyudev.Monitor.from_netlink(context)
-monitor.filter_by(subsystem='hid')
-for device in iter(monitor.poll, None):
-    if device.driver != "hid-multitouch":
-        continue
-    if device.action == "add" or device.action == "change":
-        os.system("/var/my-touchscreen/remap-screen")
- -
-
-

上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照设备名、VID、UID、物理接口四大特征,自动映射到对应的显示屏上了。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210914-linuxbackupdd/index.html b/public/posts/210914-linuxbackupdd/index.html deleted file mode 100644 index 12a1394..0000000 --- a/public/posts/210914-linuxbackupdd/index.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - - -使用dd指令备份和恢复Linux系统(硬盘级) – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
使用dd指令备份和恢复Linux系统(硬盘级)
-
- - -
-

使用dd指令备份和恢复Linux系统(硬盘级)

- -
- -
2021/09/14·Kushidou
-
- -

害,谁不是个DD (誰でも 大好き)了呢!

-

但是这玩意儿太慢了。。。

-

起因 -

使用UOS的时候经常需要备份镜像并分享给其他部门或者办事处的人。传统的方法是进入系统自带的Recovery分区,打开备份软件制作镜像,但是这存在两个问题:A. 镜像特别巨大,系统多大镜像就占多大。B. 必须先拥有系统,才能恢复镜像。最新版的系统中已经去掉了Recovery分区,而LiveCD镜像还不是很好用,于是有了这篇博客,试图寻找一个简单的方法来进行恢复和备份。

-

DD说明 -

dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。

-

dd指令依然是有多少数据占多少空间,所以我们可以使用gzip进行压缩。具体代码后面贴出来。

-

实际使用中,发现dd指令除了方便,就没有其他优点了。它因为要读取硬盘所有数据(包括垃圾数据),即便用SSD,读盘速度还是会很慢,三刻钟才读了200GiB数据,平均75MB/s,而使用uos自带的deepin-clone,三个系统都备份完了。

-

DD备份 -

- -
dd if=/dev/sda of=/dev/sdb				=>    备份整个磁盘到另外一个磁盘
-dd if=/dev/sdb of=sda.img				=>    备份整个磁盘为某个文件
-dd if=/dev/sda | gzip > sda.img    		=>    备份并且压缩
-dd if=/dev/sda bs=1M | gzip > sda.img	=>    指定块大小,备份并压缩(据说能提速)
- -
-
-

DD复原 -

- -
dd if=/dev/sdb of=/dev/sda					=>从另一个磁盘恢复回来
-gzip -dc sda.img | dd of=/dev/sda			=>从压缩的文件恢复出来
-gzip -dc sda.img | dd of=/dev/sda bs=1M		=>前面指定了块大小,这里也需要
- -
-
-

参考: -

本文参考(抄)了以下内容:

-

Linux 下使用 dd 和 gzip 命令来代替 Ghost 做磁盘镜像

-

linux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)

-

还有一些查找过程中作用不大的页面,就不贴出来了(诶嘿(╹ڡ╹ )

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210914-mdadm/index.html b/public/posts/210914-mdadm/index.html deleted file mode 100644 index a41d640..0000000 --- a/public/posts/210914-mdadm/index.html +++ /dev/null @@ -1,687 +0,0 @@ - - - - - - - -Linux恢复操作系统后mdadm导致开机变慢的方法 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux恢复操作系统后mdadm导致开机变慢的方法
-
- - -
-

Linux恢复操作系统后mdadm导致开机变慢的方法

- -
- -
2021/09/14·Kushidou
-
- -

解决Linux系统异地恢复后开机mdadm报错导致开机时间变长。

-

现象 -

使用deepin-clone恢复UOS镜像后,开机会不断跳一条日志:

-
- -
mdadm: no arrays found in config file or automatically
- -
-
-

大概蹦个15条后,系统才真正开机。mdadm好像是一个磁盘raid管理工具,当磁盘变化后其配置也不适配了,必须等到超时才会加载默认配置。那么我们就为其生成一个新的配置即可解决问题。

-

方案 -

步骤一:删除mdadm.conf

-
- -
sudo rm /etc/mdadm/mdadm.conf
- -
-
-

步骤二:生成新的mdadm.conf

-
- -
sudo update-initramfs  -u
- -
-
-

ps:如果是swap分区问题导致等待90s开机慢,不归这儿管。

-

从这儿抄的: -

W: mdadm: no arrays found in config file or automatically导致开机变慢的解决方案(deepin)

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/210928-rpm_package/index.html b/public/posts/210928-rpm_package/index.html deleted file mode 100644 index f9ca54a..0000000 --- a/public/posts/210928-rpm_package/index.html +++ /dev/null @@ -1,601 +0,0 @@ - - - - - - - -RPM安装包制作方法 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
RPM安装包制作方法
-
- - -
-

RPM安装包制作方法

- -
- -
2021/09/28·Kushidou
-
- -

Linux如Centos使用的RPM打包方法。本文仅涉及二进制打包,且采用取巧的方法简化操作。(笔记,而非教程)

-

正文开始

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/211019-dpkg_package_guide/index.html b/public/posts/211019-dpkg_package_guide/index.html deleted file mode 100644 index 35dcfa4..0000000 --- a/public/posts/211019-dpkg_package_guide/index.html +++ /dev/null @@ -1,759 +0,0 @@ - - - - - - - -DEB打包方法简介 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
DEB打包方法简介
-
- - -
-

DEB打包方法简介

- -
- -
2021/10/19·Kushidou
-
- -

简单介绍deb打包的方法,包括目录树格式和打包注意事项。

-

文件结构 -

首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录/。一个工作空间的目录树如下:

-
- -
  PackageDIR
-	├─DEBIAN
-    ├─opt
-    │  └─kushidou-touchscreen
-    │      └─desktops
-    ├─usr
-    │  ├─bin
-    │  └─share
-    └─var
- -
-
-

其中,DEBIAN目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。

-

DEBIAN -

DEBIAN目录下有一个control文件和至多四个脚本文件。

-

control -

control文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NAMEDescription
Package软件名,dpkg -l 列出的名字
Version版本号-修订号
Section软件类型,比如mail, test, x11等
Priority优先级/重要性,比如optional 可选的
Architecture软件架构,比如x86, arm64
Depends依赖环境,用 , 隔开,用(>=< )指定版本号
Suggests推荐安装,指非必要依赖,可以提供更多功能
Maintainer作者 <邮箱或者其他联系方式>
Descritprion简介,可以换行书写
-

image-20211019094048011

-

额外脚本 -

DEBIAN目录下之多放置四个可执行脚本,包括安装前preinst安装后postinst卸载前prerm卸载前postrm,四个脚本都需要以#!/bin/bash开头,内容与普通脚本无异,文件名不需要后缀。

-

这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以root身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。

-

此外postinst可以用来启动已安装的程序,prerm常用来停止正在运行的程序。

-

md5sums -

为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。

-

打包 -

所有文件配置完成后,进入工作空间上级目录,执行指令

-
- -
dpkg -b ./PackageDIR packagename.deb
- -
-
-

deb包命名的一般规则为 软件名_版本-修订号_架构.deb

-

其他信息 -

一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/211115-fixnasdriver/index.html b/public/posts/211115-fixnasdriver/index.html deleted file mode 100644 index 3293555..0000000 --- a/public/posts/211115-fixnasdriver/index.html +++ /dev/null @@ -1,751 +0,0 @@ - - - - - - - -记一次拯救NAS硬盘 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
记一次拯救NAS硬盘
-
- - -
-

记一次拯救NAS硬盘

- -
- -
2021/11/15·Kushidou
-
- -

更新家里的NAS,手滑把原来NAS硬盘的分区信息删掉了。如何拯救盘里的数据?

-

图片稍后补充。

-

v 0 起因 -

双十一买了两块新的4T紫盘,打算升级一下家里的黑群晖。原来黑群晖是用一台N手工控机+1TB希捷笔记本硬盘(看缓存和速度肯定是SMR盘了),数据安全几乎为0.

-

考虑到小工控机的电源带不动那么多硬盘,机箱也没有空间,就把家里闲置的i3台式机整了过来,拆掉原来的硬盘装上紫盘组新nas了。顺手拆了一个捡来的监控机上的1TB西数紫盘。

-

为了节约迁移系统和数据的时间,我打算拿两个sata易驱线,用DiskGenuies进行克隆。后来网上冲浪发现群晖系统是认硬盘SN的,也就是说我克隆的数据没有一丁点用,加上手头上没有2.5转3.5的转接件,就考虑把笔记本盘放回老nas,然后直接拷贝或者备份到新nas。

-

v-1 杯具 -

当我按下取消的时候,惨剧发生了。其实整盘克隆的时候,DG会删除所有分区,克隆完了再重建分区。我取消克隆,然后退出DG。它提示我是否保存分区更改,我以为是1T紫盘的分区,顺手点了个否。当我重启DG的时候,发现希捷笔记本盘只剩一条灰色,未分区的区域。

-

v-2 尝试 -

DG有个功能是搜索重建分区表,我第一时间进行搜索。此时还没有网盘内写入任何内容,也没有格式化。数据应该是都在的,只要按照原来的样子重新分区应该就能重新读写数据了。

-

为什么不手动分区?因为群晖会在硬盘上先建立一个系统分区,然后建立swap分区,空一段空间后再建立数据分区。每个分区开始和结束的位置都是未知的,网络上也没有可以参考的内容。

-

经过一个多小时的搜索,除了第一个2.4GB的系统分区被找到以外,一无所获。我怀疑是不是我期间制作黑裙启动盘影响了,又搜索了一遍,好家伙还是没有。

-

搜索期间网上冲浪找前人的肩膀,结果他们要么是分区没被删直接装Windows下btrfs驱动(gitee开源)读取(群晖坏了),要么是DG轻松搜出全部分区(和群晖无关)。我还尝试查找丢失文件,依然一无所获。

-

难道就这么放弃了么?

-

v 1 曙光 -

群晖使用的BTRFS格式不是什么群晖专用格式,而是SUN(Oracle收购)开发的新一代文件系统,针对ext3/4进行优化升级。所以比较新的Linux系统都支持使用这个格式;装个驱动也能轻易读取。

-

我本来笔记本是有Deepin系统的,上次win10损毁了我就格掉装了win11。后来想起来我还有块树莓派正跑着linux系统。但是没有分区的硬盘上了Linux也啥都读不到。恰好这时候新nas的系统已经起来了,1T紫盘上的独立分区也建立好了。两款空间一样的盘,同样版本的群晖系统,建立一样的存储空间后,那不就是连分区也一模一样了么?!

-

开搞,ssh连上群晖,用sudo blkid看到硬盘实际的分区信息,它正好是显示的扇区起止、大小。打开DG,手动分区,按照群晖的磨样给小硬盘手动分区。DG不支持btrfs分区,那我随便挂一个ext4吧。分区过程和保存的时候,千万不要格式化了。

-

把小硬盘用易驱线连上树莓派,lsblk看到这个硬盘有三个分区,其中/dev/sda3下面还有一个md127,不知道是啥,查看发现是raid。群晖的数据区,哪怕是单盘basic也是以raid方式存在的,方便以后升级raid模式吧大概。也就是说,虽然我分区表是瞎分的,Linux还是能够正确读取到原来的分区和文件系统。

-

v 2 得到数据 -

安装mdadm软件包,我的树莓派不带这个,然后就能挂载raid盘了。

-
- -
sudo mount /dev/md127 ~/disk
- -
-
-

disk目录提前建立好了,把机械盘挂载上去,cd到目录里,然后我就发现了新世界的大门。盘里有个NasData目录,这正是我当时保存文件的地方。cd进去,在!都还在!

-

v 3 移动数据 -

我打算直接把就数据拷贝到新NAS里去了,烤到移动硬盘再复制到nas大费周章的。

-

在NAS里的主共享文件夹启动NFS服务,映射为root,允许所有来源的读写,然后到树莓派中挂载nfs

-
- -
sudo mount -t nfs 10.x.x.x:/volume2/NasData ~/Nasdata
- -
-
-

主目录下提前建立Nasdata目录,挂载完成后新Nas的内容也都出现了。不想一个个复制文件,CP指令不支持排除不想要的文件(毕竟还有部分文件依然保存在移动硬盘和笔记本里,树莓派只支持2.4GHz的wifi太慢),最终我选择了rsync指令进行“本地复制”。

-
- -
rsync -vrultD --exclude '文件名' --exclude '目录名' ~/disk/NasData/* ~/Nasdata/临时目录
-# -v 详细输出 -r 递归拷贝(保留目录结构) -u 仅更新,防止中断再开后重新拷贝 -l 保留软连接 -t 保留时间信息 -D 保持设备文件信息
-# 不用-a 是因为对拷过去的文件赋权限时疯狂报错失败
- -
-
-

经历树莓派三次死机两次中断后,我终于抢救了500G数据中的50G(另外450包括百度云同步、移动硬盘依然保存着的动漫视频等)。

-

v 4 结论 -

现在数据和小姐姐们都住在一个raid1备份的空间中,应该轻易不会发生无家可归的情况了。

-

这次事件完全是我自己作死,群晖其实提供了备份功能,可以完整的把数据、部分设置乃至我的Docker容器都完整备份到新NAS里(只要两台都在线),而且树莓派的wifi只有5MiB/s,比起家里千兆的内网,速度慢了数十倍,时间也花了我整整一下午。

-

总之硬盘出了事故不要慌,只要不是物理损坏,都有机会修复。除了事故后第一时间就要停止读写,更不要格式化,先尝试重建分区表,失败了换个系统试试。说不定我不重建,放到Linux上也能看到正常的三个分区呢?

-

image-20211115095410121

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/211203-linuxchangeusername/index.html b/public/posts/211203-linuxchangeusername/index.html deleted file mode 100644 index aa65903..0000000 --- a/public/posts/211203-linuxchangeusername/index.html +++ /dev/null @@ -1,706 +0,0 @@ - - - - - - - -在Linux环境下修改用户名和主目录 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
在Linux环境下修改用户名和主目录
-
- - -
-

在Linux环境下修改用户名和主目录

- -
- -
2021/12/03·Kushidou
-
- -

如何在Linux下完整修改当前用户名和主目录,还不影响其他文件?

-

Linux的用户名是一个用户的字符串表示,是可以修改的。只要用户的id不改变就不会被系统认作新用户,所有的权限都可以继承。下面介绍如何修改用户的名称、所属组,并更改主目录的名称与对应关系。

-

一、进入“单用户模式” -

为了修改用户名时不影响程序运行,需要把当前用户打开的所有程序都关闭。该方法可以快速注销当前用户。

-
- -
init  1
-执行后输入当前用户密码
-进入黑屏终端后需要输入root密码,可以使用sudo passwd 提前设置
- -
-
-

对于屏蔽init指令的系统,一般情况下注销用户就可以了,但是有些GUI桌面环境就是以当前用户的身份运行的,所以提供如下几个方式关闭当前用户,挨个尝试即可。

-
- -
# 1 桌面环境中点击注销
-
-# 2 杀掉当前用户所有进程
-pkill -kill -u old_name
-# 3 杀掉进程后可能桌面重启,关闭Lightdm管理器
-#     Ctrl + Alt + F2 进入第二页面,以root用户登录(可能需要提前设置root密码)
-systemctl stop lightdm
-#     然后再次执行第二步
- -
-
-

二、修改信息 -

init 0可以直接进入黑屏的终端,或者使用 ctrl + alt + f2进入(远程连接可以),以root用户登录。

-
- -
# 1 修改组的名称
-groupmod -n new_name old_name
-# 2 修改用户名    -l 改名字  -d 改目录  -g 改组
-usermod -l new_name -d /home/new_name -g new_name old_name
-# 3 修改主目录
-mv /home/old_name /home/new_name
- -
-
-

最后回到图形化界面,输入init 5 ,或者重启电脑。

-

修改完主目录后记得检查是不是有其他软连接指向旧目录,需要进行更新,否则还会遇到问题。

-

参考: -

# linux用户家目录怎么修改,Linux 更改用户名,用户组和主目录

-

# 菜鸟教程-usermod指令

-

# linux组的管理:修改组名字,删除组,使用sudo权限

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/220104-diylinuxiso/index.html b/public/posts/220104-diylinuxiso/index.html deleted file mode 100644 index 7286c0b..0000000 --- a/public/posts/220104-diylinuxiso/index.html +++ /dev/null @@ -1,696 +0,0 @@ - - - - - - - -定制自己的Linux ISO镜像 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
定制自己的Linux ISO镜像
-
- - -
-

定制自己的Linux ISO镜像

- -
- -
2022/01/04·Kushidou
-
- -

想要在原版的Linux镜像上添加自定义的软件,但是不想、不会编译,那么就可以基于Linux的iso文件进行修改,定制自己的安装试用镜像。

-

起因是因为对付信创操作系统的备份恢复时,UOS、麒麟自带的工具都超级不好用,两个系统的镜像不统一,导致实际使用的时候各种问题和不方便。所以使用clonezilla再生龙工具自己做一个PE镜像。这个镜像不仅可以备份、安装系统,还能够修改硬盘大小、应急拯救系统等多种功能。并且它是一个完整的系统可以安装使用。

-

基本计划 -

之前尝试过使用deepin魔改lub工具制作系统的完整镜像,但是启动总是失败。LUB全称是Live Ubuntu Backup,是Ubuntu的一个工具,到了同为Debian系的deepin魔改的UOS上就水土不服了。(好绕,套娃呢搁这儿

-

所以采取另一种办法,用已有的Linux iso,通过解压其系统文件filesystem.squashfs,然后替换关键文件,最后实现自定义系统。

-

解压、修改、打包Linux文件系统 -

首先把Linux iso挂载到系统中。把里面的filesystem.squashfs文件复制出来(因为iso是只读的,复制出来后也方便管理和备份)。我这里以UOS1040为例,其文件系统在./live目录下

-
- -
sudo mount -o loop /xxx/xxx.iso  /media/usrname/isofolder
-cd /media/usrname/isofolder/live/
-cp ./filesystem.squashfs ~
- -
-
-

安装squashfs-tools工具,用来压缩解压归档文件。

-
- -
sudo apt install squashfs-tools
-#回到主目录后,解压filesystem.squashfs文件
-sudo unsquashfs filesystem.squashfs
- -
-
-

解压后可以看到主目录多一个squashfs-root目录,里面存放的就是一个Linux的文件系统了。这时候把你需要的文件拷贝进去,比如我替换了/usr、/opt、/etc三个目录,这三个目录保存了我安装的clonezilla应用及其配置程序,以及我编写的辅助脚本和自启动脚本。

-

修改好了就可以打包了。第一个参数是刚刚解压出来修改好的文件系统,第二个参数是输出的名称。建议把之前拷贝出来的squashfs文件改名进行保存。

-
- -
sudo mksquashfs squashfs-root/ filesystem.squashfs
- -
-
-

重建Linux iso -

最后我们需要重建ISO文件。由于我们是基于原来的ISO修改的,所以只需要替换iso里面的filesystem.squashfs文件即可。否则还需要更换系统内核img/lz、重写引导。

-

把新生成的filesystem.squashfs文件拷贝到Windows系统里,打开UltraISO软件,直接替换Live目录下的filesystem.squashfs文件。同时我们也可以修改EFI/grub.cfg文件,毕竟这个系统主要是使用而不是安装。我调换了安装和试用的次序,并把等待时间增加到60s。

-

最后进行修改ISO名称等小操作,保存为ISO文件就可以了。

-

新生成的ISO文件既可以用rufus等工具烧录到U盘中制作PE盘,也可以试用ventoy工具制作成多系统启动盘,甚至可以烧录一张光盘来使用。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/220223-deepin_partsinddefilemanager/index.html b/public/posts/220223-deepin_partsinddefilemanager/index.html deleted file mode 100644 index 3ae8ab7..0000000 --- a/public/posts/220223-deepin_partsinddefilemanager/index.html +++ /dev/null @@ -1,681 +0,0 @@ - - - - - - - -Deepin/UOS文件管理器隐藏不需要的盘符 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Deepin/UOS文件管理器隐藏不需要的盘符
-
- - -
-

Deepin/UOS文件管理器隐藏不需要的盘符

- -
- -
2022/02/23·Kushidou
-
- -

Deepin/UOS 里处理文件管理器显示太多盘符的问题。

-

现象 -

在使用UOS操作系统时,有时候打开文件管理器,发现除了平常常见的“系统盘”、“数据盘”外,出现了更多的盘符(不属于移动u盘)。在/etc/fstab文件添加或删除“”并没有效果。

-

image-20220223090517363

-

原理/原因 -

这是因为系统/etc/udev/rules.d文件夹做了非法修改。有些人盲目替换了文件夹文件,导致配置文件变化,系统无法正确执行隐藏操作。

-

处理方法 -

    -
  1. -

    打开/etc/udev/rules.d目录,查看是否有一个《80-udisks2.rules》文件。如果该文件不存在,请创建。

    -
  2. -
  3. -

    打开终端,使用root权限打开编辑

    -
  4. -
-
- -
sudo deepin-editor /etc/udev/rules.d/80-udisk2.rules
- -
-
-
    -
  1. -

    打开新的终端,输入执行 blkid -f ,记录LABLE、UUID两列

    -

    截图录屏_选择区域_20220223090208

    -
  2. -
  3. -

    对比80-udisks2.rules的内容,将里面的ENV{ID_FS_UUID}后面引号中内容换成第3步中显示的新的UUID。

    -

    (#号后面内容即为盘符,对应3中的LABEL,双等号后面就是UUID,四行都需要替换)

    -

    截图录屏_选择区域_20220223090606

    -
  4. -
  5. -

    保存文件并重启计算机,即可看到效果。

    -
  6. -
  7. -

    该方法对Deepin系统也有效。对于其他使用了dde-file-manager的应该也是有作用的。

    -
  8. -
-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/220714-unpackclonezillaimage/index.html b/public/posts/220714-unpackclonezillaimage/index.html deleted file mode 100644 index 00a42ba..0000000 --- a/public/posts/220714-unpackclonezillaimage/index.html +++ /dev/null @@ -1,708 +0,0 @@ - - - - - - - -从再生龙(clonezilla)镜像直接提取文件 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
从再生龙(clonezilla)镜像直接提取文件
-
- - -
-

从再生龙(clonezilla)镜像直接提取文件

- -
- -
2022/07/14·Kushidou
-
- -

从clonezilla的镜像直接提取文件,免于先全盘全区恢复。

-

再生龙(clonezilla)是一个常用的Linux系统备份工具,适用于多个版本、多种CPU架构的电脑。

-

再生龙生成的镜像是比较特殊的格式,如果想要从里面提取文件,通常只能进行镜像恢复后进入系统提取。但是往往我们没有那么多硬盘来恢复系统。

-

再生龙的原理简单来说就是把硬盘分区使用partclone工具打包成img文件,然后使用gzip进行分卷压缩。我们只需要逆向操作,利用工具,把镜像解包挂载,直接在当前系统挂载,就可以得到原分区的文件了。

-

挂载方法: -

1. 环境需求 -

我们操作再生龙镜像时,最好是使用Linux环境。这个环境中,需要安装partclone(也就是再生龙生成镜像的核心工具)。

-
- -
sudo apt install partclone
-# 以Debian系为例
- -
-
-

并且我们需要准备一个足够大的硬盘,用来存储镜像包和解包出的img文件。硬盘/分区的空间需要大于镜像本来的分区空间。

-

2. 合并镜像 -

再生龙默认情况下会把一个硬盘分区分按4GB的大小进行分包,通常以gz.aagz.ab等结尾,我们需要把这些包重新整合成一个gz包。

-

整合成gz包后,我们就可以解压gz来得到镜像img了。我们可以把两个步骤用流的方式写入一条命令,节省硬盘空间。

-
- -
cat sda1.ext4-ptcl-img.gz.* | gzip -d -c > sda1.img
- -
-
-

这一步生成的img文件不能直接使用(google上也有说能用的,但是我试下来不能),需要进行一次转换。经过实际操作,这个文件所占用的空间是镜像原分区的大小,但是统计硬盘使用量时却只计算实际大小,希望了解的人可以帮忙解释一下。

-
- -
partclone.extfs -r -s sda1.img -o sda1-ex.img --restore_raw_file
- -
-
-

当然上面两条指令也可以使用流的方式再次封装到一条,但是消耗的时间、失败后重新来过的时间,都会更长。

-

3.挂载镜像 -

将最后生成的img镜像挂载到我们的/mnt(或其他)目录,进入这个目录就可以看到原来全部的文件了。

-
- -
sudo mount -o loop -t ext4 sda1-ex.img /mnt
- -
-
-

最后我们只需要进入 /mnt 目录,就可以想直接操作硬盘一样把文件复制出来了。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/230508-remake-deb/index.html b/public/posts/230508-remake-deb/index.html deleted file mode 100644 index 40ff41c..0000000 --- a/public/posts/230508-remake-deb/index.html +++ /dev/null @@ -1,682 +0,0 @@ - - - - - - - -讨论在Debian系操作系统中重新提取已安装的软件并重新打包 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
讨论在Debian系操作系统中重新提取已安装的软件并重新打包
-
- - -
-

讨论在Debian系操作系统中重新提取已安装的软件并重新打包

- -
- -
2023/05/08·Kushidou
-
- -

Debian系操作系统采用dpkg作为包管理器,在安装软件后会存储deb包信息,是否可以提取这些信息并且重新打deb包转移到其他平台使用?

-

之前有一个需求,要从UOS里面提取一个软件,并且将其安装到另一台设备中。当时找了一圈都没有找到相关的提取教程。但是从逻辑上来讲,dpkg安装的软件会保存deb包的相关信息,所以理论上讲是可以提取出软件包的所有内容,然后我们重新打包的。

-

今天在一个机缘巧合下(其实是懒得研究dpkg原理,瞎猫撞上死耗子),发现了dpkg保存文件信息的地点,于是接下来可以展开畅想:提取已经安装的软件并重新打包。

-

文件的保存地点 -

我在找fcitx有关的配置文件进行全盘搜索的时候,找到了一条目录/usr/lib/dpkg-db/info,这个目录里面保留了fcitx的"conffiles", “md5sums”, “postinst”, “prerm"四个文件,以及一个list文件。恰好fcitx.deb解包出来的DEBIAN文件夹内也是这四个文件加上额外的control文件,。

-

那么合理猜测,dpkg安装软件的时候,不仅把软件本身的文件移动到对应位置,还把DEBIAN里面的信息和脚本也转移到/usr/lib/dpkg-db/里面保存了。

-

fcitx.list文件中记录的是所有的文件及其路径。想必这里面就是全部的文件了。

-

至于control文件,则都被保存到了/usr/lib/dpkg-db/status这个文本文件中。

-

流程设想 -

既然deb包所有必要的文件都找到了,那么就可以尝试一下还原过程了。在这篇文章里我研究过deb包的组成、格式和打包方法。

-

比如对于软件包A:

-
    -
  1. -

    创建一个工作目录,并在其中新建DEBIAN目录。

    -
  2. -
  3. -

    /usr/lib/dpkg-db/info中所有该软件的脚本和信息(除了A.list)转移到DEBIAN中,并重命名成规范名称。

    -
  4. -
  5. -

    /usr/lib/dpkg-db/status中与软件A有关的部分提取出来,保存到DEBIAN/control文件中。

    -
  6. -
  7. -

    根据A.list文件,找到软件包含的所有文件,将其按原样整理到工作目录内。

    -
  8. -
  9. -

    使用dpkg -b指令重新打包。

    -
  10. -
-

局限性 -

以上毕竟只是设想,没有进行试验,所以估计会出现这些问题,希望有需要的人尝试后可以解决。

-
    -
  • -

    提取信息的难度: 由于/usr/lib/dpkg-db/status文件是一个包含几乎所有deb信息的文本文件,体积大内容乱,对于自动化脚本来说有些难度。加上一些软件的衍生品会在软件名上直接加后缀,对于提取的脚本来讲可能造成混淆,提取出不必要的东西。

    -
  • -
  • -

    获取源文件的难度: 不排除一些软件安装时会删除、修改自身的一些文件,可能打包会后会缺失内容。一些软件安装过程中会进行手动配置从而造成内容改变,重做出来的软件包不一定完整。

    -
  • -
  • -

    签名问题: 我们打包的软件没有原作者的数字签名,可能无法安装,也可能时候安装官方软件时冲突。

    -
  • -
  • -

    这个方案只能处理普通的软件,一些deb打包源码,安装时进行编译的,应该是不能用这种方案复原的。(apt的deb-src源)

    -
  • -
-

最后,希望有大佬可以验证一下这个方案。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/230908-py-post/index.html b/public/posts/230908-py-post/index.html deleted file mode 100644 index 9f5c372..0000000 --- a/public/posts/230908-py-post/index.html +++ /dev/null @@ -1,740 +0,0 @@ - - - - - - - -Python socket 收取POST协议内容时没有payload – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Python socket 收取POST协议内容时没有payload
-
- - -
-

Python socket 收取POST协议内容时没有payload

- -
- -
2023/09/08·Kushidou
-
- -

使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况

-

最近做了一个简单的http服务器,用于接收IoT端上传的json格式的日志。

-

服务端使用socket中的方法接收原始数据,再对原始数据单独进行处理,根据报文头部的GET或者POST等方法进行具体的操作。

-
- -
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-sock.bind((self.host, self.port))
-sock.listen(128)
-
-(client, address) = self.sock.accept()
-th = Thread(target=self.accept_request, args=(client, address))
-
-def accept_request(client, address):
-	data = client_sock.recv(8192)
-	req = data.decode("utf-8")
-	# 处理数据的具体方法
-    response = process_response(req, client_addr)
-    client_sock.send(response)
- 
-    # clean up
-    client_sock.shutdown(1)
-    client_sock.close()
- -
-
-

上面的代码是大概的处理流程。在这个流程中,我发现处理POST的数据的时候,经常只能收到headers部分,payload部分的数据不管发几次都是空的。而且接收缓冲区已经扩大到了8192字节,headers部分的长度只有200多字节,IoT端上传的payload也不过上百字节,不应该是超出缓冲区的问题。

-

=====2024.01.04更新=======

-

下面的方法突然某一天就失效了,我不清楚是不是python的环境变化导致的。

-

其实用flask接收和处理数据会更加方便快捷:

-
- -
from flask import Flask, request
-
-# 实例化flask
-app = Flask(__name__)
-
-# 接收和处理post的方法
-@app.route('/test', methods=['POST'])
-def recv_file_www():
-    # post的传入参数
-    print(request.args.to_dict())
-    # post所承载的数据
-    print(request.data)
-    return 'OK'
-    
-if __name__ == '__main__':
-    app.run(port=31408, host="0.0.0.0",debug=True)
- -
-
-

上面就是一个完整的post接收和处理程序了,不需要调试socket,也不需要自己处理ResponseBuilder,最重要的是能保证获取到post数据。

-

======以下是原来的内容==========

-

经过网上搜索与自己尝试,发现socket.recv返回的时候是分段返回的,貌似会按照实际内容切割返回,必须不断的recv才能完整接收数据。有一种解决方案是POST传送之前先确定报文的完整擦换个年度,然后利用while循环,接收到对应长度才结束。

-

但是POST发送的一个不定长的数据,如果每次都通过http报文先传送post完整长度的话,有些浪费资源。于是我想到了这么一个方案:

-

POST的报文头会包含一个Content-length的数据,记录的是payload的长度。那我在接收阶段就对headers部分进行解码和处理,获取到content-length后,在加上本次获取headers的长度就是POST的完整长度了。

-

那么将上面代码的client_sock.recv()部分改写成下面的方法:

-
- -
def recv(self, client_sock):
-    lrecved = 8192          # 记录每次接收的长度
-    lrecv_all=0             # 记录数据总长度 
-    data_body = bytes()     # 接收的所有数据存入这里
-    payload_len = 0         # 解析的payload长度
-    payload_flag = 0        # 用于记录是否接收到了payload,以及实时记录接收到payload的长度
-    while True :
-        part_body= client_sock.recv(8192)   # 循环接收数据
-        data_body +=  part_body             # 将接收的数据写入data_body
-        lrecved = len(part_body)            # 获取本次接收长度
-        lrecv_all += lrecved                # 计算总长度
-
-        if payload_flag == 0:               # 没有接收到payload部分时,才进入下面的判断流程
-            if data_body[0:3].decode() == 'GET':    # 由于我get方法没出现过断开的问题,因此直接返回即可。
-                break
-            elif data_body[0:4].decode() == 'POST':
-                payload_len = count_payload_len(data_body)      # 解析头部,计算payload部分的长度
-
-                if lrecved < payload_len: 
-                # 偶尔会出现能接收到payload的情况,所以多加了一个判断。
-                # 能接收payload肯定总长度大于payload_len的
-                    print("no payloads, keep recving...")
-                    # 计算post报文的总长度,借用payload_flag变量
-                    payload_flag = lrecved + payload_len
-        # 当接收到的总长度 >= POST的计算长度,表示所有数据接收完成,退出
-        if payload_flag <= lrecv_all:
-            break
-                 
-    return data_body
- -
-
-

里面解析headers的代码如下:

-
- -
def count_payload_len(data):
-    for d in data.split(b'\r\n'):                   # 通过\r\n来分隔报文头
-        if "LENGTH" in d.upper().decode():          # 如果报文头部有length关键词,当然可以写完整,我的heasers没有其他的length就简化了
-            return int(d.decode().split(":")[1])    # 分隔出payload长度并返回
-    return 0
- -
-
-

上面的代码其实写的很复杂,因为我解析POST整体报文的功能已经写完并且通过第三方http报文调试工具验证过了,上IoT设备实验的时候才发现了问题,本着少改一点是一点的原则,就把这一部分复杂化了,但确实解决了我的问题,就OK了。

-

对了,这篇博客就是利用这个这个方案改造的新服务端进行上传同步的,之前用GitHub Actions进行同步博客,每次运营商都会发一条高危访问的短信和邮件通知我,太烦了。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/231127-vncserver/index.html b/public/posts/231127-vncserver/index.html deleted file mode 100644 index 04370e0..0000000 --- a/public/posts/231127-vncserver/index.html +++ /dev/null @@ -1,695 +0,0 @@ - - - - - - - -Linux安装VNC服务端 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
Linux安装VNC服务端
-
- - -
-

Linux安装VNC服务端

- -
- -
2023/11/27·Kushidou
-
- -

(笔记)在Linux系统里安装远程桌面VNC客户端并连接。

-

1. 安装NVC服务端 -

- -
sudo apt install x11vnc
- -
-
-

2. 设置远程连接密码 -

- -
x11vnc  --storepasswd
-# 输入两次连接密码以设定
-# 询问 Write password to /home/xxx/.vnc/passwd 
-# 时,输入y并回车保存密码。
- -
-
-
    -
  • 该步骤不需要使用sudo!
  • -
-

3. 使VNC服务开机自启动 -

使用service的方法,将vnc作为一个服务开机启动

-

创建/lib/systemd/system/x11vnc.service文件并填入下面的内容

-
- -
[Unit]
-Description=Start x11vnc at startup.
-After=multi-user.target
-[Service]
-Type=simple
-ExecStart=/usr/bin/x11vnc -auth guess -rfbauth /home/xxx/.vnc/passwd
-[Install]
-WantedBy=multi-user.target
- -
-
-
    -
  • 注意,/home/xxx 需要替换成实际的用户名!
  • -
-

使用vnc客户端连接 -

我使用Windows上的VncViewer,官网RealVNC,这个软件假冒的很多,下载需要注意甄别。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/231225-dockernote/index.html b/public/posts/231225-dockernote/index.html deleted file mode 100644 index 4e453f0..0000000 --- a/public/posts/231225-dockernote/index.html +++ /dev/null @@ -1,822 +0,0 @@ - - - - - - - -docker简单笔记 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
docker简单笔记
-
- - -
-

docker简单笔记

- -
- -
2023/12/25·Kushidou
-
- -

学习docker,使用docker,编写docker

-

前言 -

祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。

-

不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。

-

由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。

-

安装docker和docker compose -

虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。

-

apt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。

-
- -
# 添加docker官方的gpg
-curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
-# 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加
-echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
-# 我这边添加的结果是
-deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable
- -
-
-

然后可以通过apt源安装docker了

-
- -
sudo apt update
-sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- -
-
-

*注意,上面的指令同时安装了docker-compose。如果不安装docker,直接安装docker-compose也是可以的。

-
- -
wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
-sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose
- -
-
-

更加具体的步骤和细节可以到官网查看:docker安装docker-compose安装

-

docker 基本使用方法 -

使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。

-
- -
# 拉取一个镜像
-docker pull xxx/yyy
-# 创建容器并运行
-docker run --name aaa xxx/yyy
-# 停止容器
-docker stop docker-id
- -
-
-

关于运行容器,有很多常用的参数:

-
-

-d 容器转入后台运行

-

-e 设置容器的环境变量

-

–name 容器名称

-

-p 80:80 将暴露的端口映射到容器内端口,外部:内部

-

-v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内

-

-e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。

- -
-

停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。

-

查询容器id,可以使用指令docker ps。docker还有其他几个查询和控制指令

-
-

docker exec 容器 指令 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。

-

docker ps 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。

-

docker images 列出已经下载的镜像列表。与 docker image 指令不同。

-

docker kill 容器名/id 杀死一个无法stop的容器

-

docker rm 容器 删除一个容器

-

docker rmi 镜像名 删除一个镜像

-

docker restart 容器ID 重启一个容器,毕竟我们不需要每次都创建新容器。

- -
-

关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。

-

更换docker镜像源 -

和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。

-

修改/etc/docker/daemon.json文件,添加下面的内容:

-
- -
{
-    "registry-mirrors": [ 
-        "https://docker.mirrors.ustc.edu.cn" 
-    ]
-}
- -
-
-

编辑完成后需要重启docker服务。

-

具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。

-

docker-compose -

docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。

-

首先创建一个工作目录,并创建一个docker-compose.yml的文件,默认情况下docker compose指令只认这个文件名。

-
- -
version: '3'
-services:
-  [NAME1]:
-    image: "image/name"
-    ports:
-      - 81:80
-      - 8080:8080
-    environment:
-      HOSTNAME: "cc"
-      PORT: 8181
-    volumes:
-      - nginx-data:/etc/nginx
-  [NAME2]:
-    image: 'xxx'
- -
-
-

docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,ports字段指定了内外端口的映射,即’外部:内部’,卷映射同理。environment不需要 - 开头。

-

编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动

-
-

docker compose up 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。

-

docker compose down 停止容器,并删除对应的容器和网络

-

docker compose exec NAME command 在ymal文件内其中一个容器里运行指令

- -
-

docker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。

-

目前浅学了一下,只有学一点更新一点吧。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/about_hugo_website/index.html b/public/posts/about_hugo_website/index.html deleted file mode 100644 index 8e617b1..0000000 --- a/public/posts/about_hugo_website/index.html +++ /dev/null @@ -1,674 +0,0 @@ - - - - - - - -关于使用HUGO建立博客站点 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
- -
-
- Posts -
关于使用HUGO建立博客站点
-
- - -
-

关于使用HUGO建立博客站点

- -
- -
2021/03/23·Kushidou
-
- -

使用hugo建立本站的规划和记录。

-

关于使用HUGO建立博客

在经历了worldpress的性能消耗和慢速加载后,我现在决定换用hugo+caddy的建站模式。昨天已经完成了caddy2的基础设置,现在开始测试使用hugo。

-

hugo的安装与首次创建 -

安装使用chocolatey,一个windows下的仿apt、yum的软件包管理器。安装好chocolatey后,根据hugo官网的内容,choco install hugo -confirm安装基础的hugo(好处是不用再配置环境变量了)。

-

为hugo创建目录,进入后hugo site new website,hugo会自动建立它所需要的层级结构。

-

添加第一个页面,`hugo new xxx/xxx.md’,创建的内容会出现在content下,创建多级目录也适合将来归类。

-

编写文章 -

hugo的文章是基于markdown文档的,创建的文章会自动加入以下抬头

-
- -
---
-title: "$文章标题"
-date: $时间
-draft: true
----
- -
-
-

这个可以修改为json或ymal格式,理应可以添加更多项目,这个之后再研究。

-

主题/皮肤 -

主题放在themes下,我在知乎上找到了一个高赞且顺眼的,有哪些好看的Hugo主题? - 飞雪无情的回答 - 知乎,文章中附了github连接,那么我们直接git过来就完事了。

-

生成网站 -

文章+主题都有了,现在可以生成第一个网站了(虽然写这些字的时候,网站还没生成)。hugo就能直接产生网页,保存至public文件夹。hugo server可以启动一个服务器预览静态网页。

-
-
- 最后更新于
- -
- - - -
-
-
- - - - - - - - diff --git a/public/posts/assents/image-20220223090517363.png b/public/posts/assents/image-20220223090517363.png deleted file mode 100644 index fbd6283bc52da748808819397a9e7ed839265eb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119059 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

eR1UAP(&L#;idrI5W|Wygj$Zz)()tRXWGYhY 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 YKXd!w%^%bC7XSbN07*qoM6N<$g5=N2f&c&j diff --git a/public/posts/assents/截图录屏_选择区域_20220223090208.png b/public/posts/assents/截图录屏_选择区域_20220223090208.png deleted file mode 100644 index d85b9ff5cac29bccb5b268179042bec736539a10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48314 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 diff --git a/public/posts/assents/截图录屏_选择区域_20220223090606.png b/public/posts/assents/截图录屏_选择区域_20220223090606.png deleted file mode 100644 index bff1e57a6dc5b993ea75164146d9e656eea8a053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63904 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 F-vBy#LIwZ; diff --git a/public/posts/index.html b/public/posts/index.html deleted file mode 100644 index 56c4986..0000000 --- a/public/posts/index.html +++ /dev/null @@ -1,603 +0,0 @@ - - - - - - - -Posts – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容

- - -
- -
-
- - -
-

Posts

-
- - -
- -

Python socket 收取POST协议内容时没有payload

- -

使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况

-

- 2023/09/08 - - 修改于 2024/01/04 - -

-
-
- -

docker简单笔记

- -

学习docker,使用docker,编写docker

-

- 2023/12/25 - -

-
-
- -

Linux安装VNC服务端

- -

(笔记)在Linux系统里安装远程桌面VNC客户端并连接。

-

- 2023/11/27 - -

-
-
- -

讨论在Debian系操作系统中重新提取已安装的软件并重新打包

- -

Debian系操作系统采用dpkg作为包管理器,在安装软件后会存储deb包信息,是否可以提取这些信息并且重新打deb包转移到其他平台使用?

-

- 2023/05/08 - -

-
-
- -

从再生龙(clonezilla)镜像直接提取文件

- -

从clonezilla的镜像直接提取文件,免于先全盘全区恢复。

-

- 2022/07/14 - -

-
-
- -

Deepin/UOS文件管理器隐藏不需要的盘符

- -

处理UOS出现其他盘符的问题

-

- 2022/02/23 - -

-
-
- -

定制自己的Linux ISO镜像

- -

为已有的Linux ISO镜像添加自己的功能。

-

- 2022/01/04 - -

-
-
- -

在Linux环境下修改用户名和主目录

- -

如何在Linux下完整修改当前用户名和主目录,还不影响其他文件?

-

- 2021/12/03 - -

-
-
- -

记一次拯救NAS硬盘

- -

黑群晖拿下来的硬盘不小心删除分区后进行数据拯救。

-

- 2021/11/15 - -

-
-
- -

DEB打包方法简介

- -

Debian系Linux,如ubuntu, deepin等系统的deb打包教程

-

- 2021/10/19 - -

-
-
-
-
-
- - - - - - - diff --git a/public/posts/index.xml b/public/posts/index.xml deleted file mode 100644 index fedd227..0000000 --- a/public/posts/index.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - 香风家的火柴盒 – Posts - https://www.small09.top/posts/ - Recent content in Posts on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 25 Dec 2023 09:06:25 +0800 - - - - - - - - - - - diff --git a/public/posts/page/1/index.html b/public/posts/page/1/index.html deleted file mode 100644 index fff8ac8..0000000 --- a/public/posts/page/1/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - https://www.small09.top/posts/ - - - - - diff --git a/public/posts/page/2/index.html b/public/posts/page/2/index.html deleted file mode 100644 index b208fea..0000000 --- a/public/posts/page/2/index.html +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - - -Posts – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- -
-
- - -
-

Posts

-
- - -
- -

RPM安装包制作方法

- -

制作一个rpm安装包。

-

- 2021/09/28 - -

-
-
- -

Linux恢复操作系统后mdadm导致开机变慢的方法

- -

mdadm no arrays found in config file or automatically

-

- 2021/09/14 - -

-
-
- -

使用dd指令备份和恢复Linux系统(硬盘级)

- -

Backup Linux with dd command.

-

- 2021/09/14 - -

-
-
- -

Linux多显示器触屏调试与暂行解决方案

- -

Linux with multi touch screen

-

- 2021/03/11 - - 修改于 2021/09/14 - -

-
-
- -

deepin和UOS,快捷方式,开机自启动

- -

修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。

-

- 2021/04/29 - - 修改于 2021/09/14 - -

-
-
- -

Linux处理多触屏的终极解决方案

- -

Linux with mutli touch screen

-

- 2021/08/24 - - 修改于 2021/09/14 - -

-
-
- -

Linux中获得AMD显卡的状态信息

- -

在Linux下获得AMD GPU的状态和温度信息。

-

- 2021/07/19 - -

-
-
- -

免密码使用sudo

- -

记录一种可以免密码使用sudo的方法。

-

- 2021/06/30 - - 修改于 2021/07/13 - -

-
-
- -

关于使用HUGO建立博客站点

- -

使用hugo建立本站的规划和记录。

-

- 2021/03/23 - - 修改于 2021/05/24 - -

-
-
- -

Linux启用四个以上的串口

- -

工控板安装Linux常常最多只能看到四个串口,通过修改引导文件可以显示所有的串口。

-

- 2021/04/20 - -

-
-
-
-
-
- - - - - - - diff --git a/public/posts/page/3/index.html b/public/posts/page/3/index.html deleted file mode 100644 index fb4dc18..0000000 --- a/public/posts/page/3/index.html +++ /dev/null @@ -1,531 +0,0 @@ - - - - - - - -Posts – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - -
-
- - - - - - - diff --git a/public/resources/blog_main.jpg b/public/resources/blog_main.jpg deleted file mode 100644 index a55da1eacbe69d3282396c4089f2e8591ee29928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87289 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 M6KwIQwxgl{*;HsG%m4rY diff --git a/public/resources/daily_main.png b/public/resources/daily_main.png deleted file mode 100644 index 71ea96cc7d763b1ac9487e1a55daff1d510bfb2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 679827 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 z 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⁡22ZtyJ@8-f=W8zzpc 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 diff --git a/public/resources/icon_180x180.png b/public/resources/icon_180x180.png deleted file mode 100644 index 8d2aa843dd23f3b13b105771944955b0b8d7d7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43662 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∋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∋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 diff --git a/public/resources/icon_hu2edf57696400f275bcb1d2f9022ef01c_28092_32x32_fill_box_center_2.png b/public/resources/icon_hu2edf57696400f275bcb1d2f9022ef01c_28092_32x32_fill_box_center_2.png deleted file mode 100644 index 4f7f5ee3b1cd6cde112ae75a5b9b3b9c68267c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2684 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 S2HalX{-@guz&D_OCjJ+{DzKdZ diff --git a/public/resources/头像.jpg b/public/resources/头像.jpg deleted file mode 100644 index 9de17bd17f73a2b7981660b2ff6fe25f13a99792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73737 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%0D)L zN8~kKs)-YuO@!|Ghs?jOaQB_fe53vp?rcYj(Ixy!MV4=6m~Xt`s0ynB_)X?b7vT?%Q|q)IDH zEK3~wDMhul3X|mNAcgaadid3*O)!jrY7-PC6+JB`>2#>j$F=aoI6WLO#Eh;mr}FJ4 zyVWE`r*t04gJxaaj7bYjI+y%FZ>jdaM#f11SaXkDxY{Tt z$=q_1jhI_EBVFTmHFM{eQT|lfNSA^m-9# zqEn?ersk$9bT;s&@@3YAo|K*{CNljaQzNnrVw9qB z7DJI-SkhX-8=iRiEK{nBt?R$W=()sVHyR$z*Vh4GPZ_%h|E2I26VS0?4*f3sef7il zYo^f#_;*}=_M}vqT3!FQkCZ!Iigz`EYI0$z`llU6Z+oQzhF}cOT#A;cIMs20G5Wp#J#NQdDc^2fsRd%px>qU?iX7BjE8N^4SWT{DVCfodBWkh-=h;UOgs4 zUe$O(x&&osFl5t<8%Gp{@q?FMKK#MNzOPRf=bq`WCO@BxDi6`=h1;9a@0k)+B;`6< zF?D#=9Lu?W7IYc>X?61irhhbFCBTEQZ-5TCDEpG-o_GDDd&h}%N|!W+g5g)E@&OYP z8@N}9RX0oEE2(<5f^oBf<8#*~dP|~9q?)qYYh93XD9q&v!wqNk0ly1CH*Z5`htUoD zV7YKXWK_nA(%*Y7v|ju77ms!$6_RXfZrVUTLT_5RUtk~WvN$rvBo&53?2|jwC%I7qKhxN+raOtyftU{F z!6th2e*m3)BT@RWmSjg*G)hvnK=q7oQrSGCv=Nee8Yr$CKReks)-_-c`xhpkg=@%? zlKvL36L+ds@0@-73*@{jNSf%fxM82r)uKu$FIt|v=@H%c1Z#j9dMuWNuxlc}_?QT9 z6H@3Ub0LM4k)>*5>;Mw zxgnjS%Qg`6;VnR?nzjX_j49viYHPwb4r_1yuAaNI<(^`B&J^07H z%cea(bf@+v;EIE-5>A}QkTe|YmA~KqbD%UtM6tzH^pHb2Y1jyaFo*lq&mi6H!XKRK5p>_P zo_%d~;>ONd5_;0%XtvD;=k)4&8;t?1XzR52N9e})OMOAX&l#25?ZHz%vyj8QQHUGz z$5sdB+Jw(O4#hH;M2(Y5DEU0Qh2S7^e5uacXrR2?p4bSkf=Y1tY6Y+vczIv`#=zz@ zPxU8j`^Cd_E@I>NT5P_>i-1uB9_BECp=!O`n8d2%<&JGFlYt*S7wo~fqr(Q$T@M1+ zVGe1AFfcG+qcQ``3>}HB;llPyKX!BMHnEYF*pYx)BO4R!glUS=ASn6p_ZXLb`8Dcw zG%G24&uI)pzMVMY;#KfT#Gql(O@1`#Gf%$RBVjE4kNKEO@HPi_Dl(uwr1^b@Zc-rX z9cmL6C^0UAQMeL-)pKN)xjA5Z`CSe%y-4J{Q_O&d%W%GwtbzLEDE*w(dJIJhF~rOH zHk*Oaywo*9w~0_6m)?1>r(B_M%`tlM*atP6&8)4(Hs93F_x(}eH5g#P`VLH-^oZ1t ziAwlOWJA*8x)xwd$7m>z?_Qb6oX6%Xj>C+!#(&bn-$j_N8@AoKI+AYW-PRF~C?l1h zR}&?(Bifd#)8?OJ!54J{!))hnNOl*+lqrmG>L^SWJUlmJB`cxY>GNSwYhUR*)kz)j zWXFV`CmFBc_leJNoXPvE;$2HTaP!)%*)MxAhwfSxw=rBpWa6BSo_fuok@NQ+=C+^S zfIds#P|f!)H^Uq=q*uLJCQKr$S7oOOugrNV9IHVe|g$Z?Jeu>yOC+uW;f4VXq;<=pa zka&6wi_w|O9g&bp1JNb`Ve5EnXQxdt*EW<;s z_b%UB?mur|6KRSTbJ1!#&7zaj6m0w-hd!;O=CGs)StaA`yQzo%X|k6Q?(i?<^b>1XJ-5)SkD(d>8$VJB3# z3Y(lku)?qGyzPo#dT!o~Z~K_TJAIj`2wVxL9v%RKB#bbF&m$N(0R(<0BsRvXvX*qV z^1<}~tL)6-1C^nIp^N@Irn{D@7FUcN^`Q?S2eS3 ze~XK&tB_N5nV9oX=d|09g?If?>hi561b1^H=epR=h)4=K!*K&lh|&#NnTHS`x&w^| zmUI?A=ijeb?R5w{btkXoc|e19dbKTT(vc_gmIW_&%B`4fF!L!Tx3vw8peLm-tf!qw zC|IF9^y=1;^?ZI(^ek*KN=DroGVtf9vi#SDfYoBNHhe1$lWeX^goZ(^E$Tt5}BEY2cohhZmFd(P`C zX_p^k;@Zo%0r*~aFnLIN^Y6mfY6UR?HCXSal${mx_O6`Fo2PzxWmu=fxje^DOg9<< zn;@2|^@{^$iXqMuM(8Y#8P*JTOdLJF z-Uip)*WH65%&HX_G1FZU+O0198Vb8Vng`KdOFD|b2^2a^#m$JCjZSNBvucJjFQjo| zYbOpiClE1K9_L2fS2m-TFe~pKU*xKqn^FA5yHoS#%+RS~FMj%`;2mxOUHNF@6#l)Z zpznXOD*wY1j@)6h_84p$+YpD-GrbV&;}>uy_9ZN4a|P)gKoma6lWauO&M7HJFh6${ z8m_I)+}u`|E=~_HxH5QrmocLy3Limv3GLhg`4bs4(Qv~PTL9${B0D<>tngSmHY3hR z#pz>;Oc-S9_Ce_ZBd4(pl;YAg)A2JGA;r}>GZFE<(X>xnKzOeeEY>*N05UOCzI^&w zh4nHO?a|k%6juG7tF?k!680VV2m@JuAX21N3eg(TPZ60=6KiuoP7gkR(K_lS;%jvFU#idn86EaAfEg|=_1VHPq~r{M@0QBpms?ie%F@dK-*(2A3Yr;YsPT7GS#qDCT{-b&XJ zL&Np*MKT9Vr?P&Gg;#$d*EVV%{gV4N~bclrM)$| zV^=No3ZO`U?lEA`dH@G7udaAVWHYU4pPyV^ zyr~E~gJzvN=tE29QNMZ9zR88uhjo9n306E@`LQ;o-zg-q?|>cMC1&Q13IV?ob&c&; z7z`(+~!r$}I=%=)HAo}~AD>MRS##yAOnKzaH%0N{BS zhnFT}%RV1g`~2(gK8ecCe99%jwG85vGIKNefS?^|3RSuICuG{z*_znGN`fpdI`6uQ>HkAIjD1yEk}ok4)I>?ZCd?03XhkhAQEY zwZfxf=PRg4`~Zo;_2Yc|_iyLNEUTmXN}D-V`legJO_-c>Y|c!)GrTcKAtSBU{0k!$ z{bDa=3KW(DN@v`_u3jQ!xdlvyAhhPg=!C~zUS96Im!1W)DRX8pU;V}wVDg)^Tu)+; z0+^vbBI9Q##D#St$y8+jrE2gY*vowgx`M<8Z2ZzyAGg zt*6Av%gq&&mqlV-f=KQ?!1AKdQO58jsZ$M5XQkx8+KZidJ6q&~9*Ng};dM8OQA73)9;6c#%5}N*?f*jFl^CGNkX@f?Pb01G@ETQ@& zCu@#Gi%uy-Ycul%!`&uTRIPryoJJM7g(`s!(DJ&OL481=oU{Db9s#f5_>6%ztu~t0 z;MIFMTo&4@1SWReDITAe3_Ym1yFK4_Af4SSx`+m!x>cVZ#GpYDi-lf9>cPe=T@#HTT#h2+TM?F1m|m@^u3j zgFBa$?C_8nj^G)ABX32hBDDbF=S- zr1K7G<`hKkv{Ej@d`0^rv-@4S=Rb{|>ycJh)xCV?oc@KHT%Cx(-{?=b-TS;$g2mIM z>5p#Zqf#FsIq1z-AqyswWNeN8U7ccl`vi77`+2wB3OQNoF-K11w_MW$Rr|SMeVki;zt+L3-F&W7CGtu$qYv7zE#>A-s$04}xv*tzDrpHW4Dn%@BM2)1(DVsBXjr0YKXm43NvrIV7WH6kqQ z5=_?zYUE zE`+Xc2CowAp+R`Xn^`0+k6?L$1RaaA;)l9Hx5BS9;f^ZMi5uRV@^E%2Pt^P4sgljw zL(m9UXcCtxpqWCPZ`=YJAt^-ZX5AaG>-!c!vi%cQIzG~6Y7~a;I8Vb~Hzy9i?kZ8{ zKu&o(h%4!SL;JOCe2D)RsqL*OtXN2AP{k3pZ zd?$st7}3z?jG=317Hg4sm1=+P;&Ioyx|#b38X;pc z><2UN#fl&Ey+r=*yT)JTQ$SkdRr(@*Ac^E~2uy{LE+9P-m^f-2N^5_g=mS0 z7x4S=4Yk5IWwQ+(NvB(%T=1A(3b*}86xAfbk%Zu9dp9Z7$G>h6d zy9xY;?wZ4pn+;>*7r{8!V~D~^l(0gzdx!&jn$hl=&BEZk+@EkIewynDeHRmMZ&G2$ zFCKSXkMuwlTJo&p);3@y47{Sl?=@XR_iQpQRkAy24L4=W6`{^O+9@A`mVaXvsHlIc l@M9jeO1C-^=nQg4g5uxBhNjY&;%&7HU?TDq6oS|q{69G|#Z&+Q diff --git a/public/site.webmanifest b/public/site.webmanifest deleted file mode 100644 index c36f3b3..0000000 --- a/public/site.webmanifest +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Hextra", - "short_name": "Hextra", - "start_url": "index.html", - "icons": [ - { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#000000", - "background_color": "#000000", - "display": "standalone" -} diff --git a/public/sitemap.xml b/public/sitemap.xml deleted file mode 100644 index 8e7d21b..0000000 --- a/public/sitemap.xml +++ /dev/null @@ -1,146 +0,0 @@ - - - - https://www.small09.top/tags/docker/ - 2023-12-25T09:06:25+08:00 - - https://www.small09.top/posts/231225-dockernote/ - 2023-12-25T09:06:25+08:00 - - https://www.small09.top/tags/linux/ - 2023-12-25T09:06:25+08:00 - - https://www.small09.top/posts/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/tags/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/tags/%E5%AE%B9%E5%99%A8%E5%92%8C%E8%99%9A%E6%8B%9F%E5%8C%96/ - 2023-12-25T09:06:25+08:00 - - https://www.small09.top/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/posts/231127-vncserver/ - 2023-11-27T09:33:32+08:00 - - https://www.small09.top/tags/%E8%BD%AF%E4%BB%B6/ - 2023-11-27T09:33:32+08:00 - - https://www.small09.top/tags/http/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/tags/python/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/posts/230908-py-post/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/tags/server/ - 2024-01-04T00:00:00+08:00 - - https://www.small09.top/tags/deepin/ - 2023-05-08T14:43:41+08:00 - - https://www.small09.top/posts/230508-remake-deb/ - 2023-05-08T14:43:41+08:00 - - https://www.small09.top/tags/clonezilla/ - 2022-07-14T13:05:51+08:00 - - https://www.small09.top/posts/220714-unpackclonezillaimage/ - 2022-07-14T13:05:51+08:00 - - https://www.small09.top/tags/deepin/uos/ - 2022-02-23T09:18:55+08:00 - - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - 2022-02-23T09:18:55+08:00 - - https://www.small09.top/posts/220104-diylinuxiso/ - 2022-01-04T09:17:38+08:00 - - https://www.small09.top/posts/211203-linuxchangeusername/ - 2021-12-03T09:01:23+08:00 - - https://www.small09.top/tags/nas/ - 2021-11-15T10:02:30+08:00 - - https://www.small09.top/tags/%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D/ - 2021-11-15T10:02:30+08:00 - - https://www.small09.top/tags/%E7%BE%A4%E6%99%96/ - 2021-11-15T10:02:30+08:00 - - https://www.small09.top/posts/211115-fixnasdriver/ - 2021-11-15T10:02:30+08:00 - - https://www.small09.top/posts/211019-dpkg_package_guide/ - 2021-10-19T10:12:23+08:00 - - https://www.small09.top/posts/210928-rpm_package/ - 2021-09-28T11:06:54+08:00 - - https://www.small09.top/posts/210914-mdadm/ - 2021-09-14T15:16:13+08:00 - - https://www.small09.top/posts/210914-linuxbackupdd/ - 2021-09-14T13:51:16+08:00 - - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - 2021-09-14T00:00:00+08:00 - - https://www.small09.top/tags/%E8%A7%A6%E6%91%B8%E5%B1%8F/ - 2021-09-14T00:00:00+08:00 - - https://www.small09.top/posts/210719-gpuinfoinlinux/ - 2021-07-19T13:35:00+08:00 - - https://www.small09.top/tags/%E6%98%BE%E5%8D%A1/ - 2021-07-19T13:35:00+08:00 - - https://www.small09.top/posts/210630-sudowithoutpasswd/ - 2021-07-13T08:43:40+08:00 - - https://www.small09.top/posts/210429-deepinautorun/ - 2021-09-14T00:00:00+08:00 - - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - 2021-04-20T00:00:00+08:00 - - https://www.small09.top/tags/%E4%B8%B2%E5%8F%A3/ - 2021-04-20T00:00:00+08:00 - - https://www.small09.top/posts/210328-linuxchangemacip/ - 2021-03-28T00:00:00+08:00 - - https://www.small09.top/tags/%E7%BD%91%E7%BB%9C/ - 2021-03-28T00:00:00+08:00 - - https://www.small09.top/posts/about_hugo_website/ - 2021-05-24T00:00:00+08:00 - - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - 2021-03-11T00:00:00+08:00 - - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - 2021-09-14T00:00:00+08:00 - - https://www.small09.top/tags/teamspeak/ - 2021-02-18T00:00:00+08:00 - - https://www.small09.top/tags/tools/ - 2021-02-18T00:00:00+08:00 - - https://www.small09.top/posts/210218-teamspeakwithdocker/ - 2021-02-18T00:00:00+08:00 - - https://www.small09.top/categories/ - - https://www.small09.top/about-card/ - - https://www.small09.top/about/ - - diff --git a/public/tags/clonezilla/index.html b/public/tags/clonezilla/index.html deleted file mode 100644 index a8c6e5d..0000000 --- a/public/tags/clonezilla/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Clonezilla – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容

- - -
- - - - - -
- - - - - - - - diff --git a/public/tags/clonezilla/index.xml b/public/tags/clonezilla/index.xml deleted file mode 100644 index 31e44c6..0000000 --- a/public/tags/clonezilla/index.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - 香风家的火柴盒 – Clonezilla - https://www.small09.top/tags/clonezilla/ - Recent content in Clonezilla on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Thu, 14 Jul 2022 13:05:51 +0800 - - - - - - - - - - - 从再生龙(clonezilla)镜像直接提取文件 - https://www.small09.top/posts/220714-unpackclonezillaimage/ - Thu, 14 Jul 2022 13:05:51 +0800 - - https://www.small09.top/posts/220714-unpackclonezillaimage/ - - - - <p>从clonezilla的镜像直接提取文件,免于先全盘全区恢复。</p> -<p>再生龙(clonezilla)是一个常用的Linux系统备份工具,适用于多个版本、多种CPU架构的电脑。</p> -<p>再生龙生成的镜像是比较特殊的格式,如果想要从里面提取文件,通常只能进行镜像恢复后进入系统提取。但是往往我们没有那么多硬盘来恢复系统。</p> -<p>再生龙的原理简单来说就是把硬盘分区使用partclone工具打包成img文件,然后使用gzip进行分卷压缩。我们只需要逆向操作,利用工具,把镜像解包挂载,直接在当前系统挂载,就可以得到原分区的文件了。</p> -<h2>挂载方法:<span class="hx:absolute hx:-mt-20" id="挂载方法"></span> - <a href="#%e6%8c%82%e8%bd%bd%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>1. 环境需求<span class="hx:absolute hx:-mt-20" id="1-环境需求"></span> - <a href="#1-%e7%8e%af%e5%a2%83%e9%9c%80%e6%b1%82" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>我们操作再生龙镜像时,最好是使用Linux环境。这个环境中,需要安装partclone(也就是再生龙生成镜像的核心工具)。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install partclone -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以Debian系为例</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>并且我们需要准备一个足够大的硬盘,用来存储镜像包和解包出的img文件。硬盘/分区的空间需要大于镜像本来的<strong>分区</strong>空间。</p> -<h3>2. 合并镜像<span class="hx:absolute hx:-mt-20" id="2-合并镜像"></span> - <a href="#2-%e5%90%88%e5%b9%b6%e9%95%9c%e5%83%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>再生龙默认情况下会把一个硬盘分区分按4GB的大小进行分包,通常以<code>gz.aa</code>、<code>gz.ab</code>等结尾,我们需要把这些包重新整合成一个gz包。</p> -<p>整合成gz包后,我们就可以解压gz来得到镜像img了。我们可以把两个步骤用流的方式写入一条命令,节省硬盘空间。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat sda1.ext4-ptcl-img.gz.* | gzip -d -c &gt; sda1.img</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这一步生成的img文件不能直接使用(google上也有说能用的,但是我试下来不能),需要进行一次转换。经过实际操作,这个文件所占用的空间是镜像原分区的大小,但是统计硬盘使用量时却只计算实际大小,希望了解的人可以帮忙解释一下。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>partclone.extfs -r -s sda1.img -o sda1-ex.img --restore_raw_file</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>当然上面两条指令也可以使用流的方式再次封装到一条,但是消耗的时间、失败后重新来过的时间,都会更长。</p> -<h2>3.挂载镜像<span class="hx:absolute hx:-mt-20" id="3挂载镜像"></span> - <a href="#3%e6%8c%82%e8%bd%bd%e9%95%9c%e5%83%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>将最后生成的img镜像挂载到我们的/mnt(或其他)目录,进入这个目录就可以看到原来全部的文件了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -o loop -t ext4 sda1-ex.img /mnt</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>最后我们只需要进入 <code>/mnt</code> 目录,就可以想直接操作硬盘一样把文件复制出来了。</p> - - - - - diff --git a/public/tags/deepin/index.html b/public/tags/deepin/index.html deleted file mode 100644 index 6d90487..0000000 --- a/public/tags/deepin/index.html +++ /dev/null @@ -1,582 +0,0 @@ - - - - - - - -Deepin – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
-
-

Deepin

-
-
- -
- -
-
-
- - - - - - - - diff --git a/public/tags/deepin/index.xml b/public/tags/deepin/index.xml deleted file mode 100644 index b96e85d..0000000 --- a/public/tags/deepin/index.xml +++ /dev/null @@ -1,623 +0,0 @@ - - - 香风家的火柴盒 – Deepin - https://www.small09.top/tags/deepin/ - Recent content in Deepin on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 08 May 2023 14:43:41 +0800 - - - - - - - - - - - 讨论在Debian系操作系统中重新提取已安装的软件并重新打包 - https://www.small09.top/posts/230508-remake-deb/ - Mon, 08 May 2023 14:43:41 +0800 - - https://www.small09.top/posts/230508-remake-deb/ - - - - <p>Debian系操作系统采用dpkg作为包管理器,在安装软件后会存储deb包信息,是否可以提取这些信息并且重新打deb包转移到其他平台使用?</p> -<p>之前有一个需求,要从UOS里面提取一个软件,并且将其安装到另一台设备中。当时找了一圈都没有找到相关的提取教程。但是从逻辑上来讲,dpkg安装的软件会保存deb包的相关信息,所以理论上讲是可以提取出软件包的所有内容,然后我们重新打包的。</p> -<p>今天在一个机缘巧合下(其实是懒得研究dpkg原理,瞎猫撞上死耗子),发现了dpkg保存文件信息的地点,于是接下来可以展开畅想:提取已经安装的软件并重新打包。</p> -<h2>文件的保存地点<span class="hx:absolute hx:-mt-20" id="文件的保存地点"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%9a%84%e4%bf%9d%e5%ad%98%e5%9c%b0%e7%82%b9" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我在找fcitx有关的配置文件进行全盘搜索的时候,找到了一条目录<code>/usr/lib/dpkg-db/info</code>,这个目录里面保留了fcitx的&quot;conffiles&quot;, &ldquo;md5sums&rdquo;, &ldquo;postinst&rdquo;, &ldquo;prerm&quot;四个文件,以及一个list文件。恰好fcitx.deb解包出来的DEBIAN文件夹内也是这四个文件加上额外的control文件,。</p> -<p>那么合理猜测,dpkg安装软件的时候,不仅把软件本身的文件移动到对应位置,还把DEBIAN里面的信息和脚本也转移到<code>/usr/lib/dpkg-db/</code>里面保存了。</p> -<p>而<code>fcitx.list</code>文件中记录的是所有的文件及其路径。想必这里面就是全部的文件了。</p> -<p>至于control文件,则都被保存到了<code>/usr/lib/dpkg-db/status</code>这个文本文件中。</p> -<h2>流程设想<span class="hx:absolute hx:-mt-20" id="流程设想"></span> - <a href="#%e6%b5%81%e7%a8%8b%e8%ae%be%e6%83%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>既然deb包所有必要的文件都找到了,那么就可以尝试一下还原过程了。在<a href="https://www.small09.top/posts/211019-dpkg_package_guide/"target="_blank" rel="noopener">这篇文章</a>里我研究过deb包的组成、格式和打包方法。</p> -<p>比如对于软件包A:</p> -<ol> -<li> -<p>创建一个工作目录,并在其中新建<code>DEBIAN</code>目录。</p> -</li> -<li> -<p>将<code>/usr/lib/dpkg-db/info</code>中所有该软件的脚本和信息(除了A.list)转移到<code>DEBIAN</code>中,并重命名成规范名称。</p> -</li> -<li> -<p>将<code>/usr/lib/dpkg-db/status</code>中与软件A有关的部分提取出来,保存到<code>DEBIAN/control</code>文件中。</p> -</li> -<li> -<p>根据A.list文件,找到软件包含的所有文件,将其按原样整理到工作目录内。</p> -</li> -<li> -<p>使用<code>dpkg -b</code>指令重新打包。</p> -</li> -</ol> -<h2>局限性<span class="hx:absolute hx:-mt-20" id="局限性"></span> - <a href="#%e5%b1%80%e9%99%90%e6%80%a7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上毕竟只是设想,没有进行试验,所以估计会出现这些问题,希望有需要的人尝试后可以解决。</p> -<ul> -<li> -<p>提取信息的难度: 由于<code>/usr/lib/dpkg-db/status</code>文件是一个包含几乎所有deb信息的文本文件,体积大内容乱,对于自动化脚本来说有些难度。加上一些软件的衍生品会在软件名上直接加后缀,对于提取的脚本来讲可能造成混淆,提取出不必要的东西。</p> -</li> -<li> -<p>获取源文件的难度: 不排除一些软件安装时会删除、修改自身的一些文件,可能打包会后会缺失内容。一些软件安装过程中会进行手动配置从而造成内容改变,重做出来的软件包不一定完整。</p> -</li> -<li> -<p>签名问题: 我们打包的软件没有原作者的数字签名,可能无法安装,也可能时候安装官方软件时冲突。</p> -</li> -<li> -<p>这个方案只能处理普通的软件,一些deb打包源码,安装时进行编译的,应该是不能用这种方案复原的。(apt的deb-src源)</p> -</li> -</ul> -<p>最后,希望有大佬可以验证一下这个方案。</p> - - - - - Deepin/UOS文件管理器隐藏不需要的盘符 - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - Wed, 23 Feb 2022 09:18:55 +0800 - - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - - - - <p>Deepin/UOS 里处理文件管理器显示太多盘符的问题。</p> -<h2>现象<span class="hx:absolute hx:-mt-20" id="现象"></span> - <a href="#%e7%8e%b0%e8%b1%a1" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在使用UOS操作系统时,有时候打开文件管理器,发现除了平常常见的“系统盘”、“数据盘”外,出现了更多的盘符(不属于移动u盘)。在<code>/etc/fstab</code>文件添加或删除“”并没有效果。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230924406.png" alt="image-20220223090517363" loading="lazy" /></p> -<h2>原理/原因<span class="hx:absolute hx:-mt-20" id="原理原因"></span> - <a href="#%e5%8e%9f%e7%90%86%e5%8e%9f%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>这是因为系统/etc/udev/rules.d文件夹做了非法修改。有些人盲目替换了文件夹文件,导致配置文件变化,系统无法正确执行隐藏操作。</p> -<h2>处理方法<span class="hx:absolute hx:-mt-20" id="处理方法"></span> - <a href="#%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li> -<p>打开<code>/etc/udev/rules.d</code>目录,查看是否有一个《80-udisks2.rules》文件。如果该文件不存在,请创建。</p> -</li> -<li> -<p>打开终端,使用root权限打开编辑</p> -</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo deepin-editor /etc/udev/rules.d/80-udisk2.rules</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ol start="3"> -<li> -<p><strong>打开新的终端</strong>,输入执行 <code>blkid -f</code> ,记录LABLE、UUID两列</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230928320.png" alt="截图录屏_选择区域_20220223090208" loading="lazy" /></p> -</li> -<li> -<p>对比<code>80-udisks2.rules</code>的内容,将里面的ENV{ID_FS_UUID}后面引号中内容换成第3步中显示的新的UUID。</p> -<p>(#号后面内容即为盘符,对应3中的LABEL,双等号后面就是UUID,四行都需要替换)</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230927888.png" alt="截图录屏_选择区域_20220223090606" loading="lazy" /></p> -</li> -<li> -<p>保存文件并重启计算机,即可看到效果。</p> -</li> -<li> -<p>该方法对Deepin系统也有效。对于其他使用了dde-file-manager的应该也是有作用的。</p> -</li> -</ol> - - - - - DEB打包方法简介 - https://www.small09.top/posts/211019-dpkg_package_guide/ - Tue, 19 Oct 2021 10:12:23 +0800 - - https://www.small09.top/posts/211019-dpkg_package_guide/ - - - - <p>简单介绍deb打包的方法,包括目录树格式和打包注意事项。</p> -<h2>文件结构<span class="hx:absolute hx:-mt-20" id="文件结构"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录<code>/</code>。一个工作空间的目录树如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code> PackageDIR - ├─DEBIAN - ├─opt - │ └─kushidou-touchscreen - │ └─desktops - ├─usr - │ ├─bin - │ └─share - └─var</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中,<code>DEBIAN</code>目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。</p> -<h2>DEBIAN<span class="hx:absolute hx:-mt-20" id="debian"></span> - <a href="#debian" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>DEBIAN</code>目录下有一个control文件和至多四个脚本文件。</p> -<h3>control<span class="hx:absolute hx:-mt-20" id="control"></span> - <a href="#control" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>control</code>文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。</p> -<table> - <thead> - <tr> - <th>NAME</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>Package</td> - <td>软件名,<code>dpkg -l</code> 列出的名字</td> - </tr> - <tr> - <td>Version</td> - <td>版本号-修订号</td> - </tr> - <tr> - <td>Section</td> - <td>软件类型,比如mail, test, x11等</td> - </tr> - <tr> - <td>Priority</td> - <td>优先级/重要性,比如optional 可选的</td> - </tr> - <tr> - <td>Architecture</td> - <td>软件架构,比如x86, arm64</td> - </tr> - <tr> - <td>Depends</td> - <td>依赖环境,用 <code>,</code> 隔开,用<code>(&gt;=&lt; )</code>指定版本号</td> - </tr> - <tr> - <td>Suggests</td> - <td>推荐安装,指非必要依赖,可以提供更多功能</td> - </tr> - <tr> - <td>Maintainer</td> - <td>作者 &lt;邮箱或者其他联系方式&gt;</td> - </tr> - <tr> - <td>Descritprion</td> - <td>简介,可以换行书写</td> - </tr> - </tbody> -</table> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20211019101901.png" alt="image-20211019094048011" loading="lazy" /></p> -<h3>额外脚本<span class="hx:absolute hx:-mt-20" id="额外脚本"></span> - <a href="#%e9%a2%9d%e5%a4%96%e8%84%9a%e6%9c%ac" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>DEBIAN</code>目录下之多放置四个可执行脚本,包括<strong>安装前<code>preinst</code></strong>、<strong>安装后<code>postinst</code></strong>、<strong>卸载前<code>prerm</code></strong>、<strong>卸载前<code>postrm</code></strong>,四个脚本都需要以<code>#!/bin/bash</code>开头,内容与普通脚本无异,文件名不需要后缀。</p> -<p>这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以<code>root</code>身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。</p> -<p>此外<code>postinst</code>可以用来启动已安装的程序,<code>prerm</code>常用来停止正在运行的程序。</p> -<h3>md5sums<span class="hx:absolute hx:-mt-20" id="md5sums"></span> - <a href="#md5sums" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。</p> -<h2>打包<span class="hx:absolute hx:-mt-20" id="打包"></span> - <a href="#%e6%89%93%e5%8c%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>所有文件配置完成后,进入工作空间上级目录,执行指令</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dpkg -b ./PackageDIR packagename.deb</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>deb包命名的一般规则为 <strong>软件名_版本-修订号_架构.deb</strong></p> -<h2>其他信息<span class="hx:absolute hx:-mt-20" id="其他信息"></span> - <a href="#%e5%85%b6%e4%bb%96%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。</p> - - - - - 使用dd指令备份和恢复Linux系统(硬盘级) - https://www.small09.top/posts/210914-linuxbackupdd/ - Tue, 14 Sep 2021 13:51:16 +0800 - - https://www.small09.top/posts/210914-linuxbackupdd/ - - - - <p>害,谁不是个DD (誰でも 大好き)了呢!</p> -<p>但是这玩意儿太慢了。。。</p> -<h2>起因<span class="hx:absolute hx:-mt-20" id="起因"></span> - <a href="#%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用UOS的时候经常需要备份镜像并分享给其他部门或者办事处的人。传统的方法是进入系统自带的Recovery分区,打开备份软件制作镜像,但是这存在两个问题:A. 镜像特别巨大,系统多大镜像就占多大。B. 必须先拥有系统,才能恢复镜像。最新版的系统中已经去掉了Recovery分区,而LiveCD镜像还不是很好用,于是有了这篇博客,试图寻找一个简单的方法来进行恢复和备份。</p> -<h2>DD说明<span class="hx:absolute hx:-mt-20" id="dd说明"></span> - <a href="#dd%e8%af%b4%e6%98%8e" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。</p> -<p>dd指令依然是有多少数据占多少空间,所以我们可以使用gzip进行压缩。具体代码后面贴出来。</p> -<p>实际使用中,发现dd指令除了方便,就没有其他优点了。它因为要读取硬盘所有数据(包括垃圾数据),即便用SSD,读盘速度还是会很慢,三刻钟才读了200GiB数据,平均75MB/s,而使用uos自带的deepin-clone,三个系统都备份完了。</p> -<h2>DD备份<span class="hx:absolute hx:-mt-20" id="dd备份"></span> - <a href="#dd%e5%a4%87%e4%bb%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda of<span style="color:#f92672">=</span>/dev/sdb <span style="color:#f92672">=</span>&gt; 备份整个磁盘到另外一个磁盘 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>sda.img <span style="color:#f92672">=</span>&gt; 备份整个磁盘为某个文件 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 备份并且压缩 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 指定块大小,备份并压缩(据说能提速)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>DD复原<span class="hx:absolute hx:-mt-20" id="dd复原"></span> - <a href="#dd%e5%a4%8d%e5%8e%9f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从另一个磁盘恢复回来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从压缩的文件恢复出来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M <span style="color:#f92672">=</span>&gt;前面指定了块大小,这里也需要</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>本文参考(抄)了以下内容:</p> -<p><a href="http://vpsxyz.com/archives/87"target="_blank" rel="noopener">Linux 下使用 dd 和 gzip 命令来代替 Ghost 做磁盘镜像</a></p> -<p><a href="https://blog.csdn.net/weixin_33971130/article/details/85662628"target="_blank" rel="noopener">linux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)</a></p> -<p>还有一些查找过程中作用不大的页面,就不贴出来了(诶嘿(╹ڡ╹ )</p> - - - - - Linux处理多触屏的终极解决方案 - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - Tue, 24 Aug 2021 00:00:00 +0800 - - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - - - - <p>一般Linux操作系统接入多个触摸屏的最终解!</p> -<p>从<a href="https://www.small09.top/posts/210311-multitouchscreeninlinux/"target="_blank" rel="noopener">21年3月中旬开始</a>,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。</p> -<p><em>重要:</em> 本文全文基于软件<code>xinput</code></p> -<p><em>更重要:</em> 如简介所说,仍有一种方法无法对应,具体为<code>【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】</code>,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。</p> -<h2>0、核心:xinput<span class="hx:absolute hx:-mt-20" id="0核心xinput"></span> - <a href="#0%e6%a0%b8%e5%bf%83xinput" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)</p> -<blockquote> - <p>xinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级</p> -<p>xinput list &ndash;id-only : 仅仅列出设备ID(序号,每次开机都可能改变)</p> -<p>xinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕</p> -<p>xinput list-props : 列出某个设备的详细信息,后接参数为设备ID。</p> - -</blockquote> -<h2>1、简约:两个完全不同的触摸显示器<span class="hx:absolute hx:-mt-20" id="1简约两个完全不同的触摸显示器"></span> - <a href="#1%e7%ae%80%e7%ba%a6%e4%b8%a4%e4%b8%aa%e5%ae%8c%e5%85%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e8%a7%a6%e6%91%b8%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>xinput map-to-output &quot;$DEVICE NAME A&quot; PORT-A</code></p> -<p>这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。</p> -<p>首先通过xinput查看所有的输入设备:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>~$ xinput -</span></span><span style="display:flex;"><span>┌ Virtual core pointer id<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">[</span>master pointer <span style="color:#f92672">(</span>3<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK TLITEK-TP id<span style="color:#f92672">=</span><span style="color:#ae81ff">9</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK Multi-Touch id<span style="color:#f92672">=</span><span style="color:#ae81ff">7</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>下略<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>可以看到<code>ILITEK ILITEK-TP</code>和<code>ILITEK Multi-Touch</code>显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:</p> -<p><code>xinput map-to-output &quot;ILITEK ILITEK-TP&quot; HDMI-0</code></p> -<p><code>xinput map-to-output &quot;ILITEK Multi-Touch&quot; HDMI-1</code></p> -<p>这种方式的要点是1.必须带英文<code>&quot;&quot;</code>,2.引号内名称须完整。<code>map-to-output</code>所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。</p> -<h2>2、复杂但通用:VID:PID不同的显示器<span class="hx:absolute hx:-mt-20" id="2复杂但通用vidpid不同的显示器"></span> - <a href="#2%e5%a4%8d%e6%9d%82%e4%bd%86%e9%80%9a%e7%94%a8vidpid%e4%b8%8d%e5%90%8c%e7%9a%84%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。</p> -<p>通过<code>xinput list-props [id]</code>可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。<code>list-props</code>的结果示例如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#f92672">(</span>后续再补<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Device Product ID</code>一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA<span style="color:#f92672">=</span>222a -</span></span><span style="display:flex;"><span>PIDA<span style="color:#f92672">=</span><span style="color:#ae81ff">0001</span> -</span></span><span style="display:flex;"><span>PORTA<span style="color:#f92672">=</span>VGA-0 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 或者这里直接填写Device Product ID里面的结果,先VID后PID。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 字母O,不是数字0,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$VIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span>PIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$PIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># =========自动处理步骤,请勿随意修改==========</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 根据设备ID取其序号</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3、屏映射,多屏重复本段</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$VIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$PIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> xinput map-to-output $I $PORTA -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span>exit <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这个脚本使用<code>xinput list --id-only</code>仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用<code>map-to-output</code>进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。</p> -<h2>3、[2]的进阶版<span class="hx:absolute hx:-mt-20" id="32的进阶版"></span> - <a href="#32%e7%9a%84%e8%bf%9b%e9%98%b6%e7%89%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。</p> -<p>在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是<code>pyudev</code>库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装<code>python3+pyudev</code>,并且使用desktop文件在开机时启动,即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/python3</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- coding: UTF-8 --</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- Author: Blues --</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> pyudev -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>context <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Context() -</span></span><span style="display:flex;"><span>monitor <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Monitor<span style="color:#f92672">.</span>from_netlink(context) -</span></span><span style="display:flex;"><span>monitor<span style="color:#f92672">.</span>filter_by(subsystem<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hid&#39;</span>) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> device <span style="color:#f92672">in</span> iter(monitor<span style="color:#f92672">.</span>poll, <span style="color:#66d9ef">None</span>): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>driver <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#34;hid-multitouch&#34;</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;add&#34;</span> <span style="color:#f92672">or</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;change&#34;</span>: -</span></span><span style="display:flex;"><span> os<span style="color:#f92672">.</span>system(<span style="color:#e6db74">&#34;/var/my-touchscreen/remap-screen&#34;</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照<em>设备名、VID、UID、物理接口</em>四大特征,自动映射到对应的显示屏上了。</p> - - - - - deepin和UOS,快捷方式,开机自启动 - https://www.small09.top/posts/210429-deepinautorun/ - Thu, 29 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210429-deepinautorun/ - - - - <p>修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。</p> -<h2>桌面快捷方式<span class="hx:absolute hx:-mt-20" id="桌面快捷方式"></span> - <a href="#%e6%a1%8c%e9%9d%a2%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>deepin的桌面快捷方式是以<code>*.desktop</code>文件的形式实现的,所以我们需要添加自定义快捷方式的话,只要在桌面添加要给desktop格式的文本文件,编辑内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>[Desktop Entry] -Name=ddd -Exec=&#34;/usr/sbin/xx.sh&#34; -Type=Application</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Desktop Entry</code>表示声明该文件为快捷方式文件。<code>Name</code>是这个文件要显示的名字,设置了之后就可以隐藏原名称和扩展名。<code>Exec</code>是程序的启动脚本,或者启动指令。<code>Type</code>是程序类型,在开始菜单的分类中可以体现。以上四行是必须要有的参数,还有一些其他的参数不影响执行。Exec的脚本必须赋予777权限以执行。</p> -<p>把这个文件放在<code>~/Desktop</code>,就可以看到桌面上多了一个快捷方式了。</p> -<h2>开始菜单<span class="hx:absolute hx:-mt-20" id="开始菜单"></span> - <a href="#%e5%bc%80%e5%a7%8b%e8%8f%9c%e5%8d%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo cp ~/Desktop/刚刚的.desktop /usr/share/applications</code>,过一会或者注销重新登录就能看到开始菜单的响应类型下出现这个快捷方式了。</p> -<h2>开机自动执行<span class="hx:absolute hx:-mt-20" id="开机自动执行"></span> - <a href="#%e5%bc%80%e6%9c%ba%e8%87%aa%e5%8a%a8%e6%89%a7%e8%a1%8c" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>UOS/Deepin和Ubuntu<span class="hx:absolute hx:-mt-20" id="uosdeepin和ubuntu"></span> - <a href="#uosdeepin%e5%92%8cubuntu" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>cp ~/Desktop/刚刚的.desktop ~/.config/autostart</code></p> -<p>需要这个的原因主要是我执行触摸屏映射的指令经常会在桌面启动前(<code>lightdm.service</code>)执行,导致error从而无法进入桌面,将脚本放进<code>/etc/profile.d</code>之后第二天就失效了,所以需要一个在登录桌面后就实现自动执行的功能,多种方法对比下来还是放进桌面环境的开机自启文件夹比较靠谱。这样一般会在进入桌面后5-10秒自动执行,稳定性大幅提高。</p> -<p>经过实际查阅资料和测试,Ubuntu1604也完全适用上面的步骤,只不过可能需要在<code>~/.config/</code>下手动创建一个<code>autostart</code>目录。由于1604已经停止支持,许多人转入了更新的ubuntu系统,猜测近几年的也可以尝试一下。</p> -<h3>麒麟和其他使用X11桌面的Linux<span class="hx:absolute hx:-mt-20" id="麒麟和其他使用x11桌面的linux"></span> - <a href="#%e9%ba%92%e9%ba%9f%e5%92%8c%e5%85%b6%e4%bb%96%e4%bd%bf%e7%94%a8x11%e6%a1%8c%e9%9d%a2%e7%9a%84linux" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>本条目包含UOS和Ubuntu、deepin系统</p> -<p>自启动目录为<code>/etc/xdg/autostart</code>,同样的desktop文件放进去即可。但是麒麟中我使用上面的基础desktop报错,可能需要添加其他内容。</p> - - - - - Linux多显示器触屏调试与暂行解决方案 - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - - - - <p>由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。</p> -<p><em>2021-03-22更新部分内容</em> -<em>2021-04-28再次更新内容</em></p> -<p><strong>2021-09-14 文章已有新版本,请访问《<a href="https://www.small09.top/posts/210824-linuxtouchscreenfin/"target="_blank" rel="noopener">Linux处理多触屏的终极解决方案</a>》</strong></p> -<h2>问题来源<span class="hx:absolute hx:-mt-20" id="问题来源"></span> - <a href="#%e9%97%ae%e9%a2%98%e6%9d%a5%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 -接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为</p> -<p><code>xinput map-to-output $触屏设备id $显示屏名称</code></p> -<blockquote> - <p>2021-04-28更新</p> -<p><code>xinput map-to-output</code>指令支持触摸屏名称作为参数,比如我通过<code>xinput</code>指令看到有一个触摸屏的设备名称为<code>ILITEK XXXX</code>,那么我映射的时候直接输入</p> -<blockquote> - <p><code>xinput map-to-output &quot;ILITEK XXX&quot; HDMI-1</code></p> - -</blockquote> - -</blockquote> -<h2>尝试解决<span class="hx:absolute hx:-mt-20" id="尝试解决"></span> - <a href="#%e5%b0%9d%e8%af%95%e8%a7%a3%e5%86%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ul> -<li>首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。</li> -<li><del>然后<code>xinput list-props $id</code>查看设备的VID,这个在后续自动化处理有用。</del></li> -<li><code>xrandr</code>查看<code>$显示器名称</code></li> -</ul> -<h2>自动化处理<span class="hx:absolute hx:-mt-20" id="自动化处理"></span> - <a href="#%e8%87%aa%e5%8a%a8%e5%8c%96%e5%a4%84%e7%90%86" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 2021-04-28更新:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 本部分后面的都可以不看了!</span> -</span></span><span style="display:flex;"><span>xinput map-to-output <span style="color:#e6db74">&#34;DEVICE_NAME&#34;</span> DISPLAY -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><strong>仅作归档!下面这些方法过于繁琐!</strong></p> -<p>利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。<code>bash this.sh VID1 VID2 ScreenID</code></p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。</span> -</span></span><span style="display:flex;"><span>MYID_FIRST<span style="color:#f92672">=</span>$1 -</span></span><span style="display:flex;"><span>MYID_SECOND<span style="color:#f92672">=</span>$2 -</span></span><span style="display:flex;"><span>OUT_PUT<span style="color:#f92672">=</span>$3 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#[1]</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> MY_INDEX<span style="color:#f92672">=</span>$I -</span></span><span style="display:flex;"><span> break; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>xinput map-to-output $MY_INDEX $OUT_PUT -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI2</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI1</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput | grep -iw DEVICE_NAME<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID#*id=<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID%% *<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>xinput map-to-output $TOUCH_ID SCREEN_NAME</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),<del>使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id</del>。</p> -<p>经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在<code>~/.bashrc</code>中,这样只需要打开一次终端,就可以实现屏幕重新映射。</p> -<h2>后续问题<span class="hx:absolute hx:-mt-20" id="后续问题"></span> - <a href="#%e5%90%8e%e7%bb%ad%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li>当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。</li> -<li>当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数</li> -<li>如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。</li> -</ol> -<h2>触屏校准(如果需要)<span class="hx:absolute hx:-mt-20" id="触屏校准如果需要"></span> - <a href="#%e8%a7%a6%e5%b1%8f%e6%a0%a1%e5%87%86%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>网上说的利用校准来区分多触摸屏的方法是<strong>完全错误</strong>的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)</p> -<ul> -<li><code>sudo apt install xinput-calibrator</code>,需要更新源</li> -<li><code>sudo xinput_calibrator</code></li> -<li>将校准信息保存到<code>/usr/share/X11/xorg.conf.d/10-evdev.conf</code>的&quot;Driver evdev”下面一行,重启生效。</li> -</ul> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 -[2]https://blog.csdn.net/qq_33406883/article/details/106649087 -[3]https://segmentfault.com/a/1190000020334077</p> - - - - - diff --git a/public/tags/deepin/uos/index.html b/public/tags/deepin/uos/index.html deleted file mode 100644 index c15e6a8..0000000 --- a/public/tags/deepin/uos/index.html +++ /dev/null @@ -1,570 +0,0 @@ - - - - - - - -Deepin/UOS – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/deepin/uos/index.xml b/public/tags/deepin/uos/index.xml deleted file mode 100644 index 2dffa78..0000000 --- a/public/tags/deepin/uos/index.xml +++ /dev/null @@ -1,566 +0,0 @@ - - - 香风家的火柴盒 – Deepin/UOS - https://www.small09.top/tags/deepin/uos/ - Recent content in Deepin/UOS on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Wed, 23 Feb 2022 09:18:55 +0800 - - - - - - - - - - - Deepin/UOS文件管理器隐藏不需要的盘符 - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - Wed, 23 Feb 2022 09:18:55 +0800 - - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - - - - <p>Deepin/UOS 里处理文件管理器显示太多盘符的问题。</p> -<h2>现象<span class="hx:absolute hx:-mt-20" id="现象"></span> - <a href="#%e7%8e%b0%e8%b1%a1" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在使用UOS操作系统时,有时候打开文件管理器,发现除了平常常见的“系统盘”、“数据盘”外,出现了更多的盘符(不属于移动u盘)。在<code>/etc/fstab</code>文件添加或删除“”并没有效果。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230924406.png" alt="image-20220223090517363" loading="lazy" /></p> -<h2>原理/原因<span class="hx:absolute hx:-mt-20" id="原理原因"></span> - <a href="#%e5%8e%9f%e7%90%86%e5%8e%9f%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>这是因为系统/etc/udev/rules.d文件夹做了非法修改。有些人盲目替换了文件夹文件,导致配置文件变化,系统无法正确执行隐藏操作。</p> -<h2>处理方法<span class="hx:absolute hx:-mt-20" id="处理方法"></span> - <a href="#%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li> -<p>打开<code>/etc/udev/rules.d</code>目录,查看是否有一个《80-udisks2.rules》文件。如果该文件不存在,请创建。</p> -</li> -<li> -<p>打开终端,使用root权限打开编辑</p> -</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo deepin-editor /etc/udev/rules.d/80-udisk2.rules</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ol start="3"> -<li> -<p><strong>打开新的终端</strong>,输入执行 <code>blkid -f</code> ,记录LABLE、UUID两列</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230928320.png" alt="截图录屏_选择区域_20220223090208" loading="lazy" /></p> -</li> -<li> -<p>对比<code>80-udisks2.rules</code>的内容,将里面的ENV{ID_FS_UUID}后面引号中内容换成第3步中显示的新的UUID。</p> -<p>(#号后面内容即为盘符,对应3中的LABEL,双等号后面就是UUID,四行都需要替换)</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230927888.png" alt="截图录屏_选择区域_20220223090606" loading="lazy" /></p> -</li> -<li> -<p>保存文件并重启计算机,即可看到效果。</p> -</li> -<li> -<p>该方法对Deepin系统也有效。对于其他使用了dde-file-manager的应该也是有作用的。</p> -</li> -</ol> - - - - - DEB打包方法简介 - https://www.small09.top/posts/211019-dpkg_package_guide/ - Tue, 19 Oct 2021 10:12:23 +0800 - - https://www.small09.top/posts/211019-dpkg_package_guide/ - - - - <p>简单介绍deb打包的方法,包括目录树格式和打包注意事项。</p> -<h2>文件结构<span class="hx:absolute hx:-mt-20" id="文件结构"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录<code>/</code>。一个工作空间的目录树如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code> PackageDIR - ├─DEBIAN - ├─opt - │ └─kushidou-touchscreen - │ └─desktops - ├─usr - │ ├─bin - │ └─share - └─var</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中,<code>DEBIAN</code>目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。</p> -<h2>DEBIAN<span class="hx:absolute hx:-mt-20" id="debian"></span> - <a href="#debian" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>DEBIAN</code>目录下有一个control文件和至多四个脚本文件。</p> -<h3>control<span class="hx:absolute hx:-mt-20" id="control"></span> - <a href="#control" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>control</code>文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。</p> -<table> - <thead> - <tr> - <th>NAME</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>Package</td> - <td>软件名,<code>dpkg -l</code> 列出的名字</td> - </tr> - <tr> - <td>Version</td> - <td>版本号-修订号</td> - </tr> - <tr> - <td>Section</td> - <td>软件类型,比如mail, test, x11等</td> - </tr> - <tr> - <td>Priority</td> - <td>优先级/重要性,比如optional 可选的</td> - </tr> - <tr> - <td>Architecture</td> - <td>软件架构,比如x86, arm64</td> - </tr> - <tr> - <td>Depends</td> - <td>依赖环境,用 <code>,</code> 隔开,用<code>(&gt;=&lt; )</code>指定版本号</td> - </tr> - <tr> - <td>Suggests</td> - <td>推荐安装,指非必要依赖,可以提供更多功能</td> - </tr> - <tr> - <td>Maintainer</td> - <td>作者 &lt;邮箱或者其他联系方式&gt;</td> - </tr> - <tr> - <td>Descritprion</td> - <td>简介,可以换行书写</td> - </tr> - </tbody> -</table> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20211019101901.png" alt="image-20211019094048011" loading="lazy" /></p> -<h3>额外脚本<span class="hx:absolute hx:-mt-20" id="额外脚本"></span> - <a href="#%e9%a2%9d%e5%a4%96%e8%84%9a%e6%9c%ac" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>DEBIAN</code>目录下之多放置四个可执行脚本,包括<strong>安装前<code>preinst</code></strong>、<strong>安装后<code>postinst</code></strong>、<strong>卸载前<code>prerm</code></strong>、<strong>卸载前<code>postrm</code></strong>,四个脚本都需要以<code>#!/bin/bash</code>开头,内容与普通脚本无异,文件名不需要后缀。</p> -<p>这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以<code>root</code>身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。</p> -<p>此外<code>postinst</code>可以用来启动已安装的程序,<code>prerm</code>常用来停止正在运行的程序。</p> -<h3>md5sums<span class="hx:absolute hx:-mt-20" id="md5sums"></span> - <a href="#md5sums" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。</p> -<h2>打包<span class="hx:absolute hx:-mt-20" id="打包"></span> - <a href="#%e6%89%93%e5%8c%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>所有文件配置完成后,进入工作空间上级目录,执行指令</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dpkg -b ./PackageDIR packagename.deb</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>deb包命名的一般规则为 <strong>软件名_版本-修订号_架构.deb</strong></p> -<h2>其他信息<span class="hx:absolute hx:-mt-20" id="其他信息"></span> - <a href="#%e5%85%b6%e4%bb%96%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。</p> - - - - - 使用dd指令备份和恢复Linux系统(硬盘级) - https://www.small09.top/posts/210914-linuxbackupdd/ - Tue, 14 Sep 2021 13:51:16 +0800 - - https://www.small09.top/posts/210914-linuxbackupdd/ - - - - <p>害,谁不是个DD (誰でも 大好き)了呢!</p> -<p>但是这玩意儿太慢了。。。</p> -<h2>起因<span class="hx:absolute hx:-mt-20" id="起因"></span> - <a href="#%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用UOS的时候经常需要备份镜像并分享给其他部门或者办事处的人。传统的方法是进入系统自带的Recovery分区,打开备份软件制作镜像,但是这存在两个问题:A. 镜像特别巨大,系统多大镜像就占多大。B. 必须先拥有系统,才能恢复镜像。最新版的系统中已经去掉了Recovery分区,而LiveCD镜像还不是很好用,于是有了这篇博客,试图寻找一个简单的方法来进行恢复和备份。</p> -<h2>DD说明<span class="hx:absolute hx:-mt-20" id="dd说明"></span> - <a href="#dd%e8%af%b4%e6%98%8e" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。</p> -<p>dd指令依然是有多少数据占多少空间,所以我们可以使用gzip进行压缩。具体代码后面贴出来。</p> -<p>实际使用中,发现dd指令除了方便,就没有其他优点了。它因为要读取硬盘所有数据(包括垃圾数据),即便用SSD,读盘速度还是会很慢,三刻钟才读了200GiB数据,平均75MB/s,而使用uos自带的deepin-clone,三个系统都备份完了。</p> -<h2>DD备份<span class="hx:absolute hx:-mt-20" id="dd备份"></span> - <a href="#dd%e5%a4%87%e4%bb%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda of<span style="color:#f92672">=</span>/dev/sdb <span style="color:#f92672">=</span>&gt; 备份整个磁盘到另外一个磁盘 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>sda.img <span style="color:#f92672">=</span>&gt; 备份整个磁盘为某个文件 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 备份并且压缩 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 指定块大小,备份并压缩(据说能提速)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>DD复原<span class="hx:absolute hx:-mt-20" id="dd复原"></span> - <a href="#dd%e5%a4%8d%e5%8e%9f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从另一个磁盘恢复回来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从压缩的文件恢复出来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M <span style="color:#f92672">=</span>&gt;前面指定了块大小,这里也需要</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>本文参考(抄)了以下内容:</p> -<p><a href="http://vpsxyz.com/archives/87"target="_blank" rel="noopener">Linux 下使用 dd 和 gzip 命令来代替 Ghost 做磁盘镜像</a></p> -<p><a href="https://blog.csdn.net/weixin_33971130/article/details/85662628"target="_blank" rel="noopener">linux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)</a></p> -<p>还有一些查找过程中作用不大的页面,就不贴出来了(诶嘿(╹ڡ╹ )</p> - - - - - Linux处理多触屏的终极解决方案 - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - Tue, 24 Aug 2021 00:00:00 +0800 - - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - - - - <p>一般Linux操作系统接入多个触摸屏的最终解!</p> -<p>从<a href="https://www.small09.top/posts/210311-multitouchscreeninlinux/"target="_blank" rel="noopener">21年3月中旬开始</a>,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。</p> -<p><em>重要:</em> 本文全文基于软件<code>xinput</code></p> -<p><em>更重要:</em> 如简介所说,仍有一种方法无法对应,具体为<code>【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】</code>,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。</p> -<h2>0、核心:xinput<span class="hx:absolute hx:-mt-20" id="0核心xinput"></span> - <a href="#0%e6%a0%b8%e5%bf%83xinput" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)</p> -<blockquote> - <p>xinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级</p> -<p>xinput list &ndash;id-only : 仅仅列出设备ID(序号,每次开机都可能改变)</p> -<p>xinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕</p> -<p>xinput list-props : 列出某个设备的详细信息,后接参数为设备ID。</p> - -</blockquote> -<h2>1、简约:两个完全不同的触摸显示器<span class="hx:absolute hx:-mt-20" id="1简约两个完全不同的触摸显示器"></span> - <a href="#1%e7%ae%80%e7%ba%a6%e4%b8%a4%e4%b8%aa%e5%ae%8c%e5%85%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e8%a7%a6%e6%91%b8%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>xinput map-to-output &quot;$DEVICE NAME A&quot; PORT-A</code></p> -<p>这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。</p> -<p>首先通过xinput查看所有的输入设备:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>~$ xinput -</span></span><span style="display:flex;"><span>┌ Virtual core pointer id<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">[</span>master pointer <span style="color:#f92672">(</span>3<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK TLITEK-TP id<span style="color:#f92672">=</span><span style="color:#ae81ff">9</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK Multi-Touch id<span style="color:#f92672">=</span><span style="color:#ae81ff">7</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>下略<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>可以看到<code>ILITEK ILITEK-TP</code>和<code>ILITEK Multi-Touch</code>显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:</p> -<p><code>xinput map-to-output &quot;ILITEK ILITEK-TP&quot; HDMI-0</code></p> -<p><code>xinput map-to-output &quot;ILITEK Multi-Touch&quot; HDMI-1</code></p> -<p>这种方式的要点是1.必须带英文<code>&quot;&quot;</code>,2.引号内名称须完整。<code>map-to-output</code>所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。</p> -<h2>2、复杂但通用:VID:PID不同的显示器<span class="hx:absolute hx:-mt-20" id="2复杂但通用vidpid不同的显示器"></span> - <a href="#2%e5%a4%8d%e6%9d%82%e4%bd%86%e9%80%9a%e7%94%a8vidpid%e4%b8%8d%e5%90%8c%e7%9a%84%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。</p> -<p>通过<code>xinput list-props [id]</code>可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。<code>list-props</code>的结果示例如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#f92672">(</span>后续再补<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Device Product ID</code>一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA<span style="color:#f92672">=</span>222a -</span></span><span style="display:flex;"><span>PIDA<span style="color:#f92672">=</span><span style="color:#ae81ff">0001</span> -</span></span><span style="display:flex;"><span>PORTA<span style="color:#f92672">=</span>VGA-0 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 或者这里直接填写Device Product ID里面的结果,先VID后PID。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 字母O,不是数字0,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$VIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span>PIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$PIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># =========自动处理步骤,请勿随意修改==========</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 根据设备ID取其序号</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3、屏映射,多屏重复本段</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$VIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$PIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> xinput map-to-output $I $PORTA -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span>exit <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这个脚本使用<code>xinput list --id-only</code>仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用<code>map-to-output</code>进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。</p> -<h2>3、[2]的进阶版<span class="hx:absolute hx:-mt-20" id="32的进阶版"></span> - <a href="#32%e7%9a%84%e8%bf%9b%e9%98%b6%e7%89%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。</p> -<p>在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是<code>pyudev</code>库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装<code>python3+pyudev</code>,并且使用desktop文件在开机时启动,即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/python3</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- coding: UTF-8 --</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- Author: Blues --</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> pyudev -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>context <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Context() -</span></span><span style="display:flex;"><span>monitor <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Monitor<span style="color:#f92672">.</span>from_netlink(context) -</span></span><span style="display:flex;"><span>monitor<span style="color:#f92672">.</span>filter_by(subsystem<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hid&#39;</span>) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> device <span style="color:#f92672">in</span> iter(monitor<span style="color:#f92672">.</span>poll, <span style="color:#66d9ef">None</span>): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>driver <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#34;hid-multitouch&#34;</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;add&#34;</span> <span style="color:#f92672">or</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;change&#34;</span>: -</span></span><span style="display:flex;"><span> os<span style="color:#f92672">.</span>system(<span style="color:#e6db74">&#34;/var/my-touchscreen/remap-screen&#34;</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照<em>设备名、VID、UID、物理接口</em>四大特征,自动映射到对应的显示屏上了。</p> - - - - - deepin和UOS,快捷方式,开机自启动 - https://www.small09.top/posts/210429-deepinautorun/ - Thu, 29 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210429-deepinautorun/ - - - - <p>修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。</p> -<h2>桌面快捷方式<span class="hx:absolute hx:-mt-20" id="桌面快捷方式"></span> - <a href="#%e6%a1%8c%e9%9d%a2%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>deepin的桌面快捷方式是以<code>*.desktop</code>文件的形式实现的,所以我们需要添加自定义快捷方式的话,只要在桌面添加要给desktop格式的文本文件,编辑内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>[Desktop Entry] -Name=ddd -Exec=&#34;/usr/sbin/xx.sh&#34; -Type=Application</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Desktop Entry</code>表示声明该文件为快捷方式文件。<code>Name</code>是这个文件要显示的名字,设置了之后就可以隐藏原名称和扩展名。<code>Exec</code>是程序的启动脚本,或者启动指令。<code>Type</code>是程序类型,在开始菜单的分类中可以体现。以上四行是必须要有的参数,还有一些其他的参数不影响执行。Exec的脚本必须赋予777权限以执行。</p> -<p>把这个文件放在<code>~/Desktop</code>,就可以看到桌面上多了一个快捷方式了。</p> -<h2>开始菜单<span class="hx:absolute hx:-mt-20" id="开始菜单"></span> - <a href="#%e5%bc%80%e5%a7%8b%e8%8f%9c%e5%8d%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo cp ~/Desktop/刚刚的.desktop /usr/share/applications</code>,过一会或者注销重新登录就能看到开始菜单的响应类型下出现这个快捷方式了。</p> -<h2>开机自动执行<span class="hx:absolute hx:-mt-20" id="开机自动执行"></span> - <a href="#%e5%bc%80%e6%9c%ba%e8%87%aa%e5%8a%a8%e6%89%a7%e8%a1%8c" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>UOS/Deepin和Ubuntu<span class="hx:absolute hx:-mt-20" id="uosdeepin和ubuntu"></span> - <a href="#uosdeepin%e5%92%8cubuntu" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>cp ~/Desktop/刚刚的.desktop ~/.config/autostart</code></p> -<p>需要这个的原因主要是我执行触摸屏映射的指令经常会在桌面启动前(<code>lightdm.service</code>)执行,导致error从而无法进入桌面,将脚本放进<code>/etc/profile.d</code>之后第二天就失效了,所以需要一个在登录桌面后就实现自动执行的功能,多种方法对比下来还是放进桌面环境的开机自启文件夹比较靠谱。这样一般会在进入桌面后5-10秒自动执行,稳定性大幅提高。</p> -<p>经过实际查阅资料和测试,Ubuntu1604也完全适用上面的步骤,只不过可能需要在<code>~/.config/</code>下手动创建一个<code>autostart</code>目录。由于1604已经停止支持,许多人转入了更新的ubuntu系统,猜测近几年的也可以尝试一下。</p> -<h3>麒麟和其他使用X11桌面的Linux<span class="hx:absolute hx:-mt-20" id="麒麟和其他使用x11桌面的linux"></span> - <a href="#%e9%ba%92%e9%ba%9f%e5%92%8c%e5%85%b6%e4%bb%96%e4%bd%bf%e7%94%a8x11%e6%a1%8c%e9%9d%a2%e7%9a%84linux" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>本条目包含UOS和Ubuntu、deepin系统</p> -<p>自启动目录为<code>/etc/xdg/autostart</code>,同样的desktop文件放进去即可。但是麒麟中我使用上面的基础desktop报错,可能需要添加其他内容。</p> - - - - - Linux多显示器触屏调试与暂行解决方案 - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - - - - <p>由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。</p> -<p><em>2021-03-22更新部分内容</em> -<em>2021-04-28再次更新内容</em></p> -<p><strong>2021-09-14 文章已有新版本,请访问《<a href="https://www.small09.top/posts/210824-linuxtouchscreenfin/"target="_blank" rel="noopener">Linux处理多触屏的终极解决方案</a>》</strong></p> -<h2>问题来源<span class="hx:absolute hx:-mt-20" id="问题来源"></span> - <a href="#%e9%97%ae%e9%a2%98%e6%9d%a5%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 -接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为</p> -<p><code>xinput map-to-output $触屏设备id $显示屏名称</code></p> -<blockquote> - <p>2021-04-28更新</p> -<p><code>xinput map-to-output</code>指令支持触摸屏名称作为参数,比如我通过<code>xinput</code>指令看到有一个触摸屏的设备名称为<code>ILITEK XXXX</code>,那么我映射的时候直接输入</p> -<blockquote> - <p><code>xinput map-to-output &quot;ILITEK XXX&quot; HDMI-1</code></p> - -</blockquote> - -</blockquote> -<h2>尝试解决<span class="hx:absolute hx:-mt-20" id="尝试解决"></span> - <a href="#%e5%b0%9d%e8%af%95%e8%a7%a3%e5%86%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ul> -<li>首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。</li> -<li><del>然后<code>xinput list-props $id</code>查看设备的VID,这个在后续自动化处理有用。</del></li> -<li><code>xrandr</code>查看<code>$显示器名称</code></li> -</ul> -<h2>自动化处理<span class="hx:absolute hx:-mt-20" id="自动化处理"></span> - <a href="#%e8%87%aa%e5%8a%a8%e5%8c%96%e5%a4%84%e7%90%86" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 2021-04-28更新:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 本部分后面的都可以不看了!</span> -</span></span><span style="display:flex;"><span>xinput map-to-output <span style="color:#e6db74">&#34;DEVICE_NAME&#34;</span> DISPLAY -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><strong>仅作归档!下面这些方法过于繁琐!</strong></p> -<p>利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。<code>bash this.sh VID1 VID2 ScreenID</code></p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。</span> -</span></span><span style="display:flex;"><span>MYID_FIRST<span style="color:#f92672">=</span>$1 -</span></span><span style="display:flex;"><span>MYID_SECOND<span style="color:#f92672">=</span>$2 -</span></span><span style="display:flex;"><span>OUT_PUT<span style="color:#f92672">=</span>$3 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#[1]</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> MY_INDEX<span style="color:#f92672">=</span>$I -</span></span><span style="display:flex;"><span> break; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>xinput map-to-output $MY_INDEX $OUT_PUT -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI2</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI1</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput | grep -iw DEVICE_NAME<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID#*id=<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID%% *<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>xinput map-to-output $TOUCH_ID SCREEN_NAME</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),<del>使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id</del>。</p> -<p>经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在<code>~/.bashrc</code>中,这样只需要打开一次终端,就可以实现屏幕重新映射。</p> -<h2>后续问题<span class="hx:absolute hx:-mt-20" id="后续问题"></span> - <a href="#%e5%90%8e%e7%bb%ad%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li>当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。</li> -<li>当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数</li> -<li>如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。</li> -</ol> -<h2>触屏校准(如果需要)<span class="hx:absolute hx:-mt-20" id="触屏校准如果需要"></span> - <a href="#%e8%a7%a6%e5%b1%8f%e6%a0%a1%e5%87%86%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>网上说的利用校准来区分多触摸屏的方法是<strong>完全错误</strong>的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)</p> -<ul> -<li><code>sudo apt install xinput-calibrator</code>,需要更新源</li> -<li><code>sudo xinput_calibrator</code></li> -<li>将校准信息保存到<code>/usr/share/X11/xorg.conf.d/10-evdev.conf</code>的&quot;Driver evdev”下面一行,重启生效。</li> -</ul> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 -[2]https://blog.csdn.net/qq_33406883/article/details/106649087 -[3]https://segmentfault.com/a/1190000020334077</p> - - - - - diff --git a/public/tags/docker/index.html b/public/tags/docker/index.html deleted file mode 100644 index 3e54839..0000000 --- a/public/tags/docker/index.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - -Docker – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/docker/index.xml b/public/tags/docker/index.xml deleted file mode 100644 index 9e3a30a..0000000 --- a/public/tags/docker/index.xml +++ /dev/null @@ -1,246 +0,0 @@ - - - 香风家的火柴盒 – Docker - https://www.small09.top/tags/docker/ - Recent content in Docker on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 25 Dec 2023 09:06:25 +0800 - - - - - - - - - - - docker简单笔记 - https://www.small09.top/posts/231225-dockernote/ - Mon, 25 Dec 2023 09:06:25 +0800 - - https://www.small09.top/posts/231225-dockernote/ - - - - <p>学习docker,使用docker,编写docker</p> -<h2>前言<span class="hx:absolute hx:-mt-20" id="前言"></span> - <a href="#%e5%89%8d%e8%a8%80" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。</p> -<p>不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。</p> -<p>由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。</p> -<h2>安装docker和docker compose<span class="hx:absolute hx:-mt-20" id="安装docker和docker-compose"></span> - <a href="#%e5%ae%89%e8%a3%85docker%e5%92%8cdocker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。</p> -<p>apt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 添加docker官方的gpg</span> -</span></span><span style="display:flex;"><span>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加</span> -</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;deb [arch=</span><span style="color:#66d9ef">$(</span>dpkg --print-architecture<span style="color:#66d9ef">)</span><span style="color:#e6db74"> signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu </span><span style="color:#66d9ef">$(</span>. /etc/os-release <span style="color:#f92672">&amp;&amp;</span> echo <span style="color:#e6db74">&#34;</span>$VERSION_CODENAME<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74"> stable&#34;</span> | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 我这边添加的结果是</span> -</span></span><span style="display:flex;"><span>deb <span style="color:#f92672">[</span>arch<span style="color:#f92672">=</span>amd64 signed-by<span style="color:#f92672">=</span>/usr/share/keyrings/docker-archive-keyring.gpg<span style="color:#f92672">]</span> https://download.docker.com/linux/ubuntu jammy stable</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后可以通过apt源安装docker了</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update -</span></span><span style="display:flex;"><span>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>*<em>注意,上面的指令同时安装了docker-compose</em>。如果不安装docker,直接安装docker-compose也是可以的。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -</span></span><span style="display:flex;"><span>sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>更加具体的步骤和细节可以到官网查看:<a href="https://docs.docker.com/engine/install/ubuntu/"target="_blank" rel="noopener">docker安装</a>、<a href="https://docs.docker.com/compose/install/standalone/"target="_blank" rel="noopener">docker-compose安装</a></p> -<h2>docker 基本使用方法<span class="hx:absolute hx:-mt-20" id="docker-基本使用方法"></span> - <a href="#docker-%e5%9f%ba%e6%9c%ac%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 拉取一个镜像</span> -</span></span><span style="display:flex;"><span>docker pull xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 创建容器并运行</span> -</span></span><span style="display:flex;"><span>docker run --name aaa xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 停止容器</span> -</span></span><span style="display:flex;"><span>docker stop docker-id</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>关于运行容器,有很多常用的参数:</p> -<blockquote> - <p>-d 容器转入后台运行</p> -<p>-e 设置容器的环境变量</p> -<p>&ndash;name 容器名称</p> -<p>-p 80:80 将暴露的端口映射到容器内端口,外部:内部</p> -<p>-v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内</p> -<p>-e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。</p> - -</blockquote> -<p>停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。</p> -<p>查询容器id,可以使用指令<code>docker ps</code>。docker还有其他几个查询和控制指令</p> -<blockquote> - <p><code>docker exec 容器 指令</code> 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。</p> -<p><code>docker ps</code> 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。</p> -<p><code>docker images</code> 列出已经下载的镜像列表。与 <code>docker image</code> 指令不同。</p> -<p><code>docker kill 容器名/id</code> 杀死一个无法stop的容器</p> -<p><code>docker rm 容器</code> 删除一个<strong>容器</strong></p> -<p><code>docker rmi 镜像名</code> 删除一个<strong>镜像</strong></p> -<p><code>docker restart 容器ID</code> 重启一个容器,毕竟我们不需要每次都创建新容器。</p> - -</blockquote> -<p>关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。</p> -<h2>更换docker镜像源<span class="hx:absolute hx:-mt-20" id="更换docker镜像源"></span> - <a href="#%e6%9b%b4%e6%8d%a2docker%e9%95%9c%e5%83%8f%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。</p> -<p>修改<code>/etc/docker/daemon.json</code>文件,添加下面的内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ -</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;registry-mirrors&#34;</span>: [ -</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;https://docker.mirrors.ustc.edu.cn&#34;</span> -</span></span><span style="display:flex;"><span> ] -</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>编辑完成后需要重启docker服务。</p> -<p>具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。</p> -<h2>docker-compose<span class="hx:absolute hx:-mt-20" id="docker-compose"></span> - <a href="#docker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。</p> -<p>首先创建一个工作目录,并创建一个<code>docker-compose.yml</code>的文件,默认情况下docker compose指令只认这个文件名。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>version: &#39;3&#39; -services: - [NAME1]: - image: &#34;image/name&#34; - ports: - - 81:80 - - 8080:8080 - environment: - HOSTNAME: &#34;cc&#34; - PORT: 8181 - volumes: - - nginx-data:/etc/nginx - [NAME2]: - image: &#39;xxx&#39;</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,<code>ports</code>字段指定了内外端口的映射,即&rsquo;外部:内部&rsquo;,卷映射同理。<code>environment</code>不需要 - 开头。</p> -<p>编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动</p> -<blockquote> - <p><code>docker compose up</code> 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。</p> -<p><code>docker compose down</code> 停止容器,并删除对应的容器和网络</p> -<p><code>docker compose exec NAME command</code> 在ymal文件内其中一个容器里运行指令</p> - -</blockquote> -<p>docker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。</p> -<p>目前浅学了一下,只有学一点更新一点吧。</p> - - - - - 使用Docker安装TeamSpeak - https://www.small09.top/posts/210218-teamspeakwithdocker/ - Thu, 18 Feb 2021 00:00:00 +0800 - - https://www.small09.top/posts/210218-teamspeakwithdocker/ - - - - <p>TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。</p> -<h2>Teamspeak<span class="hx:absolute hx:-mt-20" id="teamspeak"></span> - <a href="#teamspeak" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。</p> -<p>所以,选择docker安装ts就是一个很不错的选择。</p> -<h2>Docker及其安装<span class="hx:absolute hx:-mt-20" id="docker及其安装"></span> - <a href="#docker%e5%8f%8a%e5%85%b6%e5%ae%89%e8%a3%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。</p> -<p>我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo yum install docker <span style="color:#75715e">#安装docker程序,会自动选择合适的</span> -</span></span><span style="display:flex;"><span>sudo systemctl start docker <span style="color:#75715e">#启动docker服务</span> -</span></span><span style="display:flex;"><span>sudo systemctl enable docker <span style="color:#75715e">#允许docker开机自启</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>Docker安装TS<span class="hx:absolute hx:-mt-20" id="docker安装ts"></span> - <a href="#docker%e5%ae%89%e8%a3%85ts" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak</code></p> -<p>直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。</p> -<h2>端口<span class="hx:absolute hx:-mt-20" id="端口"></span> - <a href="#%e7%ab%af%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>从指令可以看出,docker需要使用到<strong>9987,10011,30033</strong>三个端口,所以需要到服务器后台开启防火墙上对应端口。</p> -<h2>管理员密钥<span class="hx:absolute hx:-mt-20" id="管理员密钥"></span> - <a href="#%e7%ae%a1%e7%90%86%e5%91%98%e5%af%86%e9%92%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。</p> -<p><code>docker ps -a</code>查找所有容器。</p> -<p><code>docker logs -f [CONTATINER ID]</code>查看log,找到token即可。客户端设置之后再说。</p> -<p>密钥只会在第一次运行时打印,注意保存。</p> -<p><em>参考:<a href="https://woolio.cn/683/"target="_blank" rel="noopener">https://woolio.cn/683/</a></em></p> - - - - - diff --git a/public/tags/http/index.html b/public/tags/http/index.html deleted file mode 100644 index d632b5b..0000000 --- a/public/tags/http/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Http – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/http/index.xml b/public/tags/http/index.xml deleted file mode 100644 index 65709cc..0000000 --- a/public/tags/http/index.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - 香风家的火柴盒 – Http - https://www.small09.top/tags/http/ - Recent content in Http on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Fri, 08 Sep 2023 00:00:00 +0800 - - - - - - - - - - - Python socket 收取POST协议内容时没有payload - https://www.small09.top/posts/230908-py-post/ - Fri, 08 Sep 2023 00:00:00 +0800 - - https://www.small09.top/posts/230908-py-post/ - - - - <p>使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况</p> -<p>最近做了一个简单的http服务器,用于接收IoT端上传的json格式的日志。</p> -<p>服务端使用socket中的方法接收原始数据,再对原始数据单独进行处理,根据报文头部的GET或者POST等方法进行具体的操作。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>sock <span style="color:#f92672">=</span> socket<span style="color:#f92672">.</span>socket(socket<span style="color:#f92672">.</span>AF_INET, socket<span style="color:#f92672">.</span>SOCK_STREAM) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>bind((self<span style="color:#f92672">.</span>host, self<span style="color:#f92672">.</span>port)) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>listen(<span style="color:#ae81ff">128</span>) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>(client, address) <span style="color:#f92672">=</span> self<span style="color:#f92672">.</span>sock<span style="color:#f92672">.</span>accept() -</span></span><span style="display:flex;"><span>th <span style="color:#f92672">=</span> Thread(target<span style="color:#f92672">=</span>self<span style="color:#f92672">.</span>accept_request, args<span style="color:#f92672">=</span>(client, address)) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">accept_request</span>(client, address): -</span></span><span style="display:flex;"><span> data <span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) -</span></span><span style="display:flex;"><span> req <span style="color:#f92672">=</span> data<span style="color:#f92672">.</span>decode(<span style="color:#e6db74">&#34;utf-8&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 处理数据的具体方法</span> -</span></span><span style="display:flex;"><span> response <span style="color:#f92672">=</span> process_response(req, client_addr) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>send(response) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># clean up</span> -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>shutdown(<span style="color:#ae81ff">1</span>) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>close()</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码是大概的处理流程。在这个流程中,我发现处理POST的数据的时候,经常只能收到headers部分,payload部分的数据不管发几次都是空的。而且接收缓冲区已经扩大到了8192字节,headers部分的长度只有200多字节,IoT端上传的payload也不过上百字节,不应该是超出缓冲区的问题。</p> -<p><strong>=====2024.01.04更新=======</strong></p> -<p>下面的方法突然某一天就失效了,我不清楚是不是python的环境变化导致的。</p> -<p>其实用flask接收和处理数据会更加方便快捷:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> flask <span style="color:#f92672">import</span> Flask, request -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 实例化flask</span> -</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> Flask(__name__) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 接收和处理post的方法</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.route</span>(<span style="color:#e6db74">&#39;/test&#39;</span>, methods<span style="color:#f92672">=</span>[<span style="color:#e6db74">&#39;POST&#39;</span>]) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv_file_www</span>(): -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post的传入参数</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>args<span style="color:#f92672">.</span>to_dict()) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post所承载的数据</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>data) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#39;OK&#39;</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;__main__&#39;</span>: -</span></span><span style="display:flex;"><span> app<span style="color:#f92672">.</span>run(port<span style="color:#f92672">=</span><span style="color:#ae81ff">31408</span>, host<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.0.0.0&#34;</span>,debug<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面就是一个完整的post接收和处理程序了,不需要调试socket,也不需要自己处理ResponseBuilder,最重要的是能保证获取到post数据。</p> -<p><strong>======以下是原来的内容==========</strong></p> -<p>经过网上搜索与自己尝试,发现socket.recv返回的时候是分段返回的,貌似会按照实际内容切割返回,<strong>必须不断的recv才能完整接收数据</strong>。有一种解决方案是POST传送之前先确定报文的完整擦换个年度,然后利用while循环,接收到对应长度才结束。</p> -<p>但是POST发送的一个不定长的数据,如果每次都通过http报文先传送post完整长度的话,有些浪费资源。于是我想到了这么一个方案:</p> -<p>POST的报文头会包含一个<code>Content-length</code>的数据,记录的是payload的长度。那我在接收阶段就对headers部分进行解码和处理,获取到content-length后,在加上本次获取headers的长度就是POST的完整长度了。</p> -<p>那么将上面代码的<code>client_sock.recv()</code>部分改写成下面的方法:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv</span>(self, client_sock): -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> <span style="color:#ae81ff">8192</span> <span style="color:#75715e"># 记录每次接收的长度</span> -</span></span><span style="display:flex;"><span> lrecv_all<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> <span style="color:#75715e"># 记录数据总长度 </span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">=</span> bytes() <span style="color:#75715e"># 接收的所有数据存入这里</span> -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 解析的payload长度</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 用于记录是否接收到了payload,以及实时记录接收到payload的长度</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> <span style="color:#66d9ef">True</span> : -</span></span><span style="display:flex;"><span> part_body<span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) <span style="color:#75715e"># 循环接收数据</span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">+=</span> part_body <span style="color:#75715e"># 将接收的数据写入data_body</span> -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> len(part_body) <span style="color:#75715e"># 获取本次接收长度</span> -</span></span><span style="display:flex;"><span> lrecv_all <span style="color:#f92672">+=</span> lrecved <span style="color:#75715e"># 计算总长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>: <span style="color:#75715e"># 没有接收到payload部分时,才进入下面的判断流程</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">3</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;GET&#39;</span>: <span style="color:#75715e"># 由于我get方法没出现过断开的问题,因此直接返回即可。</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">4</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;POST&#39;</span>: -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> count_payload_len(data_body) <span style="color:#75715e"># 解析头部,计算payload部分的长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> lrecved <span style="color:#f92672">&lt;</span> payload_len: -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 偶尔会出现能接收到payload的情况,所以多加了一个判断。</span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 能接收payload肯定总长度大于payload_len的</span> -</span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;no payloads, keep recving...&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 计算post报文的总长度,借用payload_flag变量</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> lrecved <span style="color:#f92672">+</span> payload_len -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 当接收到的总长度 &gt;= POST的计算长度,表示所有数据接收完成,退出</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">&lt;=</span> lrecv_all: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> data_body</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>里面解析headers的代码如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">count_payload_len</span>(data): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> d <span style="color:#f92672">in</span> data<span style="color:#f92672">.</span>split(<span style="color:#e6db74">b</span><span style="color:#e6db74">&#39;</span><span style="color:#ae81ff">\r\n</span><span style="color:#e6db74">&#39;</span>): <span style="color:#75715e"># 通过\r\n来分隔报文头</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#e6db74">&#34;LENGTH&#34;</span> <span style="color:#f92672">in</span> d<span style="color:#f92672">.</span>upper()<span style="color:#f92672">.</span>decode(): <span style="color:#75715e"># 如果报文头部有length关键词,当然可以写完整,我的heasers没有其他的length就简化了</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> int(d<span style="color:#f92672">.</span>decode()<span style="color:#f92672">.</span>split(<span style="color:#e6db74">&#34;:&#34;</span>)[<span style="color:#ae81ff">1</span>]) <span style="color:#75715e"># 分隔出payload长度并返回</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码其实写的很复杂,因为我解析POST整体报文的功能已经写完并且通过第三方http报文调试工具验证过了,上IoT设备实验的时候才发现了问题,本着少改一点是一点的原则,就把这一部分复杂化了,但确实解决了我的问题,就OK了。</p> -<p>对了,这篇博客就是利用这个这个方案改造的新服务端进行上传同步的,之前用GitHub Actions进行同步博客,每次运营商都会发一条高危访问的短信和邮件通知我,太烦了。</p> - - - - - diff --git a/public/tags/index.html b/public/tags/index.html deleted file mode 100644 index 9a90638..0000000 --- a/public/tags/index.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - -Tags – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/index.xml b/public/tags/index.xml deleted file mode 100644 index 66161f5..0000000 --- a/public/tags/index.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - 香风家的火柴盒 – Tags - https://www.small09.top/tags/ - Recent content in Tags on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 25 Dec 2023 09:06:25 +0800 - - - - - - - - - - - diff --git a/public/tags/linux/index.html b/public/tags/linux/index.html deleted file mode 100644 index f7d2635..0000000 --- a/public/tags/linux/index.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - - - - -Linux – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - -
-
-
-

Linux

-
-
- -
-
-

- - docker简单笔记 - -

-

2023/12/25

-
-

- - Linux安装VNC服务端 - -

-

2023/11/27

-
-

- - DEB打包方法简介 - -

-

2021/10/19

-
-

- - 免密码使用sudo - -

-

2021/06/30

-
-

- - Linux修改mac地址 - -

-

2021/03/28

-
-

- - Linux串口和udev理解 - -

-

2021/03/11

-
-
-
-
- - - - - - - - diff --git a/public/tags/linux/index.xml b/public/tags/linux/index.xml deleted file mode 100644 index 3ae3db7..0000000 --- a/public/tags/linux/index.xml +++ /dev/null @@ -1,1636 +0,0 @@ - - - 香风家的火柴盒 – Linux - https://www.small09.top/tags/linux/ - Recent content in Linux on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 25 Dec 2023 09:06:25 +0800 - - - - - - - - - - - docker简单笔记 - https://www.small09.top/posts/231225-dockernote/ - Mon, 25 Dec 2023 09:06:25 +0800 - - https://www.small09.top/posts/231225-dockernote/ - - - - <p>学习docker,使用docker,编写docker</p> -<h2>前言<span class="hx:absolute hx:-mt-20" id="前言"></span> - <a href="#%e5%89%8d%e8%a8%80" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。</p> -<p>不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。</p> -<p>由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。</p> -<h2>安装docker和docker compose<span class="hx:absolute hx:-mt-20" id="安装docker和docker-compose"></span> - <a href="#%e5%ae%89%e8%a3%85docker%e5%92%8cdocker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。</p> -<p>apt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 添加docker官方的gpg</span> -</span></span><span style="display:flex;"><span>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加</span> -</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;deb [arch=</span><span style="color:#66d9ef">$(</span>dpkg --print-architecture<span style="color:#66d9ef">)</span><span style="color:#e6db74"> signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu </span><span style="color:#66d9ef">$(</span>. /etc/os-release <span style="color:#f92672">&amp;&amp;</span> echo <span style="color:#e6db74">&#34;</span>$VERSION_CODENAME<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74"> stable&#34;</span> | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 我这边添加的结果是</span> -</span></span><span style="display:flex;"><span>deb <span style="color:#f92672">[</span>arch<span style="color:#f92672">=</span>amd64 signed-by<span style="color:#f92672">=</span>/usr/share/keyrings/docker-archive-keyring.gpg<span style="color:#f92672">]</span> https://download.docker.com/linux/ubuntu jammy stable</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后可以通过apt源安装docker了</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update -</span></span><span style="display:flex;"><span>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>*<em>注意,上面的指令同时安装了docker-compose</em>。如果不安装docker,直接安装docker-compose也是可以的。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -</span></span><span style="display:flex;"><span>sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>更加具体的步骤和细节可以到官网查看:<a href="https://docs.docker.com/engine/install/ubuntu/"target="_blank" rel="noopener">docker安装</a>、<a href="https://docs.docker.com/compose/install/standalone/"target="_blank" rel="noopener">docker-compose安装</a></p> -<h2>docker 基本使用方法<span class="hx:absolute hx:-mt-20" id="docker-基本使用方法"></span> - <a href="#docker-%e5%9f%ba%e6%9c%ac%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 拉取一个镜像</span> -</span></span><span style="display:flex;"><span>docker pull xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 创建容器并运行</span> -</span></span><span style="display:flex;"><span>docker run --name aaa xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 停止容器</span> -</span></span><span style="display:flex;"><span>docker stop docker-id</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>关于运行容器,有很多常用的参数:</p> -<blockquote> - <p>-d 容器转入后台运行</p> -<p>-e 设置容器的环境变量</p> -<p>&ndash;name 容器名称</p> -<p>-p 80:80 将暴露的端口映射到容器内端口,外部:内部</p> -<p>-v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内</p> -<p>-e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。</p> - -</blockquote> -<p>停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。</p> -<p>查询容器id,可以使用指令<code>docker ps</code>。docker还有其他几个查询和控制指令</p> -<blockquote> - <p><code>docker exec 容器 指令</code> 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。</p> -<p><code>docker ps</code> 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。</p> -<p><code>docker images</code> 列出已经下载的镜像列表。与 <code>docker image</code> 指令不同。</p> -<p><code>docker kill 容器名/id</code> 杀死一个无法stop的容器</p> -<p><code>docker rm 容器</code> 删除一个<strong>容器</strong></p> -<p><code>docker rmi 镜像名</code> 删除一个<strong>镜像</strong></p> -<p><code>docker restart 容器ID</code> 重启一个容器,毕竟我们不需要每次都创建新容器。</p> - -</blockquote> -<p>关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。</p> -<h2>更换docker镜像源<span class="hx:absolute hx:-mt-20" id="更换docker镜像源"></span> - <a href="#%e6%9b%b4%e6%8d%a2docker%e9%95%9c%e5%83%8f%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。</p> -<p>修改<code>/etc/docker/daemon.json</code>文件,添加下面的内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ -</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;registry-mirrors&#34;</span>: [ -</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;https://docker.mirrors.ustc.edu.cn&#34;</span> -</span></span><span style="display:flex;"><span> ] -</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>编辑完成后需要重启docker服务。</p> -<p>具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。</p> -<h2>docker-compose<span class="hx:absolute hx:-mt-20" id="docker-compose"></span> - <a href="#docker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。</p> -<p>首先创建一个工作目录,并创建一个<code>docker-compose.yml</code>的文件,默认情况下docker compose指令只认这个文件名。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>version: &#39;3&#39; -services: - [NAME1]: - image: &#34;image/name&#34; - ports: - - 81:80 - - 8080:8080 - environment: - HOSTNAME: &#34;cc&#34; - PORT: 8181 - volumes: - - nginx-data:/etc/nginx - [NAME2]: - image: &#39;xxx&#39;</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,<code>ports</code>字段指定了内外端口的映射,即&rsquo;外部:内部&rsquo;,卷映射同理。<code>environment</code>不需要 - 开头。</p> -<p>编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动</p> -<blockquote> - <p><code>docker compose up</code> 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。</p> -<p><code>docker compose down</code> 停止容器,并删除对应的容器和网络</p> -<p><code>docker compose exec NAME command</code> 在ymal文件内其中一个容器里运行指令</p> - -</blockquote> -<p>docker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。</p> -<p>目前浅学了一下,只有学一点更新一点吧。</p> - - - - - Linux安装VNC服务端 - https://www.small09.top/posts/231127-vncserver/ - Mon, 27 Nov 2023 09:33:32 +0800 - - https://www.small09.top/posts/231127-vncserver/ - - - - <p><em>(笔记)在Linux系统里安装远程桌面VNC客户端并连接。</em></p> -<h3>1. 安装NVC服务端<span class="hx:absolute hx:-mt-20" id="1-安装nvc服务端"></span> - <a href="#1-%e5%ae%89%e8%a3%85nvc%e6%9c%8d%e5%8a%a1%e7%ab%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install x11vnc</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h3>2. 设置远程连接密码<span class="hx:absolute hx:-mt-20" id="2-设置远程连接密码"></span> - <a href="#2-%e8%ae%be%e7%bd%ae%e8%bf%9c%e7%a8%8b%e8%bf%9e%e6%8e%a5%e5%af%86%e7%a0%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>x11vnc --storepasswd -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 输入两次连接密码以设定</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 询问 Write password to /home/xxx/.vnc/passwd </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 时,输入y并回车保存密码。</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ul> -<li>该步骤不需要使用sudo!</li> -</ul> -<h3>3. 使VNC服务开机自启动<span class="hx:absolute hx:-mt-20" id="3-使vnc服务开机自启动"></span> - <a href="#3-%e4%bd%bfvnc%e6%9c%8d%e5%8a%a1%e5%bc%80%e6%9c%ba%e8%87%aa%e5%90%af%e5%8a%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>使用service的方法,将vnc作为一个服务开机启动</p> -<p>创建<code>/lib/systemd/system/x11vnc.service</code>文件并填入下面的内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[Unit]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Description</span><span style="color:#f92672">=</span><span style="color:#e6db74">Start x11vnc at startup.</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">After</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Service]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Type</span><span style="color:#f92672">=</span><span style="color:#e6db74">simple</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">ExecStart</span><span style="color:#f92672">=</span><span style="color:#e6db74">/usr/bin/x11vnc -auth guess -rfbauth /home/xxx/.vnc/passwd</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Install]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">WantedBy</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ul> -<li>注意,/home/xxx 需要替换成实际的用户名!</li> -</ul> -<h3>使用vnc客户端连接<span class="hx:absolute hx:-mt-20" id="使用vnc客户端连接"></span> - <a href="#%e4%bd%bf%e7%94%a8vnc%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>我使用Windows上的VncViewer,官网<a href="https://www.realvnc.com/en/"target="_blank" rel="noopener">RealVNC</a>,这个软件假冒的很多,下载需要注意甄别。</p> - - - - - 讨论在Debian系操作系统中重新提取已安装的软件并重新打包 - https://www.small09.top/posts/230508-remake-deb/ - Mon, 08 May 2023 14:43:41 +0800 - - https://www.small09.top/posts/230508-remake-deb/ - - - - <p>Debian系操作系统采用dpkg作为包管理器,在安装软件后会存储deb包信息,是否可以提取这些信息并且重新打deb包转移到其他平台使用?</p> -<p>之前有一个需求,要从UOS里面提取一个软件,并且将其安装到另一台设备中。当时找了一圈都没有找到相关的提取教程。但是从逻辑上来讲,dpkg安装的软件会保存deb包的相关信息,所以理论上讲是可以提取出软件包的所有内容,然后我们重新打包的。</p> -<p>今天在一个机缘巧合下(其实是懒得研究dpkg原理,瞎猫撞上死耗子),发现了dpkg保存文件信息的地点,于是接下来可以展开畅想:提取已经安装的软件并重新打包。</p> -<h2>文件的保存地点<span class="hx:absolute hx:-mt-20" id="文件的保存地点"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%9a%84%e4%bf%9d%e5%ad%98%e5%9c%b0%e7%82%b9" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我在找fcitx有关的配置文件进行全盘搜索的时候,找到了一条目录<code>/usr/lib/dpkg-db/info</code>,这个目录里面保留了fcitx的&quot;conffiles&quot;, &ldquo;md5sums&rdquo;, &ldquo;postinst&rdquo;, &ldquo;prerm&quot;四个文件,以及一个list文件。恰好fcitx.deb解包出来的DEBIAN文件夹内也是这四个文件加上额外的control文件,。</p> -<p>那么合理猜测,dpkg安装软件的时候,不仅把软件本身的文件移动到对应位置,还把DEBIAN里面的信息和脚本也转移到<code>/usr/lib/dpkg-db/</code>里面保存了。</p> -<p>而<code>fcitx.list</code>文件中记录的是所有的文件及其路径。想必这里面就是全部的文件了。</p> -<p>至于control文件,则都被保存到了<code>/usr/lib/dpkg-db/status</code>这个文本文件中。</p> -<h2>流程设想<span class="hx:absolute hx:-mt-20" id="流程设想"></span> - <a href="#%e6%b5%81%e7%a8%8b%e8%ae%be%e6%83%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>既然deb包所有必要的文件都找到了,那么就可以尝试一下还原过程了。在<a href="https://www.small09.top/posts/211019-dpkg_package_guide/"target="_blank" rel="noopener">这篇文章</a>里我研究过deb包的组成、格式和打包方法。</p> -<p>比如对于软件包A:</p> -<ol> -<li> -<p>创建一个工作目录,并在其中新建<code>DEBIAN</code>目录。</p> -</li> -<li> -<p>将<code>/usr/lib/dpkg-db/info</code>中所有该软件的脚本和信息(除了A.list)转移到<code>DEBIAN</code>中,并重命名成规范名称。</p> -</li> -<li> -<p>将<code>/usr/lib/dpkg-db/status</code>中与软件A有关的部分提取出来,保存到<code>DEBIAN/control</code>文件中。</p> -</li> -<li> -<p>根据A.list文件,找到软件包含的所有文件,将其按原样整理到工作目录内。</p> -</li> -<li> -<p>使用<code>dpkg -b</code>指令重新打包。</p> -</li> -</ol> -<h2>局限性<span class="hx:absolute hx:-mt-20" id="局限性"></span> - <a href="#%e5%b1%80%e9%99%90%e6%80%a7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上毕竟只是设想,没有进行试验,所以估计会出现这些问题,希望有需要的人尝试后可以解决。</p> -<ul> -<li> -<p>提取信息的难度: 由于<code>/usr/lib/dpkg-db/status</code>文件是一个包含几乎所有deb信息的文本文件,体积大内容乱,对于自动化脚本来说有些难度。加上一些软件的衍生品会在软件名上直接加后缀,对于提取的脚本来讲可能造成混淆,提取出不必要的东西。</p> -</li> -<li> -<p>获取源文件的难度: 不排除一些软件安装时会删除、修改自身的一些文件,可能打包会后会缺失内容。一些软件安装过程中会进行手动配置从而造成内容改变,重做出来的软件包不一定完整。</p> -</li> -<li> -<p>签名问题: 我们打包的软件没有原作者的数字签名,可能无法安装,也可能时候安装官方软件时冲突。</p> -</li> -<li> -<p>这个方案只能处理普通的软件,一些deb打包源码,安装时进行编译的,应该是不能用这种方案复原的。(apt的deb-src源)</p> -</li> -</ul> -<p>最后,希望有大佬可以验证一下这个方案。</p> - - - - - 从再生龙(clonezilla)镜像直接提取文件 - https://www.small09.top/posts/220714-unpackclonezillaimage/ - Thu, 14 Jul 2022 13:05:51 +0800 - - https://www.small09.top/posts/220714-unpackclonezillaimage/ - - - - <p>从clonezilla的镜像直接提取文件,免于先全盘全区恢复。</p> -<p>再生龙(clonezilla)是一个常用的Linux系统备份工具,适用于多个版本、多种CPU架构的电脑。</p> -<p>再生龙生成的镜像是比较特殊的格式,如果想要从里面提取文件,通常只能进行镜像恢复后进入系统提取。但是往往我们没有那么多硬盘来恢复系统。</p> -<p>再生龙的原理简单来说就是把硬盘分区使用partclone工具打包成img文件,然后使用gzip进行分卷压缩。我们只需要逆向操作,利用工具,把镜像解包挂载,直接在当前系统挂载,就可以得到原分区的文件了。</p> -<h2>挂载方法:<span class="hx:absolute hx:-mt-20" id="挂载方法"></span> - <a href="#%e6%8c%82%e8%bd%bd%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>1. 环境需求<span class="hx:absolute hx:-mt-20" id="1-环境需求"></span> - <a href="#1-%e7%8e%af%e5%a2%83%e9%9c%80%e6%b1%82" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>我们操作再生龙镜像时,最好是使用Linux环境。这个环境中,需要安装partclone(也就是再生龙生成镜像的核心工具)。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install partclone -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以Debian系为例</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>并且我们需要准备一个足够大的硬盘,用来存储镜像包和解包出的img文件。硬盘/分区的空间需要大于镜像本来的<strong>分区</strong>空间。</p> -<h3>2. 合并镜像<span class="hx:absolute hx:-mt-20" id="2-合并镜像"></span> - <a href="#2-%e5%90%88%e5%b9%b6%e9%95%9c%e5%83%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>再生龙默认情况下会把一个硬盘分区分按4GB的大小进行分包,通常以<code>gz.aa</code>、<code>gz.ab</code>等结尾,我们需要把这些包重新整合成一个gz包。</p> -<p>整合成gz包后,我们就可以解压gz来得到镜像img了。我们可以把两个步骤用流的方式写入一条命令,节省硬盘空间。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat sda1.ext4-ptcl-img.gz.* | gzip -d -c &gt; sda1.img</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这一步生成的img文件不能直接使用(google上也有说能用的,但是我试下来不能),需要进行一次转换。经过实际操作,这个文件所占用的空间是镜像原分区的大小,但是统计硬盘使用量时却只计算实际大小,希望了解的人可以帮忙解释一下。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>partclone.extfs -r -s sda1.img -o sda1-ex.img --restore_raw_file</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>当然上面两条指令也可以使用流的方式再次封装到一条,但是消耗的时间、失败后重新来过的时间,都会更长。</p> -<h2>3.挂载镜像<span class="hx:absolute hx:-mt-20" id="3挂载镜像"></span> - <a href="#3%e6%8c%82%e8%bd%bd%e9%95%9c%e5%83%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>将最后生成的img镜像挂载到我们的/mnt(或其他)目录,进入这个目录就可以看到原来全部的文件了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -o loop -t ext4 sda1-ex.img /mnt</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>最后我们只需要进入 <code>/mnt</code> 目录,就可以想直接操作硬盘一样把文件复制出来了。</p> - - - - - Deepin/UOS文件管理器隐藏不需要的盘符 - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - Wed, 23 Feb 2022 09:18:55 +0800 - - https://www.small09.top/posts/220223-deepin_partsinddefilemanager/ - - - - <p>Deepin/UOS 里处理文件管理器显示太多盘符的问题。</p> -<h2>现象<span class="hx:absolute hx:-mt-20" id="现象"></span> - <a href="#%e7%8e%b0%e8%b1%a1" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在使用UOS操作系统时,有时候打开文件管理器,发现除了平常常见的“系统盘”、“数据盘”外,出现了更多的盘符(不属于移动u盘)。在<code>/etc/fstab</code>文件添加或删除“”并没有效果。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230924406.png" alt="image-20220223090517363" loading="lazy" /></p> -<h2>原理/原因<span class="hx:absolute hx:-mt-20" id="原理原因"></span> - <a href="#%e5%8e%9f%e7%90%86%e5%8e%9f%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>这是因为系统/etc/udev/rules.d文件夹做了非法修改。有些人盲目替换了文件夹文件,导致配置文件变化,系统无法正确执行隐藏操作。</p> -<h2>处理方法<span class="hx:absolute hx:-mt-20" id="处理方法"></span> - <a href="#%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li> -<p>打开<code>/etc/udev/rules.d</code>目录,查看是否有一个《80-udisks2.rules》文件。如果该文件不存在,请创建。</p> -</li> -<li> -<p>打开终端,使用root权限打开编辑</p> -</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo deepin-editor /etc/udev/rules.d/80-udisk2.rules</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ol start="3"> -<li> -<p><strong>打开新的终端</strong>,输入执行 <code>blkid -f</code> ,记录LABLE、UUID两列</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230928320.png" alt="截图录屏_选择区域_20220223090208" loading="lazy" /></p> -</li> -<li> -<p>对比<code>80-udisks2.rules</code>的内容,将里面的ENV{ID_FS_UUID}后面引号中内容换成第3步中显示的新的UUID。</p> -<p>(#号后面内容即为盘符,对应3中的LABEL,双等号后面就是UUID,四行都需要替换)</p> -<p>​ <img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202202230927888.png" alt="截图录屏_选择区域_20220223090606" loading="lazy" /></p> -</li> -<li> -<p>保存文件并重启计算机,即可看到效果。</p> -</li> -<li> -<p>该方法对Deepin系统也有效。对于其他使用了dde-file-manager的应该也是有作用的。</p> -</li> -</ol> - - - - - 定制自己的Linux ISO镜像 - https://www.small09.top/posts/220104-diylinuxiso/ - Tue, 04 Jan 2022 09:17:38 +0800 - - https://www.small09.top/posts/220104-diylinuxiso/ - - - - <p>想要在原版的Linux镜像上添加自定义的软件,但是不想、不会编译,那么就可以基于Linux的iso文件进行修改,定制自己的安装试用镜像。</p> -<p>起因是因为对付信创操作系统的备份恢复时,UOS、麒麟自带的工具都超级不好用,两个系统的镜像不统一,导致实际使用的时候各种问题和不方便。所以使用clonezilla再生龙工具自己做一个PE镜像。这个镜像不仅可以备份、安装系统,还能够修改硬盘大小、应急拯救系统等多种功能。并且它是一个完整的系统可以安装使用。</p> -<h2>基本计划<span class="hx:absolute hx:-mt-20" id="基本计划"></span> - <a href="#%e5%9f%ba%e6%9c%ac%e8%ae%a1%e5%88%92" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>之前尝试过使用<a href="http://bbs.wuyou.net/forum.php?mod=viewthread&amp;tid=409980"target="_blank" rel="noopener">deepin魔改lub工具</a>制作系统的完整镜像,但是启动总是失败。<a href="https://forum.ubuntu.org.cn/viewtopic.php?t=206287"target="_blank" rel="noopener">LUB</a>全称是<em>Live Ubuntu Backup</em>,是Ubuntu的一个工具,到了同为Debian系的deepin魔改的UOS上就水土不服了。(好绕,套娃呢搁这儿</p> -<p>所以采取另一种办法,用已有的Linux iso,通过解压其系统文件filesystem.squashfs,然后替换关键文件,最后实现自定义系统。</p> -<h2>解压、修改、打包Linux文件系统<span class="hx:absolute hx:-mt-20" id="解压修改打包linux文件系统"></span> - <a href="#%e8%a7%a3%e5%8e%8b%e4%bf%ae%e6%94%b9%e6%89%93%e5%8c%85linux%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>首先把Linux iso挂载到系统中。把里面的filesystem.squashfs文件复制出来(因为iso是只读的,复制出来后也方便管理和备份)。我这里以UOS1040为例,其文件系统在<code>./live</code>目录下</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -o loop /xxx/xxx.iso /media/usrname/isofolder -</span></span><span style="display:flex;"><span>cd /media/usrname/isofolder/live/ -</span></span><span style="display:flex;"><span>cp ./filesystem.squashfs ~</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>安装<code>squashfs-tools</code>工具,用来压缩解压归档文件。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install squashfs-tools -</span></span><span style="display:flex;"><span><span style="color:#75715e">#回到主目录后,解压filesystem.squashfs文件</span> -</span></span><span style="display:flex;"><span>sudo unsquashfs filesystem.squashfs</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>解压后可以看到主目录多一个<code>squashfs-root</code>目录,里面存放的就是一个Linux的文件系统了。这时候把你需要的文件拷贝进去,比如我替换了/usr、/opt、/etc三个目录,这三个目录保存了我安装的clonezilla应用及其配置程序,以及我编写的辅助脚本和自启动脚本。</p> -<p>修改好了就可以打包了。第一个参数是刚刚解压出来修改好的文件系统,第二个参数是输出的名称。建议把之前拷贝出来的squashfs文件改名进行保存。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mksquashfs squashfs-root/ filesystem.squashfs</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>重建Linux iso<span class="hx:absolute hx:-mt-20" id="重建linux-iso"></span> - <a href="#%e9%87%8d%e5%bb%balinux-iso" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最后我们需要重建ISO文件。由于我们是基于原来的ISO修改的,所以只需要替换iso里面的filesystem.squashfs文件即可。否则还需要更换系统内核img/lz、重写引导。</p> -<p>把新生成的filesystem.squashfs文件拷贝到Windows系统里,打开UltraISO软件,直接替换Live目录下的filesystem.squashfs文件。同时我们也可以修改<code>EFI/grub.cfg</code>文件,毕竟这个系统主要是使用而不是安装。我调换了安装和试用的次序,并把等待时间增加到60s。</p> -<p>最后进行修改ISO名称等小操作,保存为ISO文件就可以了。</p> -<p>新生成的ISO文件既可以用rufus等工具烧录到U盘中制作PE盘,也可以试用ventoy工具制作成多系统启动盘,甚至可以烧录一张光盘来使用。</p> - - - - - 在Linux环境下修改用户名和主目录 - https://www.small09.top/posts/211203-linuxchangeusername/ - Fri, 03 Dec 2021 09:01:23 +0800 - - https://www.small09.top/posts/211203-linuxchangeusername/ - - - - <p>如何在Linux下完整修改当前用户名和主目录,还不影响其他文件?</p> -<p>Linux的用户名是一个用户的字符串表示,是可以修改的。只要用户的id不改变就不会被系统认作新用户,所有的权限都可以继承。下面介绍如何修改用户的名称、所属组,并更改主目录的名称与对应关系。</p> -<h2>一、进入“单用户模式”<span class="hx:absolute hx:-mt-20" id="一进入单用户模式"></span> - <a href="#%e4%b8%80%e8%bf%9b%e5%85%a5%e5%8d%95%e7%94%a8%e6%88%b7%e6%a8%a1%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>为了修改用户名时不影响程序运行,需要把当前用户打开的所有程序都关闭。该方法可以快速注销当前用户。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>init <span style="color:#ae81ff">1</span> -</span></span><span style="display:flex;"><span>执行后输入当前用户密码 -</span></span><span style="display:flex;"><span>进入黑屏终端后需要输入root密码,可以使用sudo passwd 提前设置</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>对于屏蔽init指令的系统,一般情况下注销用户就可以了,但是有些GUI桌面环境就是以当前用户的身份运行的,所以提供如下几个方式关闭当前用户,挨个尝试即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 1 桌面环境中点击注销</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2 杀掉当前用户所有进程</span> -</span></span><span style="display:flex;"><span>pkill -kill -u old_name -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3 杀掉进程后可能桌面重启,关闭Lightdm管理器</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># Ctrl + Alt + F2 进入第二页面,以root用户登录(可能需要提前设置root密码)</span> -</span></span><span style="display:flex;"><span>systemctl stop lightdm -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 然后再次执行第二步</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>二、修改信息<span class="hx:absolute hx:-mt-20" id="二修改信息"></span> - <a href="#%e4%ba%8c%e4%bf%ae%e6%94%b9%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>init 0</code>可以直接进入黑屏的终端,或者使用 <code>ctrl + alt + f2</code>进入(远程连接可以),以root用户登录。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 1 修改组的名称</span> -</span></span><span style="display:flex;"><span>groupmod -n new_name old_name -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2 修改用户名 -l 改名字 -d 改目录 -g 改组</span> -</span></span><span style="display:flex;"><span>usermod -l new_name -d /home/new_name -g new_name old_name -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3 修改主目录</span> -</span></span><span style="display:flex;"><span>mv /home/old_name /home/new_name</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>最后回到图形化界面,输入<code>init 5</code> ,或者重启电脑。</p> -<p>修改完主目录后记得检查是不是有其他软连接指向旧目录,需要进行更新,否则还会遇到问题。</p> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p># <a href="https://blog.csdn.net/weixin_30016961/article/details/116543982"target="_blank" rel="noopener">linux用户家目录怎么修改,Linux 更改用户名,用户组和主目录</a></p> -<p># <a href="https://www.runoob.com/linux/linux-comm-usermod.html"target="_blank" rel="noopener">菜鸟教程-usermod指令</a></p> -<p># <a href="https://blog.csdn.net/weixin_40001125/article/details/88903115"target="_blank" rel="noopener">linux组的管理:修改组名字,删除组,使用sudo权限</a></p> - - - - - DEB打包方法简介 - https://www.small09.top/posts/211019-dpkg_package_guide/ - Tue, 19 Oct 2021 10:12:23 +0800 - - https://www.small09.top/posts/211019-dpkg_package_guide/ - - - - <p>简单介绍deb打包的方法,包括目录树格式和打包注意事项。</p> -<h2>文件结构<span class="hx:absolute hx:-mt-20" id="文件结构"></span> - <a href="#%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录<code>/</code>。一个工作空间的目录树如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code> PackageDIR - ├─DEBIAN - ├─opt - │ └─kushidou-touchscreen - │ └─desktops - ├─usr - │ ├─bin - │ └─share - └─var</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中,<code>DEBIAN</code>目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。</p> -<h2>DEBIAN<span class="hx:absolute hx:-mt-20" id="debian"></span> - <a href="#debian" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>DEBIAN</code>目录下有一个control文件和至多四个脚本文件。</p> -<h3>control<span class="hx:absolute hx:-mt-20" id="control"></span> - <a href="#control" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>control</code>文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。</p> -<table> - <thead> - <tr> - <th>NAME</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>Package</td> - <td>软件名,<code>dpkg -l</code> 列出的名字</td> - </tr> - <tr> - <td>Version</td> - <td>版本号-修订号</td> - </tr> - <tr> - <td>Section</td> - <td>软件类型,比如mail, test, x11等</td> - </tr> - <tr> - <td>Priority</td> - <td>优先级/重要性,比如optional 可选的</td> - </tr> - <tr> - <td>Architecture</td> - <td>软件架构,比如x86, arm64</td> - </tr> - <tr> - <td>Depends</td> - <td>依赖环境,用 <code>,</code> 隔开,用<code>(&gt;=&lt; )</code>指定版本号</td> - </tr> - <tr> - <td>Suggests</td> - <td>推荐安装,指非必要依赖,可以提供更多功能</td> - </tr> - <tr> - <td>Maintainer</td> - <td>作者 &lt;邮箱或者其他联系方式&gt;</td> - </tr> - <tr> - <td>Descritprion</td> - <td>简介,可以换行书写</td> - </tr> - </tbody> -</table> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20211019101901.png" alt="image-20211019094048011" loading="lazy" /></p> -<h3>额外脚本<span class="hx:absolute hx:-mt-20" id="额外脚本"></span> - <a href="#%e9%a2%9d%e5%a4%96%e8%84%9a%e6%9c%ac" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>DEBIAN</code>目录下之多放置四个可执行脚本,包括<strong>安装前<code>preinst</code></strong>、<strong>安装后<code>postinst</code></strong>、<strong>卸载前<code>prerm</code></strong>、<strong>卸载前<code>postrm</code></strong>,四个脚本都需要以<code>#!/bin/bash</code>开头,内容与普通脚本无异,文件名不需要后缀。</p> -<p>这些脚本主要实现复制快捷方式、建立软连接、添加环境变量、添加额外的文件和配置等操作。这些脚本是以<code>root</code>身份运行,注意他们创建文件的访问权限。inst创建的文件无法被dpkg删除,需要使用rm脚本自行处理。</p> -<p>此外<code>postinst</code>可以用来启动已安装的程序,<code>prerm</code>常用来停止正在运行的程序。</p> -<h3>md5sums<span class="hx:absolute hx:-mt-20" id="md5sums"></span> - <a href="#md5sums" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>为了防止安装包被篡改,可以计算每个二进制文件的md5值存放在这个文件里。非必要。</p> -<h2>打包<span class="hx:absolute hx:-mt-20" id="打包"></span> - <a href="#%e6%89%93%e5%8c%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>所有文件配置完成后,进入工作空间上级目录,执行指令</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dpkg -b ./PackageDIR packagename.deb</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>deb包命名的一般规则为 <strong>软件名_版本-修订号_架构.deb</strong></p> -<h2>其他信息<span class="hx:absolute hx:-mt-20" id="其他信息"></span> - <a href="#%e5%85%b6%e4%bb%96%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>一般公开发行的安装包应该包含其他信息,如版权信息、changelog、doc、man手册等。这些文件都有各自的编撰格式,主要是为了方便系统识别和二次开发,与用户直接体验无关。</p> - - - - - Linux恢复操作系统后mdadm导致开机变慢的方法 - https://www.small09.top/posts/210914-mdadm/ - Tue, 14 Sep 2021 15:16:13 +0800 - - https://www.small09.top/posts/210914-mdadm/ - - - - <p>解决Linux系统异地恢复后开机mdadm报错导致开机时间变长。</p> -<h2>现象<span class="hx:absolute hx:-mt-20" id="现象"></span> - <a href="#%e7%8e%b0%e8%b1%a1" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用deepin-clone恢复UOS镜像后,开机会不断跳一条日志:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mdadm: no arrays found in config file or automatically</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>大概蹦个15条后,系统才真正开机。mdadm好像是一个磁盘raid管理工具,当磁盘变化后其配置也不适配了,必须等到超时才会加载默认配置。那么我们就为其生成一个新的配置即可解决问题。</p> -<h2>方案<span class="hx:absolute hx:-mt-20" id="方案"></span> - <a href="#%e6%96%b9%e6%a1%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>步骤一:删除mdadm.conf</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo rm /etc/mdadm/mdadm.conf</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>步骤二:生成新的mdadm.conf</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo update-initramfs -u</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>ps:如果是swap分区问题导致等待90s开机慢,不归这儿管。</p> -<h2>从这儿抄的:<span class="hx:absolute hx:-mt-20" id="从这儿抄的"></span> - <a href="#%e4%bb%8e%e8%bf%99%e5%84%bf%e6%8a%84%e7%9a%84" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><a href="https://blog.csdn.net/KuXiaoQuShiHuai/article/details/99686620"target="_blank" rel="noopener">W: mdadm: no arrays found in config file or automatically导致开机变慢的解决方案(deepin)</a></p> - - - - - 使用dd指令备份和恢复Linux系统(硬盘级) - https://www.small09.top/posts/210914-linuxbackupdd/ - Tue, 14 Sep 2021 13:51:16 +0800 - - https://www.small09.top/posts/210914-linuxbackupdd/ - - - - <p>害,谁不是个DD (誰でも 大好き)了呢!</p> -<p>但是这玩意儿太慢了。。。</p> -<h2>起因<span class="hx:absolute hx:-mt-20" id="起因"></span> - <a href="#%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用UOS的时候经常需要备份镜像并分享给其他部门或者办事处的人。传统的方法是进入系统自带的Recovery分区,打开备份软件制作镜像,但是这存在两个问题:A. 镜像特别巨大,系统多大镜像就占多大。B. 必须先拥有系统,才能恢复镜像。最新版的系统中已经去掉了Recovery分区,而LiveCD镜像还不是很好用,于是有了这篇博客,试图寻找一个简单的方法来进行恢复和备份。</p> -<h2>DD说明<span class="hx:absolute hx:-mt-20" id="dd说明"></span> - <a href="#dd%e8%af%b4%e6%98%8e" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>dd指令是一个简单的复制指令,它不管源和目标的编码、格式、数据结构,简单粗暴的把二进制数据从A复制到B。所以恢复的目标硬盘甚至不需要提前分区,因为dd会把分区信息也写入。</p> -<p>dd指令依然是有多少数据占多少空间,所以我们可以使用gzip进行压缩。具体代码后面贴出来。</p> -<p>实际使用中,发现dd指令除了方便,就没有其他优点了。它因为要读取硬盘所有数据(包括垃圾数据),即便用SSD,读盘速度还是会很慢,三刻钟才读了200GiB数据,平均75MB/s,而使用uos自带的deepin-clone,三个系统都备份完了。</p> -<h2>DD备份<span class="hx:absolute hx:-mt-20" id="dd备份"></span> - <a href="#dd%e5%a4%87%e4%bb%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda of<span style="color:#f92672">=</span>/dev/sdb <span style="color:#f92672">=</span>&gt; 备份整个磁盘到另外一个磁盘 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>sda.img <span style="color:#f92672">=</span>&gt; 备份整个磁盘为某个文件 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 备份并且压缩 -</span></span><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M | gzip &gt; sda.img <span style="color:#f92672">=</span>&gt; 指定块大小,备份并压缩(据说能提速)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>DD复原<span class="hx:absolute hx:-mt-20" id="dd复原"></span> - <a href="#dd%e5%a4%8d%e5%8e%9f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>dd <span style="color:#66d9ef">if</span><span style="color:#f92672">=</span>/dev/sdb of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从另一个磁盘恢复回来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda <span style="color:#f92672">=</span>&gt;从压缩的文件恢复出来 -</span></span><span style="display:flex;"><span>gzip -dc sda.img | dd of<span style="color:#f92672">=</span>/dev/sda bs<span style="color:#f92672">=</span>1M <span style="color:#f92672">=</span>&gt;前面指定了块大小,这里也需要</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>本文参考(抄)了以下内容:</p> -<p><a href="http://vpsxyz.com/archives/87"target="_blank" rel="noopener">Linux 下使用 dd 和 gzip 命令来代替 Ghost 做磁盘镜像</a></p> -<p><a href="https://blog.csdn.net/weixin_33971130/article/details/85662628"target="_blank" rel="noopener">linux dd实现磁盘完整全盘镜像备份backup,恢复recover(restore)</a></p> -<p>还有一些查找过程中作用不大的页面,就不贴出来了(诶嘿(╹ڡ╹ )</p> - - - - - Linux处理多触屏的终极解决方案 - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - Tue, 24 Aug 2021 00:00:00 +0800 - - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - - - - <p>一般Linux操作系统接入多个触摸屏的最终解!</p> -<p>从<a href="https://www.small09.top/posts/210311-multitouchscreeninlinux/"target="_blank" rel="noopener">21年3月中旬开始</a>,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。</p> -<p><em>重要:</em> 本文全文基于软件<code>xinput</code></p> -<p><em>更重要:</em> 如简介所说,仍有一种方法无法对应,具体为<code>【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】</code>,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。</p> -<h2>0、核心:xinput<span class="hx:absolute hx:-mt-20" id="0核心xinput"></span> - <a href="#0%e6%a0%b8%e5%bf%83xinput" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)</p> -<blockquote> - <p>xinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级</p> -<p>xinput list &ndash;id-only : 仅仅列出设备ID(序号,每次开机都可能改变)</p> -<p>xinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕</p> -<p>xinput list-props : 列出某个设备的详细信息,后接参数为设备ID。</p> - -</blockquote> -<h2>1、简约:两个完全不同的触摸显示器<span class="hx:absolute hx:-mt-20" id="1简约两个完全不同的触摸显示器"></span> - <a href="#1%e7%ae%80%e7%ba%a6%e4%b8%a4%e4%b8%aa%e5%ae%8c%e5%85%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e8%a7%a6%e6%91%b8%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>xinput map-to-output &quot;$DEVICE NAME A&quot; PORT-A</code></p> -<p>这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。</p> -<p>首先通过xinput查看所有的输入设备:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>~$ xinput -</span></span><span style="display:flex;"><span>┌ Virtual core pointer id<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">[</span>master pointer <span style="color:#f92672">(</span>3<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK TLITEK-TP id<span style="color:#f92672">=</span><span style="color:#ae81ff">9</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK Multi-Touch id<span style="color:#f92672">=</span><span style="color:#ae81ff">7</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>下略<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>可以看到<code>ILITEK ILITEK-TP</code>和<code>ILITEK Multi-Touch</code>显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:</p> -<p><code>xinput map-to-output &quot;ILITEK ILITEK-TP&quot; HDMI-0</code></p> -<p><code>xinput map-to-output &quot;ILITEK Multi-Touch&quot; HDMI-1</code></p> -<p>这种方式的要点是1.必须带英文<code>&quot;&quot;</code>,2.引号内名称须完整。<code>map-to-output</code>所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。</p> -<h2>2、复杂但通用:VID:PID不同的显示器<span class="hx:absolute hx:-mt-20" id="2复杂但通用vidpid不同的显示器"></span> - <a href="#2%e5%a4%8d%e6%9d%82%e4%bd%86%e9%80%9a%e7%94%a8vidpid%e4%b8%8d%e5%90%8c%e7%9a%84%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。</p> -<p>通过<code>xinput list-props [id]</code>可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。<code>list-props</code>的结果示例如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#f92672">(</span>后续再补<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Device Product ID</code>一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA<span style="color:#f92672">=</span>222a -</span></span><span style="display:flex;"><span>PIDA<span style="color:#f92672">=</span><span style="color:#ae81ff">0001</span> -</span></span><span style="display:flex;"><span>PORTA<span style="color:#f92672">=</span>VGA-0 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 或者这里直接填写Device Product ID里面的结果,先VID后PID。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 字母O,不是数字0,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$VIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span>PIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$PIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># =========自动处理步骤,请勿随意修改==========</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 根据设备ID取其序号</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3、屏映射,多屏重复本段</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$VIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$PIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> xinput map-to-output $I $PORTA -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span>exit <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这个脚本使用<code>xinput list --id-only</code>仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用<code>map-to-output</code>进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。</p> -<h2>3、[2]的进阶版<span class="hx:absolute hx:-mt-20" id="32的进阶版"></span> - <a href="#32%e7%9a%84%e8%bf%9b%e9%98%b6%e7%89%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。</p> -<p>在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是<code>pyudev</code>库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装<code>python3+pyudev</code>,并且使用desktop文件在开机时启动,即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/python3</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- coding: UTF-8 --</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- Author: Blues --</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> pyudev -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>context <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Context() -</span></span><span style="display:flex;"><span>monitor <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Monitor<span style="color:#f92672">.</span>from_netlink(context) -</span></span><span style="display:flex;"><span>monitor<span style="color:#f92672">.</span>filter_by(subsystem<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hid&#39;</span>) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> device <span style="color:#f92672">in</span> iter(monitor<span style="color:#f92672">.</span>poll, <span style="color:#66d9ef">None</span>): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>driver <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#34;hid-multitouch&#34;</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;add&#34;</span> <span style="color:#f92672">or</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;change&#34;</span>: -</span></span><span style="display:flex;"><span> os<span style="color:#f92672">.</span>system(<span style="color:#e6db74">&#34;/var/my-touchscreen/remap-screen&#34;</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照<em>设备名、VID、UID、物理接口</em>四大特征,自动映射到对应的显示屏上了。</p> - - - - - Linux中获得AMD显卡的状态信息 - https://www.small09.top/posts/210719-gpuinfoinlinux/ - Mon, 19 Jul 2021 11:00:07 +0800 - - https://www.small09.top/posts/210719-gpuinfoinlinux/ - - - - <p>在Linux下获得AMD GPU的状态和温度信息。</p> -<p>在Linux下如果要查看Nvidia GPU的状态信息,可以使用Nvidia驱动自带的工具。而AMD显卡一般都是使用的开源驱动,这种情况下如何获得显卡的状态和占用呢?</p> -<p><em>文章部分图片之后再附</em></p> -<h2>1、获取GPU信息<span class="hx:absolute hx:-mt-20" id="1获取gpu信息"></span> - <a href="#1%e8%8e%b7%e5%8f%96gpu%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>如需获得GPU的信息(型号、驱动)等,如果系统提供类似*“设备管理器”*的工具可以打开查看。或者就是用<code>lspci</code>指令查看。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 获得所有PCIe设备,在其中找到AMD GPU</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>exam@ple<span style="color:#f92672">]</span>:~$ lspci -</span></span><span style="display:flex;"><span>00:02.0 VGA compatible controller: xxxxxxxx -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>exam@ple<span style="color:#f92672">]</span>:~$ lspci -v -s 00:02.0 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 这里就会显示显卡的具体信息了,包括型号、驱动等,之后补充</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>2、GPU占用率<span class="hx:absolute hx:-mt-20" id="2gpu占用率"></span> - <a href="#2gpu%e5%8d%a0%e7%94%a8%e7%8e%87" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>显卡占用率是一个能反映负载的直观指标,AMD显卡可以通过安装<code>radeontop</code>软件查看。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210719133426.png" alt="radeontop界面" loading="lazy" /></p> -<p>最上面是GPU管道使用,大概类似于总体使用率的东西;最下面是内存使用率,使用sudo权限能看到更多信息。其他项目可以到radeontop的<a href="https://github.com/clbr/radeontop"target="_blank" rel="noopener">Github页面</a>查看。</p> -<h2>3、温度<span class="hx:absolute hx:-mt-20" id="3温度"></span> - <a href="#3%e6%b8%a9%e5%ba%a6" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>特指GPU温度。查阅这篇文章所涉及的知识点的最初目的,也是确认机箱过热是否是GPU的问题。</p> -<p>GPU温度使用第三方软件查看,并使其实时更新。查看温度使用<code>sensors</code>指令,通过安装<code>lm-sensors</code>实现。执行sensors时只会显示一次,我们可以利用watch指令定时刷新温度显示:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>watch -n <span style="color:#ae81ff">2</span> sensors -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 每隔2秒执行sensors指令显示结果</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>![watch执行结果](图片占位)</p> - - - - - 免密码使用sudo - https://www.small09.top/posts/210630-sudowithoutpasswd/ - Wed, 30 Jun 2021 15:14:40 +0800 - - https://www.small09.top/posts/210630-sudowithoutpasswd/ - - - - <p>记录一种可以免密码使用sudo的方法。</p> -<p>每次使用sudo提权,常常要输密码太烦了,所以想给自己赋予免密码的特权。</p> -<ol> -<li> -<p>首先登录root用户: <code>sudo -i</code></p> -</li> -<li> -<p>这个操作的核心文件是<code>/etc/sudoers</code>,可以看到这个文件是只读的,要修改他需要先赋予写入权限。</p> -</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>chmod <span style="color:#ae81ff">666</span> /etc/sudoers</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210705092601.png" alt="文件是只读权限" loading="lazy" /></p> -<ol start="3"> -<li>使用vim修改文件,<code>vi /etc/sudoers</code>,把当前用户和用户组加入,如图</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 表示为该用户免密码</span> -</span></span><span style="display:flex;"><span>yourname ALL<span style="color:#f92672">=(</span>ALL:ALL<span style="color:#f92672">)</span> NOPASSWD:ALL -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 表示为该用户组免密码</span> -</span></span><span style="display:flex;"><span>%yourname ALL<span style="color:#f92672">=(</span>ALL:ALL<span style="color:#f92672">)</span> NOPASSWD:ALL -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 不用严格按照次形式,与你的这个文件中root的格式对应即可。</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ol start="4"> -<li><code>:wq</code>保存,把sodoers改回只读</li> -</ol> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>chmod <span style="color:#ae81ff">440</span> /etc/sudoers</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210705092637.png" alt="文件修改的内容" loading="lazy" /></p> -<ol start="5"> -<li>完成~~~ 把终端关掉再次打开就应该能看到效果了。</li> -</ol> -<blockquote> - <p><strong>PS. 不可使用sudo chmod</strong></p> -<p>一定要直接sudo -i进入root用户,如果使用sudo chmod以普通用户的身份修改sudoers文件的话,改完会发现无法使用sudo指令把权限改回去了,提示“任何人可读写,无法找到有效的sudoers”。其实还有一种更加安全的操作,但是那个编辑器用起来没有vim顺手,</p> - -</blockquote> -<p>参考:https://blog.csdn.net/wxqee/article/details/72718869</p> - - - - - deepin和UOS,快捷方式,开机自启动 - https://www.small09.top/posts/210429-deepinautorun/ - Thu, 29 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210429-deepinautorun/ - - - - <p>修正触屏的脚本总是运行失败,于是找到在Deepin下能够在桌面启动后自动运行的方法。这样的触屏映射就稳定了。经测试在Ubuntu 1604中也适用。</p> -<h2>桌面快捷方式<span class="hx:absolute hx:-mt-20" id="桌面快捷方式"></span> - <a href="#%e6%a1%8c%e9%9d%a2%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>deepin的桌面快捷方式是以<code>*.desktop</code>文件的形式实现的,所以我们需要添加自定义快捷方式的话,只要在桌面添加要给desktop格式的文本文件,编辑内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>[Desktop Entry] -Name=ddd -Exec=&#34;/usr/sbin/xx.sh&#34; -Type=Application</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Desktop Entry</code>表示声明该文件为快捷方式文件。<code>Name</code>是这个文件要显示的名字,设置了之后就可以隐藏原名称和扩展名。<code>Exec</code>是程序的启动脚本,或者启动指令。<code>Type</code>是程序类型,在开始菜单的分类中可以体现。以上四行是必须要有的参数,还有一些其他的参数不影响执行。Exec的脚本必须赋予777权限以执行。</p> -<p>把这个文件放在<code>~/Desktop</code>,就可以看到桌面上多了一个快捷方式了。</p> -<h2>开始菜单<span class="hx:absolute hx:-mt-20" id="开始菜单"></span> - <a href="#%e5%bc%80%e5%a7%8b%e8%8f%9c%e5%8d%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo cp ~/Desktop/刚刚的.desktop /usr/share/applications</code>,过一会或者注销重新登录就能看到开始菜单的响应类型下出现这个快捷方式了。</p> -<h2>开机自动执行<span class="hx:absolute hx:-mt-20" id="开机自动执行"></span> - <a href="#%e5%bc%80%e6%9c%ba%e8%87%aa%e5%8a%a8%e6%89%a7%e8%a1%8c" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><h3>UOS/Deepin和Ubuntu<span class="hx:absolute hx:-mt-20" id="uosdeepin和ubuntu"></span> - <a href="#uosdeepin%e5%92%8cubuntu" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p><code>cp ~/Desktop/刚刚的.desktop ~/.config/autostart</code></p> -<p>需要这个的原因主要是我执行触摸屏映射的指令经常会在桌面启动前(<code>lightdm.service</code>)执行,导致error从而无法进入桌面,将脚本放进<code>/etc/profile.d</code>之后第二天就失效了,所以需要一个在登录桌面后就实现自动执行的功能,多种方法对比下来还是放进桌面环境的开机自启文件夹比较靠谱。这样一般会在进入桌面后5-10秒自动执行,稳定性大幅提高。</p> -<p>经过实际查阅资料和测试,Ubuntu1604也完全适用上面的步骤,只不过可能需要在<code>~/.config/</code>下手动创建一个<code>autostart</code>目录。由于1604已经停止支持,许多人转入了更新的ubuntu系统,猜测近几年的也可以尝试一下。</p> -<h3>麒麟和其他使用X11桌面的Linux<span class="hx:absolute hx:-mt-20" id="麒麟和其他使用x11桌面的linux"></span> - <a href="#%e9%ba%92%e9%ba%9f%e5%92%8c%e5%85%b6%e4%bb%96%e4%bd%bf%e7%94%a8x11%e6%a1%8c%e9%9d%a2%e7%9a%84linux" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>本条目包含UOS和Ubuntu、deepin系统</p> -<p>自启动目录为<code>/etc/xdg/autostart</code>,同样的desktop文件放进去即可。但是麒麟中我使用上面的基础desktop报错,可能需要添加其他内容。</p> - - - - - Linux启用四个以上的串口 - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - Tue, 20 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - - - - <p>工控板安装Linux常常最多只能看到四个串口,通过修改引导文件可以显示所有的串口。</p> -<h2>先说结论<span class="hx:absolute hx:-mt-20" id="先说结论"></span> - <a href="#%e5%85%88%e8%af%b4%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># 1.修改开机grub文件</span> -</span></span><span style="display:flex;"><span>sudo vi /etc/default/grub -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2.在&#34;GRUB_CMDLINE_LINUX_DEFAULT=&#34;一行的结尾空格,添加内容</span> -</span></span><span style="display:flex;"><span> 8250.nr_uarts<span style="color:#f92672">=</span><span style="color:#ae81ff">8</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3.更新开机引导并重启</span> -</span></span><span style="display:flex;"><span>sudo update-grub</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>再说细节<span class="hx:absolute hx:-mt-20" id="再说细节"></span> - <a href="#%e5%86%8d%e8%af%b4%e7%bb%86%e8%8a%82" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>给带有多串口的工控机安装国产Linux操作系统UOS,发现<code>/dev/ttyS</code>只有四个,而且一个都不通,其实这是Linux 的通病,如果发行商没有提前配置,我们只能看到四个不能用的串口。但是工控机都有8-16个串口,不得不想办法让他们能够正常使用,而许多串口芯片只需要基本的驱动就能运行,也不提供专有驱动的源代码编译<font size=2 color=#ff0000>(一般安装专用驱动后,串口名称会改变,比如xr17v358芯片的驱动安装后名称变成ttyXR0)</font>,我们只有从linux本身下手了。</p> -<p>经过多番查找资料,虽然不知道为什么,但是我们应该修改<code>/etc/default/grub</code>文件,其中有一行是这样的:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;这里面 的内容 先不管 它&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>我看了UOS(含Deepin)、Ubuntu和服务器的Centos7都有,在这一行的最后添加<code>8250.nr_uart=32</code>,其中数字&lt;=32都行,效果如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;这里面 的内容 先不管 它 8250.nr_uarts=32&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后更新一下系统的引导</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo update-gurb -</span></span><span style="display:flex;"><span>reboot</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>重启完了你就能看到更多的串口啦!配合<a href="https://www.small09.top/?p=24"target="_blank" rel="noopener">修改udev规则</a>,你就可以用普通用户的权限使用串口通信了。但是请注意其他隐患,比如这个芯片配合基本驱动只能完成基础的收发功能,流控的RTS、CTS等还是需要专用驱动实现的!</p> -<h2>最后吐槽<span class="hx:absolute hx:-mt-20" id="最后吐槽"></span> - <a href="#%e6%9c%80%e5%90%8e%e5%90%90%e6%a7%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>为了串口问题我找了一下午的资料,最后才在外网找到了一个能用的。国内的教程都是说要修改<code>/boot/gurb/gurb2</code>,宝友,这可不兴改啊,这个改坏了系统可就没了啊!这些文件普通用户连浏览权限都没就可见其重要性。</p> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><a href="https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/"target="_blank" rel="noopener">https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/</a></p> -<p>核心步骤就参考了这个,在Linux方面大家还是多用google,多用英文去搜索吧!</p> - - - - - Linux修改mac地址 - https://www.small09.top/posts/210328-linuxchangemacip/ - Sun, 28 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210328-linuxchangemacip/ - - - - <p>当Linux的图形界面没有或失效的时候,该如何更改mac地址?</p> -<h1>Linux调整网卡MAC地址(指令)</h1><p>有的时候需要使用欺骗的方法为电脑设置新的mac,比如存在上网网卡限制,或者想要隐藏自己的真实mac地址。这里列举三种修改mac的方法,适用于Debian系的Linux,其他的应该类似。</p> -<h2>方法一:ifconfig<span class="hx:absolute hx:-mt-20" id="方法一ifconfig"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%b8%80ifconfig" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># ifconfig 查看网卡名称$NAME</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 需要sudo权限</span> -</span></span><span style="display:flex;"><span>ifconfig $NAME down -</span></span><span style="display:flex;"><span>ifconfig $NAME hw ether $NEW_MAC -</span></span><span style="display:flex;"><span>ifconfig $NAME up -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 使用ifconfig检查有没有改变</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>方法二:macchanger<span class="hx:absolute hx:-mt-20" id="方法二macchanger"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%ba%8cmacchanger" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo apt install macchanger</code>,安装过程提示是否自启,随便。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ifconfig $NAME down -</span></span><span style="display:flex;"><span>macchanger -m $NEW_MAC $NAME -</span></span><span style="display:flex;"><span>ifconfig $NAME up</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>ps:macchanger可以附加多种参数,如-m指定mac地址,-s查看状态,-r随机地址</p> -<h2>备注:<span class="hx:absolute hx:-mt-20" id="备注"></span> - <a href="#%e5%a4%87%e6%b3%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上两种方法是软件层面的修改,不会对硬件造成损伤,重启之后就能恢复如初。如果是要长期有效,可以把这些命令写入脚本开机自启。除了这两个,还有另一种软修改的方法,因为我总是提示失败就遗忘了。</p> -<p>有些方法会提到修改/etc目录下的文件实现MAC地址的修改,但是我一个文件都没找到(UOS),这个是因系统而异的,不同的发行版可以选择性的编译这些文件,就会造成有人有有人没有,因为没有实践,所以就不写在这里了。</p> -<h2>方法三:ethtool(慎用)<span class="hx:absolute hx:-mt-20" id="方法三ethtool慎用"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%b8%89ethtool%e6%85%8e%e7%94%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上方法都失效,可以直接修改网卡的物理MAC地址,修改后无法恢复,慎用</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 首先检查mac是否支持修改</span> -</span></span><span style="display:flex;"><span>ethtool -i $NAME -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果 supports-eeprom-access: no,大概率不支持修改</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 查看网卡的mac寄存器</span> -</span></span><span style="display:flex;"><span>ethtool -e $NAME -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果无法读取,大概率不支持修改</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 修改mac,按字节修改</span> -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">0</span> value 0xAA -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">1</span> value 0xBB -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">2</span> value 0xCC -</span></span><span style="display:flex;"><span>...共六行 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果修改无效,则驱动不支持修改</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>如果以上方法都无法修改,则建议申请新的ip。。。<span class="hx:absolute hx:-mt-20" id="如果以上方法都无法修改则建议申请新的ip"></span> - <a href="#%e5%a6%82%e6%9e%9c%e4%bb%a5%e4%b8%8a%e6%96%b9%e6%b3%95%e9%83%bd%e6%97%a0%e6%b3%95%e4%bf%ae%e6%94%b9%e5%88%99%e5%bb%ba%e8%ae%ae%e7%94%b3%e8%af%b7%e6%96%b0%e7%9a%84ip" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><em><font size="1">文章首发于<a href="small09.top" target="前往火柴盒" title="前往Kushidou个人博客" rel="noopener">香风家的小别墅</a>,转载请携带出处。</font></em></p> - - - - - Linux串口和udev理解 - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - - - - <p>配置串口权限,顺便看一下linux的udev规则。</p> -<h2>串口的问题<span class="hx:absolute hx:-mt-20" id="串口的问题"></span> - <a href="#%e4%b8%b2%e5%8f%a3%e7%9a%84%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在现场开发的同事反映UOS工控机没有配置串口,每次都需要sudo才能使用。(明明在家里你们都会自己配置好环境与权限,为什么到了现场反而不会了需要我提供协助呢?)</p> -<p>我之前没考虑过这个问题,认为串口就是得root权限操作才安全。但是既然提出了需求,就赶紧百度并测试一下吧。</p> -<h2>赋予普通用户串口权限的两种方法<span class="hx:absolute hx:-mt-20" id="赋予普通用户串口权限的两种方法"></span> - <a href="#%e8%b5%8b%e4%ba%88%e6%99%ae%e9%80%9a%e7%94%a8%e6%88%b7%e4%b8%b2%e5%8f%a3%e6%9d%83%e9%99%90%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在百度上,给普通用户串口权限有两种主流方法(可能2会了,Google上不去),一种是将用户放入特殊的用户组,从而获得权限。另一种是加入udev规则,在串口插入时自动更改权限。</p> -<p>我个人更倾向于使用第二种方案,因为公司中不同的人装系统就可能起不同的名字,之后进入生产环境可能又会起新的名字,所以采用第二种设置规则的办法,便于之后制作恢复镜像和一键部署。</p> -<h2>xxx.rules<span class="hx:absolute hx:-mt-20" id="xxxrules"></span> - <a href="#xxxrules" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo vi /etc/udev/rules.d/70-tty-usb-rules</code>,写入以下内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>KERNEL<span style="color:#f92672">==</span><span style="color:#e6db74">&#34;ttyS*&#34;</span>,MODE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0666&#34;</span> -</span></span><span style="display:flex;"><span>KERNEL<span style="color:#f92672">==</span><span style="color:#e6db74">&#34;ttyUSB*&#34;</span>,MODE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0666&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这一段的意思是匹配所有ttyS和ttyUSB,插入时都赋予0666的权限,即所有用户都可读可写。重新加载一下设备,就可以按规则配置权限进行操作了。</p> -<h2>udev规则<span class="hx:absolute hx:-mt-20" id="udev规则"></span> - <a href="#udev%e8%a7%84%e5%88%99" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>udev是什么?udev是Linux下的设备文件管理方式,运行在用户侧(devfs在内核侧管理设备文件)。有了udev,<code>/dev</code>目录下的文件就都是真实存在的已连接的设备了。</p> -<p>udev的规则都保存在<code>/etc/udev/rules.d</code>目录下,文件名的格式为<code>数字-名称.rules</code>,数字表示加载顺序,一般是从小往大加载;名称按功能自定义,最后以.rules结尾。这些规则会在设备接入时生效。</p> -<p>规则文件按行执行,每行分为两个部分:匹配和赋值,每个参数使用逗号,分割。</p> -<blockquote> - <p>(这段复制自引用2,仅供参考)。 -<strong>1、udev 规则的所有操作符</strong> -<strong>==</strong>  比较键、值,若等于,则该条件满足; -<strong>!=</strong>  比较键、值,若不等于,则该条件满足; -<strong>=</strong>   对一个键赋值; -<strong>+=</strong>  为一个表示多个条目的键赋值。 -<strong>:=</strong>  对一个键赋值,并拒绝之后所有对该键的改动,防止后面的规则文件对该键重赋值。</p> -<p><strong>2、udev 规则的匹配键</strong> -<strong>ACTION</strong>        事件 (uevent) 的行为,例如:add、remove。 -<strong>KERNEL</strong>         内核设备名称,例如:sda, cdrom。 -<strong>DEVPATH</strong>        设备的 devpath 路径。 -<strong>SUBSYSTEM</strong>       设备的子系统名称,例如:sda 的子系统为 block。 -<strong>BUS</strong>           设备在 devpath 里的总线名称,例如:usb。 -<strong>DRIVER</strong>         设备在 devpath 里的设备驱动名称,例如:ide-cdrom。 -<strong>ID</strong>            设备在 devpath 里的识别号。 -<strong>SYSFS{filename}</strong>    设备的 devpath 路径下,设备的属性文件“filename”里的内容。 -<strong>ENV{key}</strong>       环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。 -<strong>PROGRAM</strong>        调用外部命令。 -<strong>RESULT</strong>         外部命令 PROGRAM 的返回结果。</p> -<p><strong>3、udev 的重要赋值键</strong> -<strong>NAME</strong>           /dev目录下显示的文件名重命名 -<strong>SYMLINK</strong>          为 /dev下文件进行符号链接,防止覆盖系统默认产生的文件 -<strong>OWNER, GROUP, MODE</strong>  为设备设定权限。 -<strong>ENV{key}</strong>         导入一个环境变量。</p> -<p><strong>4、udev 的值和可调用的替换操作符</strong> -Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符: -<strong>$kernel, %k</strong>        设备的内核设备名称,例如:sda、cdrom。 -<strong>$number, %n</strong>        设备的内核号码,例如:sda3 的内核号码是 3。 -<strong>$devpath, %p</strong>       设备的 devpath路径。 -<strong>$id, %b</strong>          设备在 devpath里的 ID 号。 -<strong>$sysfs{file}, %s{file}</strong>   设备的 sysfs里 file 的内容。其实就是设备的属性值。 -<strong>$env{key}, %E{key}</strong>   一个环境变量的值。 -<strong>$major, %M</strong>        设备的 major 号。 -<strong>$minor %m</strong>        设备的 minor 号。 -<strong>$result, %c</strong>        PROGRAM 返回的结果。 -<strong>$parent, %P</strong>       父设备的设备文件名。 -<strong>$root, %r</strong>         udev_root的值,默认是 /dev/。 -<strong>$tempnode, %N</strong>      临时设备名。 -<strong>%%</strong>            符号 % 本身。 -<strong>$$</strong>             符号 $ 本身。</p> - -</blockquote> -<h2>参考<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://www.cnblogs.com/qixianyu/p/6869744.html -[2]https://www.cnblogs.com/cslunatic/p/3171837.html</p> - - - - - Linux多显示器触屏调试与暂行解决方案 - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - - - - <p>由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。</p> -<p><em>2021-03-22更新部分内容</em> -<em>2021-04-28再次更新内容</em></p> -<p><strong>2021-09-14 文章已有新版本,请访问《<a href="https://www.small09.top/posts/210824-linuxtouchscreenfin/"target="_blank" rel="noopener">Linux处理多触屏的终极解决方案</a>》</strong></p> -<h2>问题来源<span class="hx:absolute hx:-mt-20" id="问题来源"></span> - <a href="#%e9%97%ae%e9%a2%98%e6%9d%a5%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 -接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为</p> -<p><code>xinput map-to-output $触屏设备id $显示屏名称</code></p> -<blockquote> - <p>2021-04-28更新</p> -<p><code>xinput map-to-output</code>指令支持触摸屏名称作为参数,比如我通过<code>xinput</code>指令看到有一个触摸屏的设备名称为<code>ILITEK XXXX</code>,那么我映射的时候直接输入</p> -<blockquote> - <p><code>xinput map-to-output &quot;ILITEK XXX&quot; HDMI-1</code></p> - -</blockquote> - -</blockquote> -<h2>尝试解决<span class="hx:absolute hx:-mt-20" id="尝试解决"></span> - <a href="#%e5%b0%9d%e8%af%95%e8%a7%a3%e5%86%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ul> -<li>首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。</li> -<li><del>然后<code>xinput list-props $id</code>查看设备的VID,这个在后续自动化处理有用。</del></li> -<li><code>xrandr</code>查看<code>$显示器名称</code></li> -</ul> -<h2>自动化处理<span class="hx:absolute hx:-mt-20" id="自动化处理"></span> - <a href="#%e8%87%aa%e5%8a%a8%e5%8c%96%e5%a4%84%e7%90%86" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 2021-04-28更新:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 本部分后面的都可以不看了!</span> -</span></span><span style="display:flex;"><span>xinput map-to-output <span style="color:#e6db74">&#34;DEVICE_NAME&#34;</span> DISPLAY -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><strong>仅作归档!下面这些方法过于繁琐!</strong></p> -<p>利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。<code>bash this.sh VID1 VID2 ScreenID</code></p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。</span> -</span></span><span style="display:flex;"><span>MYID_FIRST<span style="color:#f92672">=</span>$1 -</span></span><span style="display:flex;"><span>MYID_SECOND<span style="color:#f92672">=</span>$2 -</span></span><span style="display:flex;"><span>OUT_PUT<span style="color:#f92672">=</span>$3 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#[1]</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> MY_INDEX<span style="color:#f92672">=</span>$I -</span></span><span style="display:flex;"><span> break; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>xinput map-to-output $MY_INDEX $OUT_PUT -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI2</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI1</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput | grep -iw DEVICE_NAME<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID#*id=<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID%% *<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>xinput map-to-output $TOUCH_ID SCREEN_NAME</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),<del>使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id</del>。</p> -<p>经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在<code>~/.bashrc</code>中,这样只需要打开一次终端,就可以实现屏幕重新映射。</p> -<h2>后续问题<span class="hx:absolute hx:-mt-20" id="后续问题"></span> - <a href="#%e5%90%8e%e7%bb%ad%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li>当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。</li> -<li>当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数</li> -<li>如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。</li> -</ol> -<h2>触屏校准(如果需要)<span class="hx:absolute hx:-mt-20" id="触屏校准如果需要"></span> - <a href="#%e8%a7%a6%e5%b1%8f%e6%a0%a1%e5%87%86%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>网上说的利用校准来区分多触摸屏的方法是<strong>完全错误</strong>的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)</p> -<ul> -<li><code>sudo apt install xinput-calibrator</code>,需要更新源</li> -<li><code>sudo xinput_calibrator</code></li> -<li>将校准信息保存到<code>/usr/share/X11/xorg.conf.d/10-evdev.conf</code>的&quot;Driver evdev”下面一行,重启生效。</li> -</ul> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 -[2]https://blog.csdn.net/qq_33406883/article/details/106649087 -[3]https://segmentfault.com/a/1190000020334077</p> - - - - - 使用Docker安装TeamSpeak - https://www.small09.top/posts/210218-teamspeakwithdocker/ - Thu, 18 Feb 2021 00:00:00 +0800 - - https://www.small09.top/posts/210218-teamspeakwithdocker/ - - - - <p>TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。</p> -<h2>Teamspeak<span class="hx:absolute hx:-mt-20" id="teamspeak"></span> - <a href="#teamspeak" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。</p> -<p>所以,选择docker安装ts就是一个很不错的选择。</p> -<h2>Docker及其安装<span class="hx:absolute hx:-mt-20" id="docker及其安装"></span> - <a href="#docker%e5%8f%8a%e5%85%b6%e5%ae%89%e8%a3%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。</p> -<p>我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo yum install docker <span style="color:#75715e">#安装docker程序,会自动选择合适的</span> -</span></span><span style="display:flex;"><span>sudo systemctl start docker <span style="color:#75715e">#启动docker服务</span> -</span></span><span style="display:flex;"><span>sudo systemctl enable docker <span style="color:#75715e">#允许docker开机自启</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>Docker安装TS<span class="hx:absolute hx:-mt-20" id="docker安装ts"></span> - <a href="#docker%e5%ae%89%e8%a3%85ts" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak</code></p> -<p>直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。</p> -<h2>端口<span class="hx:absolute hx:-mt-20" id="端口"></span> - <a href="#%e7%ab%af%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>从指令可以看出,docker需要使用到<strong>9987,10011,30033</strong>三个端口,所以需要到服务器后台开启防火墙上对应端口。</p> -<h2>管理员密钥<span class="hx:absolute hx:-mt-20" id="管理员密钥"></span> - <a href="#%e7%ae%a1%e7%90%86%e5%91%98%e5%af%86%e9%92%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。</p> -<p><code>docker ps -a</code>查找所有容器。</p> -<p><code>docker logs -f [CONTATINER ID]</code>查看log,找到token即可。客户端设置之后再说。</p> -<p>密钥只会在第一次运行时打印,注意保存。</p> -<p><em>参考:<a href="https://woolio.cn/683/"target="_blank" rel="noopener">https://woolio.cn/683/</a></em></p> - - - - - diff --git a/public/tags/nas/index.html b/public/tags/nas/index.html deleted file mode 100644 index 4e9ed9d..0000000 --- a/public/tags/nas/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -NAS – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/nas/index.xml b/public/tags/nas/index.xml deleted file mode 100644 index 6942e59..0000000 --- a/public/tags/nas/index.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - 香风家的火柴盒 – NAS - https://www.small09.top/tags/nas/ - Recent content in NAS on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 15 Nov 2021 10:02:30 +0800 - - - - - - - - - - - 记一次拯救NAS硬盘 - https://www.small09.top/posts/211115-fixnasdriver/ - Mon, 15 Nov 2021 10:02:30 +0800 - - https://www.small09.top/posts/211115-fixnasdriver/ - - - - <p>更新家里的NAS,手滑把原来NAS硬盘的分区信息删掉了。如何拯救盘里的数据?</p> -<p><em>图片稍后补充。</em></p> -<h2>v 0 起因<span class="hx:absolute hx:-mt-20" id="v-0-起因"></span> - <a href="#v-0-%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>双十一买了两块新的4T紫盘,打算升级一下家里的黑群晖。原来黑群晖是用一台N手工控机+1TB希捷笔记本硬盘(看缓存和速度肯定是SMR盘了),数据安全几乎为0.</p> -<p>考虑到小工控机的电源带不动那么多硬盘,机箱也没有空间,就把家里闲置的i3台式机整了过来,拆掉原来的硬盘装上紫盘组新nas了。顺手拆了一个捡来的监控机上的1TB西数紫盘。</p> -<p>为了节约迁移系统和数据的时间,我打算拿两个sata易驱线,用DiskGenuies进行克隆。后来网上冲浪发现群晖系统是认硬盘SN的,也就是说我克隆的数据没有一丁点用,加上手头上没有2.5转3.5的转接件,就考虑把笔记本盘放回老nas,然后直接拷贝或者备份到新nas。</p> -<h2>v-1 杯具<span class="hx:absolute hx:-mt-20" id="v-1-杯具"></span> - <a href="#v-1-%e6%9d%af%e5%85%b7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>当我按下取消的时候,惨剧发生了。其实整盘克隆的时候,DG会删除所有分区,克隆完了再重建分区。我取消克隆,然后退出DG。它提示我是否保存分区更改,我以为是1T紫盘的分区,顺手点了个否。当我重启DG的时候,发现希捷笔记本盘只剩一条灰色,未分区的区域。</p> -<h2>v-2 尝试<span class="hx:absolute hx:-mt-20" id="v-2-尝试"></span> - <a href="#v-2-%e5%b0%9d%e8%af%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>DG有个功能是搜索重建分区表,我第一时间进行搜索。此时还没有网盘内<strong>写入任何内容</strong>,也<strong>没有格式化</strong>。数据应该是都在的,只要按照原来的样子重新分区应该就能重新读写数据了。</p> -<p>为什么不手动分区?因为群晖会在硬盘上先建立一个系统分区,然后建立swap分区,空一段空间后再建立数据分区。每个分区开始和结束的位置都是未知的,网络上也没有可以参考的内容。</p> -<p>经过一个多小时的搜索,除了第一个2.4GB的系统分区被找到以外,一无所获。我怀疑是不是我期间制作黑裙启动盘影响了,又搜索了一遍,好家伙还是没有。</p> -<p>搜索期间网上冲浪找前人的肩膀,结果他们要么是分区没被删直接装Windows下btrfs驱动(gitee开源)读取(群晖坏了),要么是DG轻松搜出全部分区(和群晖无关)。我还尝试查找丢失文件,依然一无所获。</p> -<p>难道就这么放弃了么?</p> -<h2>v 1 曙光<span class="hx:absolute hx:-mt-20" id="v-1-曙光"></span> - <a href="#v-1-%e6%9b%99%e5%85%89" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>群晖使用的BTRFS格式不是什么群晖专用格式,而是SUN(Oracle收购)开发的新一代文件系统,针对ext3/4进行优化升级。所以比较新的Linux系统都支持使用这个格式;装个驱动也能轻易读取。</p> -<p>我本来笔记本是有Deepin系统的,上次win10损毁了我就格掉装了win11。后来想起来我还有块树莓派正跑着linux系统。但是没有分区的硬盘上了Linux也啥都读不到。恰好这时候新nas的系统已经起来了,1T紫盘上的独立分区也建立好了。两款空间一样的盘,同样版本的群晖系统,建立一样的存储空间后,那不就是连分区也一模一样了么?!</p> -<p>开搞,ssh连上群晖,用sudo blkid看到硬盘实际的分区信息,它正好是显示的扇区起止、大小。打开DG,手动分区,按照群晖的磨样给小硬盘手动分区。DG不支持btrfs分区,那我随便挂一个ext4吧。分区过程和保存的时候,千万不要格式化了。</p> -<p>把小硬盘用易驱线连上树莓派,<code>lsblk</code>看到这个硬盘有三个分区,其中<code>/dev/sda3</code>下面还有一个<code>md127</code>,不知道是啥,查看发现是raid。群晖的数据区,哪怕是单盘basic也是以raid方式存在的,方便以后升级raid模式吧大概。也就是说,虽然我分区表是瞎分的,Linux还是能够正确读取到原来的分区和文件系统。</p> -<h2>v 2 得到数据<span class="hx:absolute hx:-mt-20" id="v-2-得到数据"></span> - <a href="#v-2-%e5%be%97%e5%88%b0%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>安装<code>mdadm</code>软件包,我的树莓派不带这个,然后就能挂载raid盘了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount /dev/md127 ~/disk</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>disk目录提前建立好了,把机械盘挂载上去,cd到目录里,然后我就发现了新世界的大门。盘里有个<code>NasData</code>目录,这正是我当时保存文件的地方。cd进去,在!都还在!</p> -<h2>v 3 移动数据<span class="hx:absolute hx:-mt-20" id="v-3-移动数据"></span> - <a href="#v-3-%e7%a7%bb%e5%8a%a8%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我打算直接把就数据拷贝到新NAS里去了,烤到移动硬盘再复制到nas大费周章的。</p> -<p>在NAS里的主共享文件夹启动NFS服务,映射为root,允许所有来源的读写,然后到树莓派中挂载nfs</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -t nfs 10.x.x.x:/volume2/NasData ~/Nasdata</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>主目录下提前建立Nasdata目录,挂载完成后新Nas的内容也都出现了。不想一个个复制文件,CP指令不支持排除不想要的文件(毕竟还有部分文件依然保存在移动硬盘和笔记本里,树莓派只支持2.4GHz的wifi太慢),最终我选择了rsync指令进行“本地复制”。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>rsync -vrultD --exclude <span style="color:#e6db74">&#39;文件名&#39;</span> --exclude <span style="color:#e6db74">&#39;目录名&#39;</span> ~/disk/NasData/* ~/Nasdata/临时目录 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -v 详细输出 -r 递归拷贝(保留目录结构) -u 仅更新,防止中断再开后重新拷贝 -l 保留软连接 -t 保留时间信息 -D 保持设备文件信息</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 不用-a 是因为对拷过去的文件赋权限时疯狂报错失败</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>经历树莓派三次死机两次中断后,我终于抢救了500G数据中的50G(另外450包括百度云同步、移动硬盘依然保存着的动漫视频等)。</p> -<h2>v 4 结论<span class="hx:absolute hx:-mt-20" id="v-4-结论"></span> - <a href="#v-4-%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>现在数据和小姐姐们都住在一个raid1备份的空间中,应该轻易不会发生无家可归的情况了。</p> -<p>这次事件完全是我自己作死,群晖其实提供了备份功能,可以完整的把数据、部分设置乃至我的Docker容器都完整备份到新NAS里(只要两台都在线),而且树莓派的wifi只有5MiB/s,比起家里千兆的内网,速度慢了数十倍,时间也花了我整整一下午。</p> -<p>总之硬盘出了事故不要慌,只要不是物理损坏,都有机会修复。除了事故后第一时间就要停止读写,更不要格式化,先尝试重建分区表,失败了换个系统试试。说不定我不重建,放到Linux上也能看到正常的三个分区呢?</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202111150957877.png" alt="image-20211115095410121" loading="lazy" /></p> - - - - - diff --git a/public/tags/python/index.html b/public/tags/python/index.html deleted file mode 100644 index fa5010b..0000000 --- a/public/tags/python/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Python – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/python/index.xml b/public/tags/python/index.xml deleted file mode 100644 index 14db678..0000000 --- a/public/tags/python/index.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - 香风家的火柴盒 – Python - https://www.small09.top/tags/python/ - Recent content in Python on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Fri, 08 Sep 2023 00:00:00 +0800 - - - - - - - - - - - Python socket 收取POST协议内容时没有payload - https://www.small09.top/posts/230908-py-post/ - Fri, 08 Sep 2023 00:00:00 +0800 - - https://www.small09.top/posts/230908-py-post/ - - - - <p>使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况</p> -<p>最近做了一个简单的http服务器,用于接收IoT端上传的json格式的日志。</p> -<p>服务端使用socket中的方法接收原始数据,再对原始数据单独进行处理,根据报文头部的GET或者POST等方法进行具体的操作。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>sock <span style="color:#f92672">=</span> socket<span style="color:#f92672">.</span>socket(socket<span style="color:#f92672">.</span>AF_INET, socket<span style="color:#f92672">.</span>SOCK_STREAM) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>bind((self<span style="color:#f92672">.</span>host, self<span style="color:#f92672">.</span>port)) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>listen(<span style="color:#ae81ff">128</span>) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>(client, address) <span style="color:#f92672">=</span> self<span style="color:#f92672">.</span>sock<span style="color:#f92672">.</span>accept() -</span></span><span style="display:flex;"><span>th <span style="color:#f92672">=</span> Thread(target<span style="color:#f92672">=</span>self<span style="color:#f92672">.</span>accept_request, args<span style="color:#f92672">=</span>(client, address)) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">accept_request</span>(client, address): -</span></span><span style="display:flex;"><span> data <span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) -</span></span><span style="display:flex;"><span> req <span style="color:#f92672">=</span> data<span style="color:#f92672">.</span>decode(<span style="color:#e6db74">&#34;utf-8&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 处理数据的具体方法</span> -</span></span><span style="display:flex;"><span> response <span style="color:#f92672">=</span> process_response(req, client_addr) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>send(response) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># clean up</span> -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>shutdown(<span style="color:#ae81ff">1</span>) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>close()</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码是大概的处理流程。在这个流程中,我发现处理POST的数据的时候,经常只能收到headers部分,payload部分的数据不管发几次都是空的。而且接收缓冲区已经扩大到了8192字节,headers部分的长度只有200多字节,IoT端上传的payload也不过上百字节,不应该是超出缓冲区的问题。</p> -<p><strong>=====2024.01.04更新=======</strong></p> -<p>下面的方法突然某一天就失效了,我不清楚是不是python的环境变化导致的。</p> -<p>其实用flask接收和处理数据会更加方便快捷:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> flask <span style="color:#f92672">import</span> Flask, request -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 实例化flask</span> -</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> Flask(__name__) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 接收和处理post的方法</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.route</span>(<span style="color:#e6db74">&#39;/test&#39;</span>, methods<span style="color:#f92672">=</span>[<span style="color:#e6db74">&#39;POST&#39;</span>]) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv_file_www</span>(): -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post的传入参数</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>args<span style="color:#f92672">.</span>to_dict()) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post所承载的数据</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>data) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#39;OK&#39;</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;__main__&#39;</span>: -</span></span><span style="display:flex;"><span> app<span style="color:#f92672">.</span>run(port<span style="color:#f92672">=</span><span style="color:#ae81ff">31408</span>, host<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.0.0.0&#34;</span>,debug<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面就是一个完整的post接收和处理程序了,不需要调试socket,也不需要自己处理ResponseBuilder,最重要的是能保证获取到post数据。</p> -<p><strong>======以下是原来的内容==========</strong></p> -<p>经过网上搜索与自己尝试,发现socket.recv返回的时候是分段返回的,貌似会按照实际内容切割返回,<strong>必须不断的recv才能完整接收数据</strong>。有一种解决方案是POST传送之前先确定报文的完整擦换个年度,然后利用while循环,接收到对应长度才结束。</p> -<p>但是POST发送的一个不定长的数据,如果每次都通过http报文先传送post完整长度的话,有些浪费资源。于是我想到了这么一个方案:</p> -<p>POST的报文头会包含一个<code>Content-length</code>的数据,记录的是payload的长度。那我在接收阶段就对headers部分进行解码和处理,获取到content-length后,在加上本次获取headers的长度就是POST的完整长度了。</p> -<p>那么将上面代码的<code>client_sock.recv()</code>部分改写成下面的方法:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv</span>(self, client_sock): -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> <span style="color:#ae81ff">8192</span> <span style="color:#75715e"># 记录每次接收的长度</span> -</span></span><span style="display:flex;"><span> lrecv_all<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> <span style="color:#75715e"># 记录数据总长度 </span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">=</span> bytes() <span style="color:#75715e"># 接收的所有数据存入这里</span> -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 解析的payload长度</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 用于记录是否接收到了payload,以及实时记录接收到payload的长度</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> <span style="color:#66d9ef">True</span> : -</span></span><span style="display:flex;"><span> part_body<span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) <span style="color:#75715e"># 循环接收数据</span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">+=</span> part_body <span style="color:#75715e"># 将接收的数据写入data_body</span> -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> len(part_body) <span style="color:#75715e"># 获取本次接收长度</span> -</span></span><span style="display:flex;"><span> lrecv_all <span style="color:#f92672">+=</span> lrecved <span style="color:#75715e"># 计算总长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>: <span style="color:#75715e"># 没有接收到payload部分时,才进入下面的判断流程</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">3</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;GET&#39;</span>: <span style="color:#75715e"># 由于我get方法没出现过断开的问题,因此直接返回即可。</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">4</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;POST&#39;</span>: -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> count_payload_len(data_body) <span style="color:#75715e"># 解析头部,计算payload部分的长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> lrecved <span style="color:#f92672">&lt;</span> payload_len: -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 偶尔会出现能接收到payload的情况,所以多加了一个判断。</span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 能接收payload肯定总长度大于payload_len的</span> -</span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;no payloads, keep recving...&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 计算post报文的总长度,借用payload_flag变量</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> lrecved <span style="color:#f92672">+</span> payload_len -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 当接收到的总长度 &gt;= POST的计算长度,表示所有数据接收完成,退出</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">&lt;=</span> lrecv_all: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> data_body</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>里面解析headers的代码如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">count_payload_len</span>(data): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> d <span style="color:#f92672">in</span> data<span style="color:#f92672">.</span>split(<span style="color:#e6db74">b</span><span style="color:#e6db74">&#39;</span><span style="color:#ae81ff">\r\n</span><span style="color:#e6db74">&#39;</span>): <span style="color:#75715e"># 通过\r\n来分隔报文头</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#e6db74">&#34;LENGTH&#34;</span> <span style="color:#f92672">in</span> d<span style="color:#f92672">.</span>upper()<span style="color:#f92672">.</span>decode(): <span style="color:#75715e"># 如果报文头部有length关键词,当然可以写完整,我的heasers没有其他的length就简化了</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> int(d<span style="color:#f92672">.</span>decode()<span style="color:#f92672">.</span>split(<span style="color:#e6db74">&#34;:&#34;</span>)[<span style="color:#ae81ff">1</span>]) <span style="color:#75715e"># 分隔出payload长度并返回</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码其实写的很复杂,因为我解析POST整体报文的功能已经写完并且通过第三方http报文调试工具验证过了,上IoT设备实验的时候才发现了问题,本着少改一点是一点的原则,就把这一部分复杂化了,但确实解决了我的问题,就OK了。</p> -<p>对了,这篇博客就是利用这个这个方案改造的新服务端进行上传同步的,之前用GitHub Actions进行同步博客,每次运营商都会发一条高危访问的短信和邮件通知我,太烦了。</p> - - - - - diff --git a/public/tags/server/index.html b/public/tags/server/index.html deleted file mode 100644 index af18d70..0000000 --- a/public/tags/server/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Server – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/server/index.xml b/public/tags/server/index.xml deleted file mode 100644 index 8651c7e..0000000 --- a/public/tags/server/index.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - 香风家的火柴盒 – Server - https://www.small09.top/tags/server/ - Recent content in Server on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Fri, 08 Sep 2023 00:00:00 +0800 - - - - - - - - - - - Python socket 收取POST协议内容时没有payload - https://www.small09.top/posts/230908-py-post/ - Fri, 08 Sep 2023 00:00:00 +0800 - - https://www.small09.top/posts/230908-py-post/ - - - - <p>使用Python搭建简单服务器的时候,只能收到headers,收不到POST内容的情况</p> -<p>最近做了一个简单的http服务器,用于接收IoT端上传的json格式的日志。</p> -<p>服务端使用socket中的方法接收原始数据,再对原始数据单独进行处理,根据报文头部的GET或者POST等方法进行具体的操作。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>sock <span style="color:#f92672">=</span> socket<span style="color:#f92672">.</span>socket(socket<span style="color:#f92672">.</span>AF_INET, socket<span style="color:#f92672">.</span>SOCK_STREAM) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>bind((self<span style="color:#f92672">.</span>host, self<span style="color:#f92672">.</span>port)) -</span></span><span style="display:flex;"><span>sock<span style="color:#f92672">.</span>listen(<span style="color:#ae81ff">128</span>) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>(client, address) <span style="color:#f92672">=</span> self<span style="color:#f92672">.</span>sock<span style="color:#f92672">.</span>accept() -</span></span><span style="display:flex;"><span>th <span style="color:#f92672">=</span> Thread(target<span style="color:#f92672">=</span>self<span style="color:#f92672">.</span>accept_request, args<span style="color:#f92672">=</span>(client, address)) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">accept_request</span>(client, address): -</span></span><span style="display:flex;"><span> data <span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) -</span></span><span style="display:flex;"><span> req <span style="color:#f92672">=</span> data<span style="color:#f92672">.</span>decode(<span style="color:#e6db74">&#34;utf-8&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 处理数据的具体方法</span> -</span></span><span style="display:flex;"><span> response <span style="color:#f92672">=</span> process_response(req, client_addr) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>send(response) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># clean up</span> -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>shutdown(<span style="color:#ae81ff">1</span>) -</span></span><span style="display:flex;"><span> client_sock<span style="color:#f92672">.</span>close()</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码是大概的处理流程。在这个流程中,我发现处理POST的数据的时候,经常只能收到headers部分,payload部分的数据不管发几次都是空的。而且接收缓冲区已经扩大到了8192字节,headers部分的长度只有200多字节,IoT端上传的payload也不过上百字节,不应该是超出缓冲区的问题。</p> -<p><strong>=====2024.01.04更新=======</strong></p> -<p>下面的方法突然某一天就失效了,我不清楚是不是python的环境变化导致的。</p> -<p>其实用flask接收和处理数据会更加方便快捷:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> flask <span style="color:#f92672">import</span> Flask, request -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 实例化flask</span> -</span></span><span style="display:flex;"><span>app <span style="color:#f92672">=</span> Flask(__name__) -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 接收和处理post的方法</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@app.route</span>(<span style="color:#e6db74">&#39;/test&#39;</span>, methods<span style="color:#f92672">=</span>[<span style="color:#e6db74">&#39;POST&#39;</span>]) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv_file_www</span>(): -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post的传入参数</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>args<span style="color:#f92672">.</span>to_dict()) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># post所承载的数据</span> -</span></span><span style="display:flex;"><span> print(request<span style="color:#f92672">.</span>data) -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#39;OK&#39;</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;__main__&#39;</span>: -</span></span><span style="display:flex;"><span> app<span style="color:#f92672">.</span>run(port<span style="color:#f92672">=</span><span style="color:#ae81ff">31408</span>, host<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.0.0.0&#34;</span>,debug<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面就是一个完整的post接收和处理程序了,不需要调试socket,也不需要自己处理ResponseBuilder,最重要的是能保证获取到post数据。</p> -<p><strong>======以下是原来的内容==========</strong></p> -<p>经过网上搜索与自己尝试,发现socket.recv返回的时候是分段返回的,貌似会按照实际内容切割返回,<strong>必须不断的recv才能完整接收数据</strong>。有一种解决方案是POST传送之前先确定报文的完整擦换个年度,然后利用while循环,接收到对应长度才结束。</p> -<p>但是POST发送的一个不定长的数据,如果每次都通过http报文先传送post完整长度的话,有些浪费资源。于是我想到了这么一个方案:</p> -<p>POST的报文头会包含一个<code>Content-length</code>的数据,记录的是payload的长度。那我在接收阶段就对headers部分进行解码和处理,获取到content-length后,在加上本次获取headers的长度就是POST的完整长度了。</p> -<p>那么将上面代码的<code>client_sock.recv()</code>部分改写成下面的方法:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">recv</span>(self, client_sock): -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> <span style="color:#ae81ff">8192</span> <span style="color:#75715e"># 记录每次接收的长度</span> -</span></span><span style="display:flex;"><span> lrecv_all<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span> <span style="color:#75715e"># 记录数据总长度 </span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">=</span> bytes() <span style="color:#75715e"># 接收的所有数据存入这里</span> -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 解析的payload长度</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> <span style="color:#75715e"># 用于记录是否接收到了payload,以及实时记录接收到payload的长度</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> <span style="color:#66d9ef">True</span> : -</span></span><span style="display:flex;"><span> part_body<span style="color:#f92672">=</span> client_sock<span style="color:#f92672">.</span>recv(<span style="color:#ae81ff">8192</span>) <span style="color:#75715e"># 循环接收数据</span> -</span></span><span style="display:flex;"><span> data_body <span style="color:#f92672">+=</span> part_body <span style="color:#75715e"># 将接收的数据写入data_body</span> -</span></span><span style="display:flex;"><span> lrecved <span style="color:#f92672">=</span> len(part_body) <span style="color:#75715e"># 获取本次接收长度</span> -</span></span><span style="display:flex;"><span> lrecv_all <span style="color:#f92672">+=</span> lrecved <span style="color:#75715e"># 计算总长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>: <span style="color:#75715e"># 没有接收到payload部分时,才进入下面的判断流程</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">3</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;GET&#39;</span>: <span style="color:#75715e"># 由于我get方法没出现过断开的问题,因此直接返回即可。</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">elif</span> data_body[<span style="color:#ae81ff">0</span>:<span style="color:#ae81ff">4</span>]<span style="color:#f92672">.</span>decode() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;POST&#39;</span>: -</span></span><span style="display:flex;"><span> payload_len <span style="color:#f92672">=</span> count_payload_len(data_body) <span style="color:#75715e"># 解析头部,计算payload部分的长度</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> lrecved <span style="color:#f92672">&lt;</span> payload_len: -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 偶尔会出现能接收到payload的情况,所以多加了一个判断。</span> -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 能接收payload肯定总长度大于payload_len的</span> -</span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;no payloads, keep recving...&#34;</span>) -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 计算post报文的总长度,借用payload_flag变量</span> -</span></span><span style="display:flex;"><span> payload_flag <span style="color:#f92672">=</span> lrecved <span style="color:#f92672">+</span> payload_len -</span></span><span style="display:flex;"><span> <span style="color:#75715e"># 当接收到的总长度 &gt;= POST的计算长度,表示所有数据接收完成,退出</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> payload_flag <span style="color:#f92672">&lt;=</span> lrecv_all: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">break</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> data_body</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>里面解析headers的代码如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">count_payload_len</span>(data): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> d <span style="color:#f92672">in</span> data<span style="color:#f92672">.</span>split(<span style="color:#e6db74">b</span><span style="color:#e6db74">&#39;</span><span style="color:#ae81ff">\r\n</span><span style="color:#e6db74">&#39;</span>): <span style="color:#75715e"># 通过\r\n来分隔报文头</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#e6db74">&#34;LENGTH&#34;</span> <span style="color:#f92672">in</span> d<span style="color:#f92672">.</span>upper()<span style="color:#f92672">.</span>decode(): <span style="color:#75715e"># 如果报文头部有length关键词,当然可以写完整,我的heasers没有其他的length就简化了</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> int(d<span style="color:#f92672">.</span>decode()<span style="color:#f92672">.</span>split(<span style="color:#e6db74">&#34;:&#34;</span>)[<span style="color:#ae81ff">1</span>]) <span style="color:#75715e"># 分隔出payload长度并返回</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面的代码其实写的很复杂,因为我解析POST整体报文的功能已经写完并且通过第三方http报文调试工具验证过了,上IoT设备实验的时候才发现了问题,本着少改一点是一点的原则,就把这一部分复杂化了,但确实解决了我的问题,就OK了。</p> -<p>对了,这篇博客就是利用这个这个方案改造的新服务端进行上传同步的,之前用GitHub Actions进行同步博客,每次运营商都会发一条高危访问的短信和邮件通知我,太烦了。</p> - - - - - diff --git a/public/tags/teamspeak/index.html b/public/tags/teamspeak/index.html deleted file mode 100644 index d6026c4..0000000 --- a/public/tags/teamspeak/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Teamspeak – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/teamspeak/index.xml b/public/tags/teamspeak/index.xml deleted file mode 100644 index 924e08e..0000000 --- a/public/tags/teamspeak/index.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 香风家的火柴盒 – Teamspeak - https://www.small09.top/tags/teamspeak/ - Recent content in Teamspeak on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Thu, 18 Feb 2021 00:00:00 +0800 - - - - - - - - - - - 使用Docker安装TeamSpeak - https://www.small09.top/posts/210218-teamspeakwithdocker/ - Thu, 18 Feb 2021 00:00:00 +0800 - - https://www.small09.top/posts/210218-teamspeakwithdocker/ - - - - <p>TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。</p> -<h2>Teamspeak<span class="hx:absolute hx:-mt-20" id="teamspeak"></span> - <a href="#teamspeak" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。</p> -<p>所以,选择docker安装ts就是一个很不错的选择。</p> -<h2>Docker及其安装<span class="hx:absolute hx:-mt-20" id="docker及其安装"></span> - <a href="#docker%e5%8f%8a%e5%85%b6%e5%ae%89%e8%a3%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。</p> -<p>我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo yum install docker <span style="color:#75715e">#安装docker程序,会自动选择合适的</span> -</span></span><span style="display:flex;"><span>sudo systemctl start docker <span style="color:#75715e">#启动docker服务</span> -</span></span><span style="display:flex;"><span>sudo systemctl enable docker <span style="color:#75715e">#允许docker开机自启</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>Docker安装TS<span class="hx:absolute hx:-mt-20" id="docker安装ts"></span> - <a href="#docker%e5%ae%89%e8%a3%85ts" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak</code></p> -<p>直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。</p> -<h2>端口<span class="hx:absolute hx:-mt-20" id="端口"></span> - <a href="#%e7%ab%af%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>从指令可以看出,docker需要使用到<strong>9987,10011,30033</strong>三个端口,所以需要到服务器后台开启防火墙上对应端口。</p> -<h2>管理员密钥<span class="hx:absolute hx:-mt-20" id="管理员密钥"></span> - <a href="#%e7%ae%a1%e7%90%86%e5%91%98%e5%af%86%e9%92%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。</p> -<p><code>docker ps -a</code>查找所有容器。</p> -<p><code>docker logs -f [CONTATINER ID]</code>查看log,找到token即可。客户端设置之后再说。</p> -<p>密钥只会在第一次运行时打印,注意保存。</p> -<p><em>参考:<a href="https://woolio.cn/683/"target="_blank" rel="noopener">https://woolio.cn/683/</a></em></p> - - - - - diff --git a/public/tags/tools/index.html b/public/tags/tools/index.html deleted file mode 100644 index df6c705..0000000 --- a/public/tags/tools/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -Tools – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/tools/index.xml b/public/tags/tools/index.xml deleted file mode 100644 index 58b1394..0000000 --- a/public/tags/tools/index.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 香风家的火柴盒 – Tools - https://www.small09.top/tags/tools/ - Recent content in Tools on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Thu, 18 Feb 2021 00:00:00 +0800 - - - - - - - - - - - 使用Docker安装TeamSpeak - https://www.small09.top/posts/210218-teamspeakwithdocker/ - Thu, 18 Feb 2021 00:00:00 +0800 - - https://www.small09.top/posts/210218-teamspeakwithdocker/ - - - - <p>TeamSpeak的官网总是有些问题,无法下载其客户端,所以考虑使用Docker来部署一个ts服务器环境。</p> -<h2>Teamspeak<span class="hx:absolute hx:-mt-20" id="teamspeak"></span> - <a href="#teamspeak" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TeamSpeak(简称ts)是一款实时语音聊天软件,是替换yy语音的一个很好的选择。ts唯一的缺点是其服务器在国外,不论下载客户端还是服务端都是一个很麻烦的事情,且下载服务端后需要诸多配置和环境依赖,如果哪天不用了卸载也是一个麻烦事儿。</p> -<p>所以,选择docker安装ts就是一个很不错的选择。</p> -<h2>Docker及其安装<span class="hx:absolute hx:-mt-20" id="docker及其安装"></span> - <a href="#docker%e5%8f%8a%e5%85%b6%e5%ae%89%e8%a3%85" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker是一个容器,可以打包一个程序及其依赖,然后移植到任意系统运行而不报错。</p> -<p>我的服务器的腾讯云轻量-Wordpress应用,没有自带docker,所以第一步先安装docker:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo yum install docker <span style="color:#75715e">#安装docker程序,会自动选择合适的</span> -</span></span><span style="display:flex;"><span>sudo systemctl start docker <span style="color:#75715e">#启动docker服务</span> -</span></span><span style="display:flex;"><span>sudo systemctl enable docker <span style="color:#75715e">#允许docker开机自启</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>Docker安装TS<span class="hx:absolute hx:-mt-20" id="docker安装ts"></span> - <a href="#docker%e5%ae%89%e8%a3%85ts" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>docker run -dit -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak</code></p> -<p>直接运行这条指令,docker就会自动寻找下载ts的容器并启动。如果下载太慢则自行查找修改docker仓库源的方式。</p> -<h2>端口<span class="hx:absolute hx:-mt-20" id="端口"></span> - <a href="#%e7%ab%af%e5%8f%a3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>从指令可以看出,docker需要使用到<strong>9987,10011,30033</strong>三个端口,所以需要到服务器后台开启防火墙上对应端口。</p> -<h2>管理员密钥<span class="hx:absolute hx:-mt-20" id="管理员密钥"></span> - <a href="#%e7%ae%a1%e7%90%86%e5%91%98%e5%af%86%e9%92%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>TS允许用户成为管理员,在首次运行的时候会在log中打印。不过docker运行时添加了-dit参数表示后台运行,所以查看参数需要额外的操作。</p> -<p><code>docker ps -a</code>查找所有容器。</p> -<p><code>docker logs -f [CONTATINER ID]</code>查看log,找到token即可。客户端设置之后再说。</p> -<p>密钥只会在第一次运行时打印,注意保存。</p> -<p><em>参考:<a href="https://woolio.cn/683/"target="_blank" rel="noopener">https://woolio.cn/683/</a></em></p> - - - - - diff --git a/public/tags/串口/index.html b/public/tags/串口/index.html deleted file mode 100644 index 92c3fae..0000000 --- a/public/tags/串口/index.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - -串口 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/串口/index.xml b/public/tags/串口/index.xml deleted file mode 100644 index 1ffc18d..0000000 --- a/public/tags/串口/index.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - 香风家的火柴盒 – 串口 - https://www.small09.top/tags/%E4%B8%B2%E5%8F%A3/ - Recent content in 串口 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Tue, 20 Apr 2021 00:00:00 +0800 - - - - - - - - - - - Linux启用四个以上的串口 - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - Tue, 20 Apr 2021 00:00:00 +0800 - - https://www.small09.top/posts/210420-linuxmorethan4serialport/ - - - - <p>工控板安装Linux常常最多只能看到四个串口,通过修改引导文件可以显示所有的串口。</p> -<h2>先说结论<span class="hx:absolute hx:-mt-20" id="先说结论"></span> - <a href="#%e5%85%88%e8%af%b4%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e"># 1.修改开机grub文件</span> -</span></span><span style="display:flex;"><span>sudo vi /etc/default/grub -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2.在&#34;GRUB_CMDLINE_LINUX_DEFAULT=&#34;一行的结尾空格,添加内容</span> -</span></span><span style="display:flex;"><span> 8250.nr_uarts<span style="color:#f92672">=</span><span style="color:#ae81ff">8</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3.更新开机引导并重启</span> -</span></span><span style="display:flex;"><span>sudo update-grub</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>再说细节<span class="hx:absolute hx:-mt-20" id="再说细节"></span> - <a href="#%e5%86%8d%e8%af%b4%e7%bb%86%e8%8a%82" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>给带有多串口的工控机安装国产Linux操作系统UOS,发现<code>/dev/ttyS</code>只有四个,而且一个都不通,其实这是Linux 的通病,如果发行商没有提前配置,我们只能看到四个不能用的串口。但是工控机都有8-16个串口,不得不想办法让他们能够正常使用,而许多串口芯片只需要基本的驱动就能运行,也不提供专有驱动的源代码编译<font size=2 color=#ff0000>(一般安装专用驱动后,串口名称会改变,比如xr17v358芯片的驱动安装后名称变成ttyXR0)</font>,我们只有从linux本身下手了。</p> -<p>经过多番查找资料,虽然不知道为什么,但是我们应该修改<code>/etc/default/grub</code>文件,其中有一行是这样的:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;这里面 的内容 先不管 它&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>我看了UOS(含Deepin)、Ubuntu和服务器的Centos7都有,在这一行的最后添加<code>8250.nr_uart=32</code>,其中数字&lt;=32都行,效果如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;这里面 的内容 先不管 它 8250.nr_uarts=32&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后更新一下系统的引导</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>sudo update-gurb -</span></span><span style="display:flex;"><span>reboot</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>重启完了你就能看到更多的串口啦!配合<a href="https://www.small09.top/?p=24"target="_blank" rel="noopener">修改udev规则</a>,你就可以用普通用户的权限使用串口通信了。但是请注意其他隐患,比如这个芯片配合基本驱动只能完成基础的收发功能,流控的RTS、CTS等还是需要专用驱动实现的!</p> -<h2>最后吐槽<span class="hx:absolute hx:-mt-20" id="最后吐槽"></span> - <a href="#%e6%9c%80%e5%90%8e%e5%90%90%e6%a7%bd" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>为了串口问题我找了一下午的资料,最后才在外网找到了一个能用的。国内的教程都是说要修改<code>/boot/gurb/gurb2</code>,宝友,这可不兴改啊,这个改坏了系统可就没了啊!这些文件普通用户连浏览权限都没就可见其重要性。</p> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><a href="https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/"target="_blank" rel="noopener">https://blog.wjacobsen.dk/2019/05/03/enable-more-than-4-serial-ports-linux-unix/</a></p> -<p>核心步骤就参考了这个,在Linux方面大家还是多用google,多用英文去搜索吧!</p> - - - - - Linux串口和udev理解 - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-serialmodeandudevinlinux/ - - - - <p>配置串口权限,顺便看一下linux的udev规则。</p> -<h2>串口的问题<span class="hx:absolute hx:-mt-20" id="串口的问题"></span> - <a href="#%e4%b8%b2%e5%8f%a3%e7%9a%84%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在现场开发的同事反映UOS工控机没有配置串口,每次都需要sudo才能使用。(明明在家里你们都会自己配置好环境与权限,为什么到了现场反而不会了需要我提供协助呢?)</p> -<p>我之前没考虑过这个问题,认为串口就是得root权限操作才安全。但是既然提出了需求,就赶紧百度并测试一下吧。</p> -<h2>赋予普通用户串口权限的两种方法<span class="hx:absolute hx:-mt-20" id="赋予普通用户串口权限的两种方法"></span> - <a href="#%e8%b5%8b%e4%ba%88%e6%99%ae%e9%80%9a%e7%94%a8%e6%88%b7%e4%b8%b2%e5%8f%a3%e6%9d%83%e9%99%90%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>在百度上,给普通用户串口权限有两种主流方法(可能2会了,Google上不去),一种是将用户放入特殊的用户组,从而获得权限。另一种是加入udev规则,在串口插入时自动更改权限。</p> -<p>我个人更倾向于使用第二种方案,因为公司中不同的人装系统就可能起不同的名字,之后进入生产环境可能又会起新的名字,所以采用第二种设置规则的办法,便于之后制作恢复镜像和一键部署。</p> -<h2>xxx.rules<span class="hx:absolute hx:-mt-20" id="xxxrules"></span> - <a href="#xxxrules" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo vi /etc/udev/rules.d/70-tty-usb-rules</code>,写入以下内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>KERNEL<span style="color:#f92672">==</span><span style="color:#e6db74">&#34;ttyS*&#34;</span>,MODE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0666&#34;</span> -</span></span><span style="display:flex;"><span>KERNEL<span style="color:#f92672">==</span><span style="color:#e6db74">&#34;ttyUSB*&#34;</span>,MODE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0666&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这一段的意思是匹配所有ttyS和ttyUSB,插入时都赋予0666的权限,即所有用户都可读可写。重新加载一下设备,就可以按规则配置权限进行操作了。</p> -<h2>udev规则<span class="hx:absolute hx:-mt-20" id="udev规则"></span> - <a href="#udev%e8%a7%84%e5%88%99" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>udev是什么?udev是Linux下的设备文件管理方式,运行在用户侧(devfs在内核侧管理设备文件)。有了udev,<code>/dev</code>目录下的文件就都是真实存在的已连接的设备了。</p> -<p>udev的规则都保存在<code>/etc/udev/rules.d</code>目录下,文件名的格式为<code>数字-名称.rules</code>,数字表示加载顺序,一般是从小往大加载;名称按功能自定义,最后以.rules结尾。这些规则会在设备接入时生效。</p> -<p>规则文件按行执行,每行分为两个部分:匹配和赋值,每个参数使用逗号,分割。</p> -<blockquote> - <p>(这段复制自引用2,仅供参考)。 -<strong>1、udev 规则的所有操作符</strong> -<strong>==</strong>  比较键、值,若等于,则该条件满足; -<strong>!=</strong>  比较键、值,若不等于,则该条件满足; -<strong>=</strong>   对一个键赋值; -<strong>+=</strong>  为一个表示多个条目的键赋值。 -<strong>:=</strong>  对一个键赋值,并拒绝之后所有对该键的改动,防止后面的规则文件对该键重赋值。</p> -<p><strong>2、udev 规则的匹配键</strong> -<strong>ACTION</strong>        事件 (uevent) 的行为,例如:add、remove。 -<strong>KERNEL</strong>         内核设备名称,例如:sda, cdrom。 -<strong>DEVPATH</strong>        设备的 devpath 路径。 -<strong>SUBSYSTEM</strong>       设备的子系统名称,例如:sda 的子系统为 block。 -<strong>BUS</strong>           设备在 devpath 里的总线名称,例如:usb。 -<strong>DRIVER</strong>         设备在 devpath 里的设备驱动名称,例如:ide-cdrom。 -<strong>ID</strong>            设备在 devpath 里的识别号。 -<strong>SYSFS{filename}</strong>    设备的 devpath 路径下,设备的属性文件“filename”里的内容。 -<strong>ENV{key}</strong>       环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。 -<strong>PROGRAM</strong>        调用外部命令。 -<strong>RESULT</strong>         外部命令 PROGRAM 的返回结果。</p> -<p><strong>3、udev 的重要赋值键</strong> -<strong>NAME</strong>           /dev目录下显示的文件名重命名 -<strong>SYMLINK</strong>          为 /dev下文件进行符号链接,防止覆盖系统默认产生的文件 -<strong>OWNER, GROUP, MODE</strong>  为设备设定权限。 -<strong>ENV{key}</strong>         导入一个环境变量。</p> -<p><strong>4、udev 的值和可调用的替换操作符</strong> -Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符: -<strong>$kernel, %k</strong>        设备的内核设备名称,例如:sda、cdrom。 -<strong>$number, %n</strong>        设备的内核号码,例如:sda3 的内核号码是 3。 -<strong>$devpath, %p</strong>       设备的 devpath路径。 -<strong>$id, %b</strong>          设备在 devpath里的 ID 号。 -<strong>$sysfs{file}, %s{file}</strong>   设备的 sysfs里 file 的内容。其实就是设备的属性值。 -<strong>$env{key}, %E{key}</strong>   一个环境变量的值。 -<strong>$major, %M</strong>        设备的 major 号。 -<strong>$minor %m</strong>        设备的 minor 号。 -<strong>$result, %c</strong>        PROGRAM 返回的结果。 -<strong>$parent, %P</strong>       父设备的设备文件名。 -<strong>$root, %r</strong>         udev_root的值,默认是 /dev/。 -<strong>$tempnode, %N</strong>      临时设备名。 -<strong>%%</strong>            符号 % 本身。 -<strong>$$</strong>             符号 $ 本身。</p> - -</blockquote> -<h2>参考<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://www.cnblogs.com/qixianyu/p/6869744.html -[2]https://www.cnblogs.com/cslunatic/p/3171837.html</p> - - - - - diff --git a/public/tags/容器和虚拟化/index.html b/public/tags/容器和虚拟化/index.html deleted file mode 100644 index 68db370..0000000 --- a/public/tags/容器和虚拟化/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -容器和虚拟化 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/容器和虚拟化/index.xml b/public/tags/容器和虚拟化/index.xml deleted file mode 100644 index 080e2a5..0000000 --- a/public/tags/容器和虚拟化/index.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - 香风家的火柴盒 – 容器和虚拟化 - https://www.small09.top/tags/%E5%AE%B9%E5%99%A8%E5%92%8C%E8%99%9A%E6%8B%9F%E5%8C%96/ - Recent content in 容器和虚拟化 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 25 Dec 2023 09:06:25 +0800 - - - - - - - - - - - docker简单笔记 - https://www.small09.top/posts/231225-dockernote/ - Mon, 25 Dec 2023 09:06:25 +0800 - - https://www.small09.top/posts/231225-dockernote/ - - - - <p>学习docker,使用docker,编写docker</p> -<h2>前言<span class="hx:absolute hx:-mt-20" id="前言"></span> - <a href="#%e5%89%8d%e8%a8%80" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>祝自己圣诞节快乐,去年的愿望是“明年不要一个人过圣诞”,今年的愿望也是“明年不要一个人过圣诞”。</p> -<p>不扯了,docker,又称容器,是一种高效的虚拟化技术,能够在不启动虚拟机的情况下,创建一套虚拟环境,方便调试程序,配置环境,乃至直接抄别人的配置。docker还有一个进阶的docker compose,支持多个容器之间组合互联组成一套完整环境。</p> -<p>由于docker比较复杂,又没有官方支持的gui界面~~(在官网看好像有了?但是就当他没有吧。)~~;中文环境的文档、教程都冗长复杂不想看,因此docker一直是我学习路上的一个绕路点。今天打算突破它,记录最简单的docker指令和方法。</p> -<h2>安装docker和docker compose<span class="hx:absolute hx:-mt-20" id="安装docker和docker-compose"></span> - <a href="#%e5%ae%89%e8%a3%85docker%e5%92%8cdocker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>虽然阿里ECS之类的云主机大多预装了docker,但是海外主机、自己装的linux系统大多还是没有docker的,我们从安装开始。以ubuntu为例。</p> -<p>apt仓库提供的docker-io等软件包是社区构建的非官方版本,要安装官方版,需要多几个步骤。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 添加docker官方的gpg</span> -</span></span><span style="display:flex;"><span>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 在/etc/apt/source.list.d 里面添加docker的源地址,借用官网的一行指令直接添加</span> -</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;deb [arch=</span><span style="color:#66d9ef">$(</span>dpkg --print-architecture<span style="color:#66d9ef">)</span><span style="color:#e6db74"> signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu </span><span style="color:#66d9ef">$(</span>. /etc/os-release <span style="color:#f92672">&amp;&amp;</span> echo <span style="color:#e6db74">&#34;</span>$VERSION_CODENAME<span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74"> stable&#34;</span> | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 我这边添加的结果是</span> -</span></span><span style="display:flex;"><span>deb <span style="color:#f92672">[</span>arch<span style="color:#f92672">=</span>amd64 signed-by<span style="color:#f92672">=</span>/usr/share/keyrings/docker-archive-keyring.gpg<span style="color:#f92672">]</span> https://download.docker.com/linux/ubuntu jammy stable</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>然后可以通过apt源安装docker了</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update -</span></span><span style="display:flex;"><span>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>*<em>注意,上面的指令同时安装了docker-compose</em>。如果不安装docker,直接安装docker-compose也是可以的。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -</span></span><span style="display:flex;"><span>sudo cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>更加具体的步骤和细节可以到官网查看:<a href="https://docs.docker.com/engine/install/ubuntu/"target="_blank" rel="noopener">docker安装</a>、<a href="https://docs.docker.com/compose/install/standalone/"target="_blank" rel="noopener">docker-compose安装</a></p> -<h2>docker 基本使用方法<span class="hx:absolute hx:-mt-20" id="docker-基本使用方法"></span> - <a href="#docker-%e5%9f%ba%e6%9c%ac%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>使用一个docker镜像的步骤是【拉取镜像、创建容器、运行容器、停止容器】,一般创建和运行通过同一条指令实现。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 拉取一个镜像</span> -</span></span><span style="display:flex;"><span>docker pull xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 创建容器并运行</span> -</span></span><span style="display:flex;"><span>docker run --name aaa xxx/yyy -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 停止容器</span> -</span></span><span style="display:flex;"><span>docker stop docker-id</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>关于运行容器,有很多常用的参数:</p> -<blockquote> - <p>-d 容器转入后台运行</p> -<p>-e 设置容器的环境变量</p> -<p>&ndash;name 容器名称</p> -<p>-p 80:80 将暴露的端口映射到容器内端口,外部:内部</p> -<p>-v f:c 将一个文件(卷)映射到容器内部的文件,支持文件和文件夹。外:内</p> -<p>-e、-p、-v 参数都可以多次使用,达到添加多个变量的目的。</p> - -</blockquote> -<p>停止容器支持多种类型的参数,包括容器ID和容器名称。容器ID可以只写出部分,能够区分容器即可。</p> -<p>查询容器id,可以使用指令<code>docker ps</code>。docker还有其他几个查询和控制指令</p> -<blockquote> - <p><code>docker exec 容器 指令</code> 允许在外部执行docker内的指令,添加 -d 参数转入后台运行。</p> -<p><code>docker ps</code> 列出正在运行的docker容器信息。添加 -a 参数查看所有容器,包括已经停止的。</p> -<p><code>docker images</code> 列出已经下载的镜像列表。与 <code>docker image</code> 指令不同。</p> -<p><code>docker kill 容器名/id</code> 杀死一个无法stop的容器</p> -<p><code>docker rm 容器</code> 删除一个<strong>容器</strong></p> -<p><code>docker rmi 镜像名</code> 删除一个<strong>镜像</strong></p> -<p><code>docker restart 容器ID</code> 重启一个容器,毕竟我们不需要每次都创建新容器。</p> - -</blockquote> -<p>关于docker运行时需要哪些端口,可以通过镜像的docker hub页面进行判断。</p> -<h2>更换docker镜像源<span class="hx:absolute hx:-mt-20" id="更换docker镜像源"></span> - <a href="#%e6%9b%b4%e6%8d%a2docker%e9%95%9c%e5%83%8f%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>和apt源、github一样,docker镜像源服务器在国外,国内访问可能很慢,遇到这个情况可以更换成国内的镜像源。</p> -<p>修改<code>/etc/docker/daemon.json</code>文件,添加下面的内容:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{ -</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;registry-mirrors&#34;</span>: [ -</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;https://docker.mirrors.ustc.edu.cn&#34;</span> -</span></span><span style="display:flex;"><span> ] -</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>编辑完成后需要重启docker服务。</p> -<p>具体的源地址可以进行搜索和尝试,我访问速度还行就没有更换。</p> -<h2>docker-compose<span class="hx:absolute hx:-mt-20" id="docker-compose"></span> - <a href="#docker-compose" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>docker compose是通过ymal配置文件来启动容器的,它支持将多个容器组合启动,并自动处理依赖关系。在docker compose中我们不需要拉取镜像,直接在配置文件中指定镜像名,在启动后会自动拉取。</p> -<p>首先创建一个工作目录,并创建一个<code>docker-compose.yml</code>的文件,默认情况下docker compose指令只认这个文件名。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><pre><code>version: &#39;3&#39; -services: - [NAME1]: - image: &#34;image/name&#34; - ports: - - 81:80 - - 8080:8080 - environment: - HOSTNAME: &#34;cc&#34; - PORT: 8181 - volumes: - - nginx-data:/etc/nginx - [NAME2]: - image: &#39;xxx&#39;</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>docker compose的ymal文件可以实现十分复杂的功能,我暂时也没搞懂,就只放一个基础结构的文件在这里。与docker run指令相同,<code>ports</code>字段指定了内外端口的映射,即&rsquo;外部:内部&rsquo;,卷映射同理。<code>environment</code>不需要 - 开头。</p> -<p>编写完ymal文件,就可以启动容器组了。首先切换到文件所在的目录,即工作目录,然后执行指令直接启动</p> -<blockquote> - <p><code>docker compose up</code> 启动容器,查找当前目录下的ymal文件。-d 参数可以转入后台运行。 -f参数可以指定ymal文件。</p> -<p><code>docker compose down</code> 停止容器,并删除对应的容器和网络</p> -<p><code>docker compose exec NAME command</code> 在ymal文件内其中一个容器里运行指令</p> - -</blockquote> -<p>docker compose指令必须是要有ymal文件才能运行的,它通过这个文件来寻找有关的网络和容器。</p> -<p>目前浅学了一下,只有学一点更新一点吧。</p> - - - - - diff --git a/public/tags/数据恢复/index.html b/public/tags/数据恢复/index.html deleted file mode 100644 index 71d447f..0000000 --- a/public/tags/数据恢复/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -数据恢复 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/数据恢复/index.xml b/public/tags/数据恢复/index.xml deleted file mode 100644 index 328807c..0000000 --- a/public/tags/数据恢复/index.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - 香风家的火柴盒 – 数据恢复 - https://www.small09.top/tags/%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D/ - Recent content in 数据恢复 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 15 Nov 2021 10:02:30 +0800 - - - - - - - - - - - 记一次拯救NAS硬盘 - https://www.small09.top/posts/211115-fixnasdriver/ - Mon, 15 Nov 2021 10:02:30 +0800 - - https://www.small09.top/posts/211115-fixnasdriver/ - - - - <p>更新家里的NAS,手滑把原来NAS硬盘的分区信息删掉了。如何拯救盘里的数据?</p> -<p><em>图片稍后补充。</em></p> -<h2>v 0 起因<span class="hx:absolute hx:-mt-20" id="v-0-起因"></span> - <a href="#v-0-%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>双十一买了两块新的4T紫盘,打算升级一下家里的黑群晖。原来黑群晖是用一台N手工控机+1TB希捷笔记本硬盘(看缓存和速度肯定是SMR盘了),数据安全几乎为0.</p> -<p>考虑到小工控机的电源带不动那么多硬盘,机箱也没有空间,就把家里闲置的i3台式机整了过来,拆掉原来的硬盘装上紫盘组新nas了。顺手拆了一个捡来的监控机上的1TB西数紫盘。</p> -<p>为了节约迁移系统和数据的时间,我打算拿两个sata易驱线,用DiskGenuies进行克隆。后来网上冲浪发现群晖系统是认硬盘SN的,也就是说我克隆的数据没有一丁点用,加上手头上没有2.5转3.5的转接件,就考虑把笔记本盘放回老nas,然后直接拷贝或者备份到新nas。</p> -<h2>v-1 杯具<span class="hx:absolute hx:-mt-20" id="v-1-杯具"></span> - <a href="#v-1-%e6%9d%af%e5%85%b7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>当我按下取消的时候,惨剧发生了。其实整盘克隆的时候,DG会删除所有分区,克隆完了再重建分区。我取消克隆,然后退出DG。它提示我是否保存分区更改,我以为是1T紫盘的分区,顺手点了个否。当我重启DG的时候,发现希捷笔记本盘只剩一条灰色,未分区的区域。</p> -<h2>v-2 尝试<span class="hx:absolute hx:-mt-20" id="v-2-尝试"></span> - <a href="#v-2-%e5%b0%9d%e8%af%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>DG有个功能是搜索重建分区表,我第一时间进行搜索。此时还没有网盘内<strong>写入任何内容</strong>,也<strong>没有格式化</strong>。数据应该是都在的,只要按照原来的样子重新分区应该就能重新读写数据了。</p> -<p>为什么不手动分区?因为群晖会在硬盘上先建立一个系统分区,然后建立swap分区,空一段空间后再建立数据分区。每个分区开始和结束的位置都是未知的,网络上也没有可以参考的内容。</p> -<p>经过一个多小时的搜索,除了第一个2.4GB的系统分区被找到以外,一无所获。我怀疑是不是我期间制作黑裙启动盘影响了,又搜索了一遍,好家伙还是没有。</p> -<p>搜索期间网上冲浪找前人的肩膀,结果他们要么是分区没被删直接装Windows下btrfs驱动(gitee开源)读取(群晖坏了),要么是DG轻松搜出全部分区(和群晖无关)。我还尝试查找丢失文件,依然一无所获。</p> -<p>难道就这么放弃了么?</p> -<h2>v 1 曙光<span class="hx:absolute hx:-mt-20" id="v-1-曙光"></span> - <a href="#v-1-%e6%9b%99%e5%85%89" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>群晖使用的BTRFS格式不是什么群晖专用格式,而是SUN(Oracle收购)开发的新一代文件系统,针对ext3/4进行优化升级。所以比较新的Linux系统都支持使用这个格式;装个驱动也能轻易读取。</p> -<p>我本来笔记本是有Deepin系统的,上次win10损毁了我就格掉装了win11。后来想起来我还有块树莓派正跑着linux系统。但是没有分区的硬盘上了Linux也啥都读不到。恰好这时候新nas的系统已经起来了,1T紫盘上的独立分区也建立好了。两款空间一样的盘,同样版本的群晖系统,建立一样的存储空间后,那不就是连分区也一模一样了么?!</p> -<p>开搞,ssh连上群晖,用sudo blkid看到硬盘实际的分区信息,它正好是显示的扇区起止、大小。打开DG,手动分区,按照群晖的磨样给小硬盘手动分区。DG不支持btrfs分区,那我随便挂一个ext4吧。分区过程和保存的时候,千万不要格式化了。</p> -<p>把小硬盘用易驱线连上树莓派,<code>lsblk</code>看到这个硬盘有三个分区,其中<code>/dev/sda3</code>下面还有一个<code>md127</code>,不知道是啥,查看发现是raid。群晖的数据区,哪怕是单盘basic也是以raid方式存在的,方便以后升级raid模式吧大概。也就是说,虽然我分区表是瞎分的,Linux还是能够正确读取到原来的分区和文件系统。</p> -<h2>v 2 得到数据<span class="hx:absolute hx:-mt-20" id="v-2-得到数据"></span> - <a href="#v-2-%e5%be%97%e5%88%b0%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>安装<code>mdadm</code>软件包,我的树莓派不带这个,然后就能挂载raid盘了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount /dev/md127 ~/disk</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>disk目录提前建立好了,把机械盘挂载上去,cd到目录里,然后我就发现了新世界的大门。盘里有个<code>NasData</code>目录,这正是我当时保存文件的地方。cd进去,在!都还在!</p> -<h2>v 3 移动数据<span class="hx:absolute hx:-mt-20" id="v-3-移动数据"></span> - <a href="#v-3-%e7%a7%bb%e5%8a%a8%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我打算直接把就数据拷贝到新NAS里去了,烤到移动硬盘再复制到nas大费周章的。</p> -<p>在NAS里的主共享文件夹启动NFS服务,映射为root,允许所有来源的读写,然后到树莓派中挂载nfs</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -t nfs 10.x.x.x:/volume2/NasData ~/Nasdata</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>主目录下提前建立Nasdata目录,挂载完成后新Nas的内容也都出现了。不想一个个复制文件,CP指令不支持排除不想要的文件(毕竟还有部分文件依然保存在移动硬盘和笔记本里,树莓派只支持2.4GHz的wifi太慢),最终我选择了rsync指令进行“本地复制”。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>rsync -vrultD --exclude <span style="color:#e6db74">&#39;文件名&#39;</span> --exclude <span style="color:#e6db74">&#39;目录名&#39;</span> ~/disk/NasData/* ~/Nasdata/临时目录 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -v 详细输出 -r 递归拷贝(保留目录结构) -u 仅更新,防止中断再开后重新拷贝 -l 保留软连接 -t 保留时间信息 -D 保持设备文件信息</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 不用-a 是因为对拷过去的文件赋权限时疯狂报错失败</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>经历树莓派三次死机两次中断后,我终于抢救了500G数据中的50G(另外450包括百度云同步、移动硬盘依然保存着的动漫视频等)。</p> -<h2>v 4 结论<span class="hx:absolute hx:-mt-20" id="v-4-结论"></span> - <a href="#v-4-%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>现在数据和小姐姐们都住在一个raid1备份的空间中,应该轻易不会发生无家可归的情况了。</p> -<p>这次事件完全是我自己作死,群晖其实提供了备份功能,可以完整的把数据、部分设置乃至我的Docker容器都完整备份到新NAS里(只要两台都在线),而且树莓派的wifi只有5MiB/s,比起家里千兆的内网,速度慢了数十倍,时间也花了我整整一下午。</p> -<p>总之硬盘出了事故不要慌,只要不是物理损坏,都有机会修复。除了事故后第一时间就要停止读写,更不要格式化,先尝试重建分区表,失败了换个系统试试。说不定我不重建,放到Linux上也能看到正常的三个分区呢?</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202111150957877.png" alt="image-20211115095410121" loading="lazy" /></p> - - - - - diff --git a/public/tags/显卡/index.html b/public/tags/显卡/index.html deleted file mode 100644 index 1805374..0000000 --- a/public/tags/显卡/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -显卡 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/显卡/index.xml b/public/tags/显卡/index.xml deleted file mode 100644 index c24f2b3..0000000 --- a/public/tags/显卡/index.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - 香风家的火柴盒 – 显卡 - https://www.small09.top/tags/%E6%98%BE%E5%8D%A1/ - Recent content in 显卡 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 19 Jul 2021 11:00:07 +0800 - - - - - - - - - - - Linux中获得AMD显卡的状态信息 - https://www.small09.top/posts/210719-gpuinfoinlinux/ - Mon, 19 Jul 2021 11:00:07 +0800 - - https://www.small09.top/posts/210719-gpuinfoinlinux/ - - - - <p>在Linux下获得AMD GPU的状态和温度信息。</p> -<p>在Linux下如果要查看Nvidia GPU的状态信息,可以使用Nvidia驱动自带的工具。而AMD显卡一般都是使用的开源驱动,这种情况下如何获得显卡的状态和占用呢?</p> -<p><em>文章部分图片之后再附</em></p> -<h2>1、获取GPU信息<span class="hx:absolute hx:-mt-20" id="1获取gpu信息"></span> - <a href="#1%e8%8e%b7%e5%8f%96gpu%e4%bf%a1%e6%81%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>如需获得GPU的信息(型号、驱动)等,如果系统提供类似*“设备管理器”*的工具可以打开查看。或者就是用<code>lspci</code>指令查看。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 获得所有PCIe设备,在其中找到AMD GPU</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>exam@ple<span style="color:#f92672">]</span>:~$ lspci -</span></span><span style="display:flex;"><span>00:02.0 VGA compatible controller: xxxxxxxx -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>exam@ple<span style="color:#f92672">]</span>:~$ lspci -v -s 00:02.0 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 这里就会显示显卡的具体信息了,包括型号、驱动等,之后补充</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>2、GPU占用率<span class="hx:absolute hx:-mt-20" id="2gpu占用率"></span> - <a href="#2gpu%e5%8d%a0%e7%94%a8%e7%8e%87" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>显卡占用率是一个能反映负载的直观指标,AMD显卡可以通过安装<code>radeontop</code>软件查看。</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary/img/20210719133426.png" alt="radeontop界面" loading="lazy" /></p> -<p>最上面是GPU管道使用,大概类似于总体使用率的东西;最下面是内存使用率,使用sudo权限能看到更多信息。其他项目可以到radeontop的<a href="https://github.com/clbr/radeontop"target="_blank" rel="noopener">Github页面</a>查看。</p> -<h2>3、温度<span class="hx:absolute hx:-mt-20" id="3温度"></span> - <a href="#3%e6%b8%a9%e5%ba%a6" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>特指GPU温度。查阅这篇文章所涉及的知识点的最初目的,也是确认机箱过热是否是GPU的问题。</p> -<p>GPU温度使用第三方软件查看,并使其实时更新。查看温度使用<code>sensors</code>指令,通过安装<code>lm-sensors</code>实现。执行sensors时只会显示一次,我们可以利用watch指令定时刷新温度显示:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>watch -n <span style="color:#ae81ff">2</span> sensors -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 每隔2秒执行sensors指令显示结果</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>![watch执行结果](图片占位)</p> - - - - - diff --git a/public/tags/网络/index.html b/public/tags/网络/index.html deleted file mode 100644 index 0a05131..0000000 --- a/public/tags/网络/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -网络 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/网络/index.xml b/public/tags/网络/index.xml deleted file mode 100644 index f2db62b..0000000 --- a/public/tags/网络/index.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - 香风家的火柴盒 – 网络 - https://www.small09.top/tags/%E7%BD%91%E7%BB%9C/ - Recent content in 网络 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Sun, 28 Mar 2021 00:00:00 +0800 - - - - - - - - - - - Linux修改mac地址 - https://www.small09.top/posts/210328-linuxchangemacip/ - Sun, 28 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210328-linuxchangemacip/ - - - - <p>当Linux的图形界面没有或失效的时候,该如何更改mac地址?</p> -<h1>Linux调整网卡MAC地址(指令)</h1><p>有的时候需要使用欺骗的方法为电脑设置新的mac,比如存在上网网卡限制,或者想要隐藏自己的真实mac地址。这里列举三种修改mac的方法,适用于Debian系的Linux,其他的应该类似。</p> -<h2>方法一:ifconfig<span class="hx:absolute hx:-mt-20" id="方法一ifconfig"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%b8%80ifconfig" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># ifconfig 查看网卡名称$NAME</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 需要sudo权限</span> -</span></span><span style="display:flex;"><span>ifconfig $NAME down -</span></span><span style="display:flex;"><span>ifconfig $NAME hw ether $NEW_MAC -</span></span><span style="display:flex;"><span>ifconfig $NAME up -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 使用ifconfig检查有没有改变</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>方法二:macchanger<span class="hx:absolute hx:-mt-20" id="方法二macchanger"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%ba%8cmacchanger" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>sudo apt install macchanger</code>,安装过程提示是否自启,随便。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ifconfig $NAME down -</span></span><span style="display:flex;"><span>macchanger -m $NEW_MAC $NAME -</span></span><span style="display:flex;"><span>ifconfig $NAME up</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>ps:macchanger可以附加多种参数,如-m指定mac地址,-s查看状态,-r随机地址</p> -<h2>备注:<span class="hx:absolute hx:-mt-20" id="备注"></span> - <a href="#%e5%a4%87%e6%b3%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上两种方法是软件层面的修改,不会对硬件造成损伤,重启之后就能恢复如初。如果是要长期有效,可以把这些命令写入脚本开机自启。除了这两个,还有另一种软修改的方法,因为我总是提示失败就遗忘了。</p> -<p>有些方法会提到修改/etc目录下的文件实现MAC地址的修改,但是我一个文件都没找到(UOS),这个是因系统而异的,不同的发行版可以选择性的编译这些文件,就会造成有人有有人没有,因为没有实践,所以就不写在这里了。</p> -<h2>方法三:ethtool(慎用)<span class="hx:absolute hx:-mt-20" id="方法三ethtool慎用"></span> - <a href="#%e6%96%b9%e6%b3%95%e4%b8%89ethtool%e6%85%8e%e7%94%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>以上方法都失效,可以直接修改网卡的物理MAC地址,修改后无法恢复,慎用</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 首先检查mac是否支持修改</span> -</span></span><span style="display:flex;"><span>ethtool -i $NAME -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果 supports-eeprom-access: no,大概率不支持修改</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 查看网卡的mac寄存器</span> -</span></span><span style="display:flex;"><span>ethtool -e $NAME -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果无法读取,大概率不支持修改</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 修改mac,按字节修改</span> -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">0</span> value 0xAA -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">1</span> value 0xBB -</span></span><span style="display:flex;"><span>ethtool -E $NAME offset <span style="color:#ae81ff">2</span> value 0xCC -</span></span><span style="display:flex;"><span>...共六行 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 如果修改无效,则驱动不支持修改</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h2>如果以上方法都无法修改,则建议申请新的ip。。。<span class="hx:absolute hx:-mt-20" id="如果以上方法都无法修改则建议申请新的ip"></span> - <a href="#%e5%a6%82%e6%9e%9c%e4%bb%a5%e4%b8%8a%e6%96%b9%e6%b3%95%e9%83%bd%e6%97%a0%e6%b3%95%e4%bf%ae%e6%94%b9%e5%88%99%e5%bb%ba%e8%ae%ae%e7%94%b3%e8%af%b7%e6%96%b0%e7%9a%84ip" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><em><font size="1">文章首发于<a href="small09.top" target="前往火柴盒" title="前往Kushidou个人博客" rel="noopener">香风家的小别墅</a>,转载请携带出处。</font></em></p> - - - - - diff --git a/public/tags/群晖/index.html b/public/tags/群晖/index.html deleted file mode 100644 index a260abc..0000000 --- a/public/tags/群晖/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -群晖 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/群晖/index.xml b/public/tags/群晖/index.xml deleted file mode 100644 index 36b55d4..0000000 --- a/public/tags/群晖/index.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - 香风家的火柴盒 – 群晖 - https://www.small09.top/tags/%E7%BE%A4%E6%99%96/ - Recent content in 群晖 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 15 Nov 2021 10:02:30 +0800 - - - - - - - - - - - 记一次拯救NAS硬盘 - https://www.small09.top/posts/211115-fixnasdriver/ - Mon, 15 Nov 2021 10:02:30 +0800 - - https://www.small09.top/posts/211115-fixnasdriver/ - - - - <p>更新家里的NAS,手滑把原来NAS硬盘的分区信息删掉了。如何拯救盘里的数据?</p> -<p><em>图片稍后补充。</em></p> -<h2>v 0 起因<span class="hx:absolute hx:-mt-20" id="v-0-起因"></span> - <a href="#v-0-%e8%b5%b7%e5%9b%a0" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>双十一买了两块新的4T紫盘,打算升级一下家里的黑群晖。原来黑群晖是用一台N手工控机+1TB希捷笔记本硬盘(看缓存和速度肯定是SMR盘了),数据安全几乎为0.</p> -<p>考虑到小工控机的电源带不动那么多硬盘,机箱也没有空间,就把家里闲置的i3台式机整了过来,拆掉原来的硬盘装上紫盘组新nas了。顺手拆了一个捡来的监控机上的1TB西数紫盘。</p> -<p>为了节约迁移系统和数据的时间,我打算拿两个sata易驱线,用DiskGenuies进行克隆。后来网上冲浪发现群晖系统是认硬盘SN的,也就是说我克隆的数据没有一丁点用,加上手头上没有2.5转3.5的转接件,就考虑把笔记本盘放回老nas,然后直接拷贝或者备份到新nas。</p> -<h2>v-1 杯具<span class="hx:absolute hx:-mt-20" id="v-1-杯具"></span> - <a href="#v-1-%e6%9d%af%e5%85%b7" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>当我按下取消的时候,惨剧发生了。其实整盘克隆的时候,DG会删除所有分区,克隆完了再重建分区。我取消克隆,然后退出DG。它提示我是否保存分区更改,我以为是1T紫盘的分区,顺手点了个否。当我重启DG的时候,发现希捷笔记本盘只剩一条灰色,未分区的区域。</p> -<h2>v-2 尝试<span class="hx:absolute hx:-mt-20" id="v-2-尝试"></span> - <a href="#v-2-%e5%b0%9d%e8%af%95" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>DG有个功能是搜索重建分区表,我第一时间进行搜索。此时还没有网盘内<strong>写入任何内容</strong>,也<strong>没有格式化</strong>。数据应该是都在的,只要按照原来的样子重新分区应该就能重新读写数据了。</p> -<p>为什么不手动分区?因为群晖会在硬盘上先建立一个系统分区,然后建立swap分区,空一段空间后再建立数据分区。每个分区开始和结束的位置都是未知的,网络上也没有可以参考的内容。</p> -<p>经过一个多小时的搜索,除了第一个2.4GB的系统分区被找到以外,一无所获。我怀疑是不是我期间制作黑裙启动盘影响了,又搜索了一遍,好家伙还是没有。</p> -<p>搜索期间网上冲浪找前人的肩膀,结果他们要么是分区没被删直接装Windows下btrfs驱动(gitee开源)读取(群晖坏了),要么是DG轻松搜出全部分区(和群晖无关)。我还尝试查找丢失文件,依然一无所获。</p> -<p>难道就这么放弃了么?</p> -<h2>v 1 曙光<span class="hx:absolute hx:-mt-20" id="v-1-曙光"></span> - <a href="#v-1-%e6%9b%99%e5%85%89" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>群晖使用的BTRFS格式不是什么群晖专用格式,而是SUN(Oracle收购)开发的新一代文件系统,针对ext3/4进行优化升级。所以比较新的Linux系统都支持使用这个格式;装个驱动也能轻易读取。</p> -<p>我本来笔记本是有Deepin系统的,上次win10损毁了我就格掉装了win11。后来想起来我还有块树莓派正跑着linux系统。但是没有分区的硬盘上了Linux也啥都读不到。恰好这时候新nas的系统已经起来了,1T紫盘上的独立分区也建立好了。两款空间一样的盘,同样版本的群晖系统,建立一样的存储空间后,那不就是连分区也一模一样了么?!</p> -<p>开搞,ssh连上群晖,用sudo blkid看到硬盘实际的分区信息,它正好是显示的扇区起止、大小。打开DG,手动分区,按照群晖的磨样给小硬盘手动分区。DG不支持btrfs分区,那我随便挂一个ext4吧。分区过程和保存的时候,千万不要格式化了。</p> -<p>把小硬盘用易驱线连上树莓派,<code>lsblk</code>看到这个硬盘有三个分区,其中<code>/dev/sda3</code>下面还有一个<code>md127</code>,不知道是啥,查看发现是raid。群晖的数据区,哪怕是单盘basic也是以raid方式存在的,方便以后升级raid模式吧大概。也就是说,虽然我分区表是瞎分的,Linux还是能够正确读取到原来的分区和文件系统。</p> -<h2>v 2 得到数据<span class="hx:absolute hx:-mt-20" id="v-2-得到数据"></span> - <a href="#v-2-%e5%be%97%e5%88%b0%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>安装<code>mdadm</code>软件包,我的树莓派不带这个,然后就能挂载raid盘了。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount /dev/md127 ~/disk</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>disk目录提前建立好了,把机械盘挂载上去,cd到目录里,然后我就发现了新世界的大门。盘里有个<code>NasData</code>目录,这正是我当时保存文件的地方。cd进去,在!都还在!</p> -<h2>v 3 移动数据<span class="hx:absolute hx:-mt-20" id="v-3-移动数据"></span> - <a href="#v-3-%e7%a7%bb%e5%8a%a8%e6%95%b0%e6%8d%ae" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>我打算直接把就数据拷贝到新NAS里去了,烤到移动硬盘再复制到nas大费周章的。</p> -<p>在NAS里的主共享文件夹启动NFS服务,映射为root,允许所有来源的读写,然后到树莓派中挂载nfs</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mount -t nfs 10.x.x.x:/volume2/NasData ~/Nasdata</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>主目录下提前建立Nasdata目录,挂载完成后新Nas的内容也都出现了。不想一个个复制文件,CP指令不支持排除不想要的文件(毕竟还有部分文件依然保存在移动硬盘和笔记本里,树莓派只支持2.4GHz的wifi太慢),最终我选择了rsync指令进行“本地复制”。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>rsync -vrultD --exclude <span style="color:#e6db74">&#39;文件名&#39;</span> --exclude <span style="color:#e6db74">&#39;目录名&#39;</span> ~/disk/NasData/* ~/Nasdata/临时目录 -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -v 详细输出 -r 递归拷贝(保留目录结构) -u 仅更新,防止中断再开后重新拷贝 -l 保留软连接 -t 保留时间信息 -D 保持设备文件信息</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 不用-a 是因为对拷过去的文件赋权限时疯狂报错失败</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>经历树莓派三次死机两次中断后,我终于抢救了500G数据中的50G(另外450包括百度云同步、移动硬盘依然保存着的动漫视频等)。</p> -<h2>v 4 结论<span class="hx:absolute hx:-mt-20" id="v-4-结论"></span> - <a href="#v-4-%e7%bb%93%e8%ae%ba" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>现在数据和小姐姐们都住在一个raid1备份的空间中,应该轻易不会发生无家可归的情况了。</p> -<p>这次事件完全是我自己作死,群晖其实提供了备份功能,可以完整的把数据、部分设置乃至我的Docker容器都完整备份到新NAS里(只要两台都在线),而且树莓派的wifi只有5MiB/s,比起家里千兆的内网,速度慢了数十倍,时间也花了我整整一下午。</p> -<p>总之硬盘出了事故不要慌,只要不是物理损坏,都有机会修复。除了事故后第一时间就要停止读写,更不要格式化,先尝试重建分区表,失败了换个系统试试。说不定我不重建,放到Linux上也能看到正常的三个分区呢?</p> -<p><img src="https://cdn.jsdelivr.net/gh/kushidou/PicLibrary//img/202111150957877.png" alt="image-20211115095410121" loading="lazy" /></p> - - - - - diff --git a/public/tags/触摸屏/index.html b/public/tags/触摸屏/index.html deleted file mode 100644 index 38d3953..0000000 --- a/public/tags/触摸屏/index.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - -触摸屏 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - -
- - - - - -
- - - - - - - - diff --git a/public/tags/触摸屏/index.xml b/public/tags/触摸屏/index.xml deleted file mode 100644 index f64c062..0000000 --- a/public/tags/触摸屏/index.xml +++ /dev/null @@ -1,290 +0,0 @@ - - - 香风家的火柴盒 – 触摸屏 - https://www.small09.top/tags/%E8%A7%A6%E6%91%B8%E5%B1%8F/ - Recent content in 触摸屏 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Tue, 24 Aug 2021 00:00:00 +0800 - - - - - - - - - - - Linux处理多触屏的终极解决方案 - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - Tue, 24 Aug 2021 00:00:00 +0800 - - https://www.small09.top/posts/210824-linuxtouchscreenfin/ - - - - <p>一般Linux操作系统接入多个触摸屏的最终解!</p> -<p>从<a href="https://www.small09.top/posts/210311-multitouchscreeninlinux/"target="_blank" rel="noopener">21年3月中旬开始</a>,我就在不断探索Linux操作系统下接入多个触摸屏且为拓展显示的解决方案,随着我们遇到的问题不断变得复杂,那篇博客也越来越乱越来越难读。直到今天我把里面最复杂的方案尝试成功后,我感觉我已经获得了Linux触摸屏的终极奥义。</p> -<p><em>重要:</em> 本文全文基于软件<code>xinput</code></p> -<p><em>更重要:</em> 如简介所说,仍有一种方法无法对应,具体为<code>【两个触摸屏的 VID:PID 与 设备描述 完全一致时,即两个完全相同的显示器】</code>,本文内容对这种情况仍然是无解的,个人认为只能通过硬件端口(/sys/class)来进行识别与调整,本文不涉及该方法(还没吃透)。</p> -<h2>0、核心:xinput<span class="hx:absolute hx:-mt-20" id="0核心xinput"></span> - <a href="#0%e6%a0%b8%e5%bf%83xinput" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>xinput是Linux下的一款配置测试X输入设备的神器,具有以下功能(我们将会用到的)</p> -<blockquote> - <p>xinput (list) : 直接键入xinput或者跟上list参数,就会列出本机所有输入设备,包括名称、ID、层级</p> -<p>xinput list &ndash;id-only : 仅仅列出设备ID(序号,每次开机都可能改变)</p> -<p>xinput map-to-output : 将输入设备映射到输出,比如将触屏映射到某个屏幕</p> -<p>xinput list-props : 列出某个设备的详细信息,后接参数为设备ID。</p> - -</blockquote> -<h2>1、简约:两个完全不同的触摸显示器<span class="hx:absolute hx:-mt-20" id="1简约两个完全不同的触摸显示器"></span> - <a href="#1%e7%ae%80%e7%ba%a6%e4%b8%a4%e4%b8%aa%e5%ae%8c%e5%85%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e8%a7%a6%e6%91%b8%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p><code>xinput map-to-output &quot;$DEVICE NAME A&quot; PORT-A</code></p> -<p>这里对应了两种情况,一是VID:PDI和设备描述符都不同,即毫无关系的两款;二是具有相同的VID:PID,但是设备描述符,这一般是同款芯片配了不同的固件。</p> -<p>首先通过xinput查看所有的输入设备:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>~$ xinput -</span></span><span style="display:flex;"><span>┌ Virtual core pointer id<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">[</span>master pointer <span style="color:#f92672">(</span>3<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK TLITEK-TP id<span style="color:#f92672">=</span><span style="color:#ae81ff">9</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span>| ILITEK Multi-Touch id<span style="color:#f92672">=</span><span style="color:#ae81ff">7</span> <span style="color:#f92672">[</span>slave pointer <span style="color:#f92672">(</span>2<span style="color:#f92672">)]</span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>下略<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>可以看到<code>ILITEK ILITEK-TP</code>和<code>ILITEK Multi-Touch</code>显示为两个不同名称的设备,那么不论其VID:PID具体如何,我们都可以按如下方式进行映射:</p> -<p><code>xinput map-to-output &quot;ILITEK ILITEK-TP&quot; HDMI-0</code></p> -<p><code>xinput map-to-output &quot;ILITEK Multi-Touch&quot; HDMI-1</code></p> -<p>这种方式的要点是1.必须带英文<code>&quot;&quot;</code>,2.引号内名称须完整。<code>map-to-output</code>所携带的第一个参数为输入设备,不一定要设备id,使用设备名也是能够实现。</p> -<h2>2、复杂但通用:VID:PID不同的显示器<span class="hx:absolute hx:-mt-20" id="2复杂但通用vidpid不同的显示器"></span> - <a href="#2%e5%a4%8d%e6%9d%82%e4%bd%86%e9%80%9a%e7%94%a8vidpid%e4%b8%8d%e5%90%8c%e7%9a%84%e6%98%be%e7%a4%ba%e5%99%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>不论usb设备还是PCI设备,他们都有一个唯一识别符VID:PID,这相当于设备的身份证,同功能的设备,不同的厂商、不同的型号,就会有不同的ID。我们可以通过指定设备的VID:PID,筛选出输入设备的编号id,进行映射。</p> -<p>通过<code>xinput list-props [id]</code>可以得到某个设备的详细信息,其中就有十进制的VID,PID,如果这两个参数可以和指定的对应上,那么我们可以提取id映射到屏幕。<code>list-props</code>的结果示例如下:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#f92672">(</span>后续再补<span style="color:#f92672">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>其中<code>Device Product ID</code>一项有两个值,但不像是16进制的VID:PID,经过换算,他们其实是十进制的。利用grep+awk指令筛选出这两个值,和预先设定的比较,确定设备的id。写出来就是这样子:</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 先通过lsusb/xinput/xrandr 等命令确定如下硬件信息:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 1、屏幕VID:PID(16进制)和显示接口,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA<span style="color:#f92672">=</span>222a -</span></span><span style="display:flex;"><span>PIDA<span style="color:#f92672">=</span><span style="color:#ae81ff">0001</span> -</span></span><span style="display:flex;"><span>PORTA<span style="color:#f92672">=</span>VGA-0 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2、先修算出10进制。如果xinput list-props [n] 的“Device Product ID”为16进制的,注释这2行</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 或者这里直接填写Device Product ID里面的结果,先VID后PID。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 字母O,不是数字0,多屏重复本段</span> -</span></span><span style="display:flex;"><span>VIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$VIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span>PIDA_O<span style="color:#f92672">=</span><span style="color:#66d9ef">$((</span><span style="color:#ae81ff">16#</span>$PIDA<span style="color:#66d9ef">))</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># =========自动处理步骤,请勿随意修改==========</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 根据设备ID取其序号</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 3、屏映射,多屏重复本段</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$VIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$PIDA_O<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> xinput map-to-output $I $PORTA -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span>exit <span style="color:#ae81ff">0</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>这个脚本使用<code>xinput list --id-only</code>仅列出了设备的id序号,然后轮询所有的设备找出符合要求的编号,最后仍然使用<code>map-to-output</code>进行映射。这个脚本易于扩展,如果多个触摸屏只需要将3个有序号的注释后面的一块内容重复、修改名字就可以了。</p> -<h2>3、[2]的进阶版<span class="hx:absolute hx:-mt-20" id="32的进阶版"></span> - <a href="#32%e7%9a%84%e8%bf%9b%e9%98%b6%e7%89%88" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>前面都是通过shell/bash脚本的方式实现的重映射,如果要自动映射还需要添加自启动。如果设备进行了插拔,这个设备的映射就失效了,需要手动重新跑一跑脚本。我尝试了编写udev-rules文件,当触摸的设备发生变化时就延时启动映射脚本,但无一例外都是失败的,我觉得是udev生效的必xinput更早,无论延时多久都是这样。</p> -<p>在银河麒麟操作系统中我发现了它提供的触摸映射方法,使用的是<code>pyudev</code>库,采用第三方的方法实现udev-rules的效果,而且在这里延时不会影响系统的加载顺序,只需要系统额外安装<code>python3+pyudev</code>,并且使用desktop文件在开机时启动,即可。</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/python3</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- coding: UTF-8 --</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># -- Author: Blues --</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> pyudev -</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>context <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Context() -</span></span><span style="display:flex;"><span>monitor <span style="color:#f92672">=</span> pyudev<span style="color:#f92672">.</span>Monitor<span style="color:#f92672">.</span>from_netlink(context) -</span></span><span style="display:flex;"><span>monitor<span style="color:#f92672">.</span>filter_by(subsystem<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;hid&#39;</span>) -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> device <span style="color:#f92672">in</span> iter(monitor<span style="color:#f92672">.</span>poll, <span style="color:#66d9ef">None</span>): -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>driver <span style="color:#f92672">!=</span> <span style="color:#e6db74">&#34;hid-multitouch&#34;</span>: -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">continue</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;add&#34;</span> <span style="color:#f92672">or</span> device<span style="color:#f92672">.</span>action <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;change&#34;</span>: -</span></span><span style="display:flex;"><span> os<span style="color:#f92672">.</span>system(<span style="color:#e6db74">&#34;/var/my-touchscreen/remap-screen&#34;</span>)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>上面直接贴了麒麟自带的代码,就修改了一下脚本的路径,经过多次验证,在uos下可以正常使用。借此机会我也参照麒麟的代码修改了一下,用户不用看命令行那些多余的东西,只需要点击几个GUI窗口,程序就可以按照<em>设备名、VID、UID、物理接口</em>四大特征,自动映射到对应的显示屏上了。</p> - - - - - Linux多显示器触屏调试与暂行解决方案 - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - Thu, 11 Mar 2021 00:00:00 +0800 - - https://www.small09.top/posts/210311-multitouchscreeninlinux/ - - - - <p>由于需要使用新创平台配合多个显示器,触摸屏经常出现不准的情况。经过多次的查阅资料、测试和整合,总结了一个解决触摸的方法。一些测试过程中的弯路也保留了,作为记录。</p> -<p><em>2021-03-22更新部分内容</em> -<em>2021-04-28再次更新内容</em></p> -<p><strong>2021-09-14 文章已有新版本,请访问《<a href="https://www.small09.top/posts/210824-linuxtouchscreenfin/"target="_blank" rel="noopener">Linux处理多触屏的终极解决方案</a>》</strong></p> -<h2>问题来源<span class="hx:absolute hx:-mt-20" id="问题来源"></span> - <a href="#%e9%97%ae%e9%a2%98%e6%9d%a5%e6%ba%90" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>最近客户要求使用信创平台,即国产CPU+国产操作系统平台。现在这方面主要使用的操作系统为麒麟和通信uos。这两个的本质都是debian系的,所以很多地方的调试与使用都可以按乌班图的经验来操作。一款产品要使用三块显示器,其中两块是触屏。屏幕通过R5 420显卡,都转换成VGA连接。 -接入设备后,发现触摸屏默认是映射到全屏幕,在任何显示器上操作都会按排列顺序在对应的区域触发。所以需要给每个显示器分别映射触摸。映射的基本指令为</p> -<p><code>xinput map-to-output $触屏设备id $显示屏名称</code></p> -<blockquote> - <p>2021-04-28更新</p> -<p><code>xinput map-to-output</code>指令支持触摸屏名称作为参数,比如我通过<code>xinput</code>指令看到有一个触摸屏的设备名称为<code>ILITEK XXXX</code>,那么我映射的时候直接输入</p> -<blockquote> - <p><code>xinput map-to-output &quot;ILITEK XXX&quot; HDMI-1</code></p> - -</blockquote> - -</blockquote> -<h2>尝试解决<span class="hx:absolute hx:-mt-20" id="尝试解决"></span> - <a href="#%e5%b0%9d%e8%af%95%e8%a7%a3%e5%86%b3" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ul> -<li>首先使用xinput查看触摸设备及其序号$id。这里可以看到多个设备,可以通过单独插拔的方式找到每个设备。</li> -<li><del>然后<code>xinput list-props $id</code>查看设备的VID,这个在后续自动化处理有用。</del></li> -<li><code>xrandr</code>查看<code>$显示器名称</code></li> -</ul> -<h2>自动化处理<span class="hx:absolute hx:-mt-20" id="自动化处理"></span> - <a href="#%e8%87%aa%e5%8a%a8%e5%8c%96%e5%a4%84%e7%90%86" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># 2021-04-28更新:</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 本部分后面的都可以不看了!</span> -</span></span><span style="display:flex;"><span>xinput map-to-output <span style="color:#e6db74">&#34;DEVICE_NAME&#34;</span> DISPLAY -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 把这一段写入可以自动执行的脚本里面,比如/etc/rc.local, ~/.bashrc, /etc/profile, </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 以及制作成service等。有几个触摸屏就写几行指令,比下面的简洁了太多~</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p><strong>仅作归档!下面这些方法过于繁琐!</strong></p> -<p>利用VID和显示器名称作为参数,运行下面的脚本,或者直接手动执行重映射,即可解决触屏作用范围问题。<code>bash this.sh VID1 VID2 ScreenID</code></p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 这段适合触屏硬件id不同的情况,如果遇到id不同需要其他方法。</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:在前几天的实操中,发现字符串比较部分出现了问题,这个方案的可行性有待进一步探索。现在采用另一种方案。</span> -</span></span><span style="display:flex;"><span>MYID_FIRST<span style="color:#f92672">=</span>$1 -</span></span><span style="display:flex;"><span>MYID_SECOND<span style="color:#f92672">=</span>$2 -</span></span><span style="display:flex;"><span>OUT_PUT<span style="color:#f92672">=</span>$3 -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> I in <span style="color:#66d9ef">$(</span>xinput list --id-only<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">do</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#[1]</span> -</span></span><span style="display:flex;"><span> CUR_FIRST<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $1}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> CUR_SECOND<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput list-props $I|grep <span style="color:#e6db74">&#34;Device Product ID&#34;</span>|awk -F : <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk -F , <span style="color:#e6db74">&#39;{print $2}&#39;</span>|awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_FIRST<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$MYID_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;</span>$CUR_SECOND<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span>; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">then</span> -</span></span><span style="display:flex;"><span> MY_INDEX<span style="color:#f92672">=</span>$I -</span></span><span style="display:flex;"><span> break; -</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">fi</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span>xinput map-to-output $MY_INDEX $OUT_PUT -</span></span><span style="display:flex;"><span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI2</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e">#./this.sh VID VID HDMI1</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/bin/bash -</span></span></span><span style="display:flex;"><span><span style="color:#75715e"># 2021-03-22更新:这种方案只要四行就能实现一块的映射,需要时只要复制这个代码块即可,修改DEVICE_NAME 和 SCREEN_NAME 。如果名称中带有重复的部分,可以再加一个grep -v xxxx来排除关键词。但是如果遇到屏幕完全重名的情况,就不可解了。</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>xinput | grep -iw DEVICE_NAME<span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID#*id=<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>TOUCH_ID<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo <span style="color:#e6db74">${</span>TOUCH_ID%% *<span style="color:#e6db74">}</span><span style="color:#66d9ef">)</span> -</span></span><span style="display:flex;"><span>xinput map-to-output $TOUCH_ID SCREEN_NAME</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<p>此方法可以在直到触屏VID后,(一般多显示器使用的是不同的型号),<del>使用自启动rc.local开机执行重映射指令,保证每次开机都能准确找到屏幕,且适用于系列产品不用单独找id</del>。</p> -<p>经测试rc.local由于只在开机执行,如果分辨率在开机的时候改变了(比如用了转接头分辨率会重新调整),映射关系还是会出错。我决定用一个取巧的办法,把执行脚本的命令放在<code>~/.bashrc</code>中,这样只需要打开一次终端,就可以实现屏幕重新映射。</p> -<h2>后续问题<span class="hx:absolute hx:-mt-20" id="后续问题"></span> - <a href="#%e5%90%8e%e7%bb%ad%e9%97%ae%e9%a2%98" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><ol> -<li>当屏幕参数改变,如调整分辨率、调整顺序、插拔屏幕、换屏幕等,都会引发映射的失效,需要再次执行脚本。</li> -<li>当屏幕发生改变,需要调整脚本中固化的参数,或调整执行脚本的输入参数</li> -<li>如果屏幕使用了相同的驱动ic,会看到同样的VID,这样子会难以区分。这时候把[1]处的判断条件改成按名称或者其他不同的参数,也能够自动适配。但两块完全一样的屏幕,现阶段还没想到解决方法,只能自己手动映射试试了。</li> -</ol> -<h2>触屏校准(如果需要)<span class="hx:absolute hx:-mt-20" id="触屏校准如果需要"></span> - <a href="#%e8%a7%a6%e5%b1%8f%e6%a0%a1%e5%87%86%e5%a6%82%e6%9e%9c%e9%9c%80%e8%a6%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>网上说的利用校准来区分多触摸屏的方法是<strong>完全错误</strong>的,仅适用于他们的产品而不是通用解决方案,很多人就是抄来抄去而已。但是如果遇到触摸偏移,还是有需要进行校准的,校准方法为(最后一步需要甄别,有些系统没有这个目录)</p> -<ul> -<li><code>sudo apt install xinput-calibrator</code>,需要更新源</li> -<li><code>sudo xinput_calibrator</code></li> -<li>将校准信息保存到<code>/usr/share/X11/xorg.conf.d/10-evdev.conf</code>的&quot;Driver evdev”下面一行,重启生效。</li> -</ul> -<h2>参考:<span class="hx:absolute hx:-mt-20" id="参考"></span> - <a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="此章节的永久链接"></a></h2><p>[1]https://blog.csdn.net/yuan_da_xian/article/details/72864008 -[2]https://blog.csdn.net/qq_33406883/article/details/106649087 -[3]https://segmentfault.com/a/1190000020334077</p> - - - - - diff --git a/public/tags/软件/index.html b/public/tags/软件/index.html deleted file mode 100644 index bd8deb3..0000000 --- a/public/tags/软件/index.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - - -软件 – 香风家的火柴盒 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 跳至内容 - - - - - - - - - - - diff --git a/public/tags/软件/index.xml b/public/tags/软件/index.xml deleted file mode 100644 index 4a2571a..0000000 --- a/public/tags/软件/index.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - 香风家的火柴盒 – 软件 - https://www.small09.top/tags/%E8%BD%AF%E4%BB%B6/ - Recent content in 软件 on 香风家的火柴盒 - Hugo -- gohugo.io - zh-cn - Mon, 27 Nov 2023 09:33:32 +0800 - - - - - - - - - - - Linux安装VNC服务端 - https://www.small09.top/posts/231127-vncserver/ - Mon, 27 Nov 2023 09:33:32 +0800 - - https://www.small09.top/posts/231127-vncserver/ - - - - <p><em>(笔记)在Linux系统里安装远程桌面VNC客户端并连接。</em></p> -<h3>1. 安装NVC服务端<span class="hx:absolute hx:-mt-20" id="1-安装nvc服务端"></span> - <a href="#1-%e5%ae%89%e8%a3%85nvc%e6%9c%8d%e5%8a%a1%e7%ab%af" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install x11vnc</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<h3>2. 设置远程连接密码<span class="hx:absolute hx:-mt-20" id="2-设置远程连接密码"></span> - <a href="#2-%e8%ae%be%e7%bd%ae%e8%bf%9c%e7%a8%8b%e8%bf%9e%e6%8e%a5%e5%af%86%e7%a0%81" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>x11vnc --storepasswd -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 输入两次连接密码以设定</span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 询问 Write password to /home/xxx/.vnc/passwd </span> -</span></span><span style="display:flex;"><span><span style="color:#75715e"># 时,输入y并回车保存密码。</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ul> -<li>该步骤不需要使用sudo!</li> -</ul> -<h3>3. 使VNC服务开机自启动<span class="hx:absolute hx:-mt-20" id="3-使vnc服务开机自启动"></span> - <a href="#3-%e4%bd%bfvnc%e6%9c%8d%e5%8a%a1%e5%bc%80%e6%9c%ba%e8%87%aa%e5%90%af%e5%8a%a8" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>使用service的方法,将vnc作为一个服务开机启动</p> -<p>创建<code>/lib/systemd/system/x11vnc.service</code>文件并填入下面的内容</p> -<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"> - -<div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[Unit]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Description</span><span style="color:#f92672">=</span><span style="color:#e6db74">Start x11vnc at startup.</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">After</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Service]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">Type</span><span style="color:#f92672">=</span><span style="color:#e6db74">simple</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">ExecStart</span><span style="color:#f92672">=</span><span style="color:#e6db74">/usr/bin/x11vnc -auth guess -rfbauth /home/xxx/.vnc/passwd</span> -</span></span><span style="display:flex;"><span><span style="color:#66d9ef">[Install]</span> -</span></span><span style="display:flex;"><span><span style="color:#a6e22e">WantedBy</span><span style="color:#f92672">=</span><span style="color:#e6db74">multi-user.target</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"> - <button - class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50" - title="复制代码" - aria-label="复制代码" - data-copied-label="已复制!" - > - <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div> -<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div> - </button> -</div> -</div> -<ul> -<li>注意,/home/xxx 需要替换成实际的用户名!</li> -</ul> -<h3>使用vnc客户端连接<span class="hx:absolute hx:-mt-20" id="使用vnc客户端连接"></span> - <a href="#%e4%bd%bf%e7%94%a8vnc%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5" class="subheading-anchor" aria-label="此章节的永久链接"></a></h3><p>我使用Windows上的VncViewer,官网<a href="https://www.realvnc.com/en/"target="_blank" rel="noopener">RealVNC</a>,这个软件假冒的很多,下载需要注意甄别。</p> - - - - -

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