github-reporadar 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -0
- package/dist/assets/index-CwLJknHY.css +1 -0
- package/dist/assets/index-DwMah6Dr.js +81 -0
- package/dist/index.html +2 -2
- package/dist-cli/cli.js +214 -21
- package/package.json +1 -1
- package/dist/assets/index-B5UAXuco.css +0 -1
- package/dist/assets/index-LfkmcOcl.js +0 -73
package/README.md
CHANGED
|
@@ -41,6 +41,182 @@ npx github-reporadar --help # フラグの一覧
|
|
|
41
41
|
|
|
42
42
|
npmには実データを含めない。`files`で`dist/data`を除外し、`prepublishOnly`でも消し、`npm pack --dry-run`に`/data/`が無いことをテストで固定している。
|
|
43
43
|
|
|
44
|
+
## 業務での使い方(組織のrepoをまたいで働く人向け)
|
|
45
|
+
|
|
46
|
+
例として、`example-company`という組織で`example-company/storefront`と`example-company/billing`を触りながら、個人の`example-user/notes`も動かしている人の1日で書きます。名前はすべて架空です。
|
|
47
|
+
|
|
48
|
+
### 前提と境界
|
|
49
|
+
|
|
50
|
+
| 項目 | 中身 |
|
|
51
|
+
|---|---|
|
|
52
|
+
| 動かす場所 | 自分のPCだけ。`npx github-reporadar --org example-company`。公開版(github-reporadar.vercel.app)は個人repoだけで、組織は出ない |
|
|
53
|
+
| なぜ公開版に組織を出さないか | 組織のprivateなrepo名・コミット文・PRタイトルがVercelのサーバーを通ることになる。それを避けるため、組織のデータはあなたのPCとGitHubの間だけで動かす |
|
|
54
|
+
| 組織への影響 | 読むだけ(GET)。組織側には何も書かない。組織の管理者の許可が要る操作は無い |
|
|
55
|
+
| 数えるもの | 組織のrepoでは自分がauthorのコミットと、自分が作ったか担当のissue/PRだけ。他人の作業は数に入らない |
|
|
56
|
+
| データの置き場 | `~/.cache/github-reporadar/data/`。共有端末では使わない。消したいときはそのフォルダを削除する |
|
|
57
|
+
| トークン | `gh auth token`を実行時に読むだけ。ファイルには保存しない。組織がSSOなら、先に`gh auth refresh -h github.com -s read:org`で組織を認可しておく |
|
|
58
|
+
|
|
59
|
+
### 朝、今日やることを決める
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx github-reporadar --org example-company --days 30
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
ブラウザが開いたら、フィルターバーの上段を左から見ます。
|
|
66
|
+
|
|
67
|
+
| 札 | 意味 | 次の一手 |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| レビュー待ちの自分のPR 3 | 自分が出して、ドラフトでなく、まだ承認されていないPRが3件 | 放置されているものはレビュアーに声をかける。「要修正」の札が付いていれば指摘に対応する |
|
|
70
|
+
| Draftの自分のPR 2 | 自分のDraft PRが2件 | 仕上げてReady for reviewにするか、閉じる |
|
|
71
|
+
| 自分がレビューするPR 1 | レビューを頼まれているPRが1件 | 他人を待たせているのはこれ。先に片付ける |
|
|
72
|
+
| 手を付けていない自分のissue 5 | 自分が作ったopen issueで、自分のopen PRがまだ閉じる予定になっていないもの | 今日やるものを1つ選んでブランチを切る |
|
|
73
|
+
|
|
74
|
+
札を押すと、その仕事があるrepoだけが一覧に残ります。もう一度押すと外れます。
|
|
75
|
+
|
|
76
|
+
### 昼、1つのrepoに集中する
|
|
77
|
+
|
|
78
|
+
一覧で`example-company/storefront`を選ぶと、右の詳細ペインに出ます。
|
|
79
|
+
|
|
80
|
+
| 節 | 中身 |
|
|
81
|
+
|---|---|
|
|
82
|
+
| レビュー待ちの自分のPR | 番号と題名。番号を押すとGitHubのPRが開く。`CHANGES_REQUESTED`のものには「要修正」の札 |
|
|
83
|
+
| 自分がレビューするPR | 依頼されているPR。番号からGitHubへ |
|
|
84
|
+
| 直近のコミット | 自分のコミットの1行目。`(#1419)`のような番号はそのissue/PRへのリンク |
|
|
85
|
+
| 次にやること | このrepoのメモ。ブラウザの中に保存され、「メモを他のPCと共有」を押していれば選んだフォルダにも書かれる |
|
|
86
|
+
|
|
87
|
+
キーワードで探すときは`Cmd+K`(Windows/Linuxは`Ctrl+K`)か`/`で検索欄に飛びます。`Escape`で消して離れます。
|
|
88
|
+
|
|
89
|
+
### 夕、端末で振り返る
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npx github-reporadar brief --org example-company --days 7 --private
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
直近7日のコミット数、最終push、最新コミットの1行目をrepoごとに1行で出します。日報の下書きに使えます。
|
|
96
|
+
|
|
97
|
+
### 個人と組織を分けて見る
|
|
98
|
+
|
|
99
|
+
`--org`を付けなければ個人repoだけです。組織だけを見たいときは、フィルターバーの検索欄に`example-company/`と入れると、その組織のrepoだけに絞れます。一覧では別ownerのrepoが`example-company/storefront`のように組織名つきで出るので、個人の`notes`と見分けられます。
|
|
100
|
+
|
|
101
|
+
### 一日中開いておく(受信箱)
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npx github-reporadar --org example-company --watch 1m
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`--watch`を付けると、開いたままその間隔でopen issue/PRを取り直します。同期のたびに前回との差分から「自分に起きたこと」を`events.json`(データdir)に足していきます。
|
|
108
|
+
|
|
109
|
+
毎回はopen issue/PRとレビュー状態だけを取り、コミットは30分ごとにまとめて取ります。GitHubのAPIは認証済みで5000回/時なので、実測にもとづく目安はこうです。
|
|
110
|
+
|
|
111
|
+
| 間隔 | 1時間の消費(完全同期を含む) | 上限に対して |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| 30s | 4,430 | 89%。`gh`コマンドを併用する余裕が少ない |
|
|
114
|
+
| 1m | 2,390 | 48%。おすすめ |
|
|
115
|
+
| 5m | 700 | 14% |
|
|
116
|
+
|
|
117
|
+
実測値は1回あたり、軽い同期がREST 34回で6秒、完全同期がREST 175回で13秒(42 repo、うち組織5)。repo数が増えると完全同期の側が伸びます。30秒未満は受け付けません。
|
|
118
|
+
|
|
119
|
+
| 出来事 | 条件 |
|
|
120
|
+
|---|---|
|
|
121
|
+
| レビュー依頼が来た | 他人のPRで、レビューを頼まれた人に自分が新しく入った |
|
|
122
|
+
| 要修正が付いた / 承認された / コメントが付いた | 自分のPRに他人のレビューが1つ増えた。自分自身のレビューは数えない |
|
|
123
|
+
| 対応済み、再レビュー待ち | 要修正の自分のPRに、最後のレビューより新しい自分のコミットが載った |
|
|
124
|
+
| 閉じられた | 自分のopen PRが一覧から消えた(マージかクローズ) |
|
|
125
|
+
|
|
126
|
+
初回の同期では何も出しません。溜まっていた分を一斉に出すと、新しく起きたことが埋もれるためです。画面のバッジと通知は次の版で入ります。
|
|
127
|
+
|
|
128
|
+
### 平日の勤務時間だけ動かす(macOS)
|
|
129
|
+
|
|
130
|
+
launchdで平日11:00に起動し、19:00に停止します。土日は動きません。
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git clone https://github.com/BoxPistols/github-reporadar.git
|
|
134
|
+
cd github-reporadar
|
|
135
|
+
mkdir -p ~/.config/github-reporadar
|
|
136
|
+
cat > ~/.config/github-reporadar/workday.env <<'ENV'
|
|
137
|
+
RR_ORGS="example-company"
|
|
138
|
+
RR_WATCH=20m
|
|
139
|
+
RR_PORT=5177
|
|
140
|
+
ENV
|
|
141
|
+
./ops/install.sh
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
設定ファイルはリポジトリの外(`~/.config/github-reporadar/workday.env`)に置きます。組織名を含むので、リポジトリには入れません。
|
|
145
|
+
|
|
146
|
+
| コマンド | 中身 |
|
|
147
|
+
|---|---|
|
|
148
|
+
| `./ops/install.sh` | launchdに登録。平日11:00起動 / 19:00停止 |
|
|
149
|
+
| `./ops/install.sh uninstall` | 登録を解除 |
|
|
150
|
+
| `./ops/reporadar-workday.sh start` / `stop` / `status` | 手で起動・停止・確認 |
|
|
151
|
+
|
|
152
|
+
ログは`~/.local/state/github-reporadar/workday.log`です。二重起動はしません。`gh`にログインしていなければ起動せず、理由をログに残します。
|
|
153
|
+
|
|
154
|
+
20分間隔なら、1時間あたりのGitHub APIの消費は約313回で上限の6%です(軽い同期が約1.5回、完全同期が約1.5回)。8時間動かしても上限には触れません。
|
|
155
|
+
|
|
156
|
+
launchdは対話シェルの`PATH`を継がないので、`install.sh`が実行時の`PATH`をplistに焼き込みます。`node`や`gh`の場所を変えたら登録し直してください。
|
|
157
|
+
|
|
158
|
+
### 毎日の運用
|
|
159
|
+
|
|
160
|
+
登録したあとは、こちらから何もしなくても動きます。
|
|
161
|
+
|
|
162
|
+
| 時刻 | 起きること |
|
|
163
|
+
|---|---|
|
|
164
|
+
| 平日11:00 | 起動して完全同期を1回。以後20分ごとにopen issue/PRを取り直す |
|
|
165
|
+
| 20分ごと | 受信箱に差分が溜まる。ブラウザを開いていれば通知が出る |
|
|
166
|
+
| 30分ごと | コミットも含めた完全同期 |
|
|
167
|
+
| 平日19:00 | 停止 |
|
|
168
|
+
| 土日 | 動かない |
|
|
169
|
+
|
|
170
|
+
自分でやることはこれだけです。
|
|
171
|
+
|
|
172
|
+
1. 朝、http://127.0.0.1:5177/ を開く。ブックマークしておく
|
|
173
|
+
2. フィルターバーの札で今日やることを決める(レビュー待ちの自分のPR、自分がレビューするPR、Draft、手を付けていないissue)
|
|
174
|
+
3. 受信箱に未読が付いたら開く。番号を押すとGitHubへ飛ぶ。読み終えたら「すべて既読」
|
|
175
|
+
4. 迷ったら壁打ちで「今日の作業順を決めたい」と聞く
|
|
176
|
+
|
|
177
|
+
初回だけ、受信箱の「通知を許可」を1回押してください。ブラウザを閉じている間の出来事も`events.json`に溜まるので、翌朝に開けば読めます。
|
|
178
|
+
|
|
179
|
+
### 様子がおかしいとき
|
|
180
|
+
|
|
181
|
+
| 症状 | 見るところ |
|
|
182
|
+
|---|---|
|
|
183
|
+
| 画面が開かない | `./ops/reporadar-workday.sh status`。動いていなければ`start` |
|
|
184
|
+
| 数字が古い | ログの末尾。`tail -20 ~/.local/state/github-reporadar/workday.log` |
|
|
185
|
+
| 受信箱が空のまま | 差分は前回の同期との比較で出る。初回同期の直後は必ず空。1回目の20分を待つ |
|
|
186
|
+
| 「gh にログインしていません」 | `gh auth login`。組織がSSOなら`gh auth refresh -h github.com -s read:org`も |
|
|
187
|
+
| 組織のrepoが出ない | 設定の`RR_ORGS`。`cat ~/.config/github-reporadar/workday.env` |
|
|
188
|
+
| 通知が来ない | ブラウザの通知許可。受信箱を開いて「通知を許可」が出ていないか |
|
|
189
|
+
| 起動しなくなった | `node`や`gh`の場所が変わった可能性。`./ops/install.sh`で登録し直す |
|
|
190
|
+
|
|
191
|
+
### 更新とやめかた
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
./ops/reporadar-workday.sh restart # 新しい版に入れ替える(npxが@latestを取り直す)
|
|
195
|
+
./ops/install.sh uninstall # 自動起動をやめる
|
|
196
|
+
./ops/reporadar-workday.sh stop # いま動いているものを止める
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
新しい版は次の11:00の起動から自動で使われます。すぐ入れ替えたいときだけ`restart`します。
|
|
200
|
+
|
|
201
|
+
### 運用の方針
|
|
202
|
+
|
|
203
|
+
| 方針 | 理由 |
|
|
204
|
+
|---|---|
|
|
205
|
+
| 「リアルタイム」はポーリング(`--watch`)で作る | GitHubのWebhookは受け口のサーバーが要り、ローカル完結と矛盾する。毎回の同期をopen issue/PRだけに絞ってREST 34回にしたので、1分間隔でも上限の半分で収まる(実測)。コミットは30分ごと |
|
|
206
|
+
| 出来事は前回との差分から作る | GitHubの通知APIは組織の全件が混ざり、自分のPRに関することだけを取り出しにくい。前回の`issues.json`と比べるだけなら追加のAPIも権限も要らない |
|
|
207
|
+
| 組織はローカルだけ | 上の「前提と境界」のとおり。公開版に足すなら組織管理者への説明と明示同意の画面が先 |
|
|
208
|
+
| 通知はブラウザのNotification API(次の版) | ページを開いている間に出る。OSの通知センターまで欲しい場合はCLI側から出す案があるが、まずはブラウザで足りるかを見る |
|
|
209
|
+
| 受信箱を壁打ちに渡す(その次の版) | 「今日の作業順」「この指摘への対応の優先度」を、受信箱と仕事の状態を文脈にして相談する |
|
|
210
|
+
|
|
211
|
+
### よくある疑問
|
|
212
|
+
|
|
213
|
+
| 疑問 | 答え |
|
|
214
|
+
|---|---|
|
|
215
|
+
| 組織のコミット数が少ない | GitHubはコミットのメールアドレスをアカウントに結んで数える。会社のメールで作業しているなら、GitHubのSettings → Emailsにそのアドレスを足す。過去分も結び付く |
|
|
216
|
+
| 「レビュー待ち」なのに承認されているPRが出る | 同期が古い。`npx github-reporadar --org example-company`を打ち直す。画面は同期のたびに作り直される |
|
|
217
|
+
| 公開版でも組織を見たい | 現状は対象外(上の「前提と境界」)。要望があれば、組織の管理者への説明と明示同意の画面を先に作る |
|
|
218
|
+
| 他の人にこの画面を見せたい | 見せない。データには組織のprivateな情報が入っている。共有するなら、`brief`の出力から必要な行だけ写す |
|
|
219
|
+
|
|
44
220
|
## 使い方
|
|
45
221
|
|
|
46
222
|
```bash
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.2 | 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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--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-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{--font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-900:oklch(37.8% .077 168.94);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-500:oklch(68.5% .169 237.323);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-500:oklch(60.6% .25 292.717);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-ink:#0a0c10;--color-panel:#13171e;--color-panel-2:#0d1015;--color-line:#262d3a;--color-line-strong:#5d6779;--color-fg:#f2f4f8;--color-fg-muted:#a3acbd;--color-fg-faint:#858e9f}}@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%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--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(--default-font-feature-settings,normal);font-variation-settings:var(--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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--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]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{color-scheme:dark}html,body,#root{height:100%}body{font-family:var(--font-sans);background-color:var(--color-ink);color:var(--color-fg);-webkit-font-smoothing:antialiased}body:before{content:"";pointer-events:none;background:radial-gradient(58% 42% at 80% -6%,#10b98112,#0000 70%);position:fixed;top:0;right:0;bottom:0;left:0}}@layer components;@layer utilities{.visible{visibility:visible}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.top-0{top:0}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-6{height:calc(var(--spacing) * 6)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-80{max-height:calc(var(--spacing) * 80)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-6{width:calc(var(--spacing) * 6)}.w-11{width:calc(var(--spacing) * 11)}.w-14{width:calc(var(--spacing) * 14)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-\[min\(28rem\,calc\(100vw-1rem\)\)\]{width:min(28rem,100vw - 1rem)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[Nch\]{max-width:Nch}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-lg{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-\[\#\.\.\]{border-color:#..}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500) 25%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500) 40%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-emerald-500\/50{border-color:#00bb7f80}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/50{border-color:color-mix(in oklab,var(--color-emerald-500) 50%,transparent)}}.border-emerald-500\/60{border-color:#00bb7f99}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/60{border-color:color-mix(in oklab,var(--color-emerald-500) 60%,transparent)}}.border-line{border-color:var(--color-line)}.border-line-strong{border-color:var(--color-line-strong)}.border-line\/60{border-color:#262d3a99}@supports (color:color-mix(in lab,red,red)){.border-line\/60{border-color:color-mix(in oklab,var(--color-line) 60%,transparent)}}.border-rose-500\/40{border-color:#ff235766}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/40{border-color:color-mix(in oklab,var(--color-rose-500) 40%,transparent)}}.bg-\[\#\.\.\]{background-color:#..}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-amber-500\/\[0\.07\]{background-color:#f99c0012}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.07\]{background-color:color-mix(in oklab,var(--color-amber-500) 7%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-400\/10{background-color:#00d2941a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/10{background-color:color-mix(in oklab,var(--color-emerald-400) 10%,transparent)}}.bg-emerald-400\/15{background-color:#00d29426}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/15{background-color:color-mix(in oklab,var(--color-emerald-400) 15%,transparent)}}.bg-emerald-400\/\[0\.04\]{background-color:#00d2940a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-emerald-400) 4%,transparent)}}.bg-emerald-400\/\[0\.06\]{background-color:#00d2940f}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-emerald-400) 6%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-ink{background-color:var(--color-ink)}.bg-ink\/80{background-color:#0a0c10cc}@supports (color:color-mix(in lab,red,red)){.bg-ink\/80{background-color:color-mix(in oklab,var(--color-ink) 80%,transparent)}}.bg-ink\/85{background-color:#0a0c10d9}@supports (color:color-mix(in lab,red,red)){.bg-ink\/85{background-color:color-mix(in oklab,var(--color-ink) 85%,transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-panel-2{background-color:var(--color-panel-2)}.bg-panel-2\/40{background-color:#0d101566}@supports (color:color-mix(in lab,red,red)){.bg-panel-2\/40{background-color:color-mix(in oklab,var(--color-panel-2) 40%,transparent)}}.bg-panel-2\/50{background-color:#0d101580}@supports (color:color-mix(in lab,red,red)){.bg-panel-2\/50{background-color:color-mix(in oklab,var(--color-panel-2) 50%,transparent)}}.bg-panel-2\/60{background-color:#0d101599}@supports (color:color-mix(in lab,red,red)){.bg-panel-2\/60{background-color:color-mix(in oklab,var(--color-panel-2) 60%,transparent)}}.bg-panel\/85{background-color:#13171ed9}@supports (color:color-mix(in lab,red,red)){.bg-panel\/85{background-color:color-mix(in oklab,var(--color-panel) 85%,transparent)}}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/10{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.bg-sky-500\/15{background-color:#00a5ef26}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/15{background-color:color-mix(in oklab,var(--color-sky-500) 15%,transparent)}}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/15{background-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.fill-\[\#\.\.\]{fill:#..}.fill-\[\#161b22\]{fill:#161b22}.fill-emerald-300{fill:var(--color-emerald-300)}.fill-emerald-400{fill:var(--color-emerald-400)}.fill-emerald-400\/12{fill:#00d2941f}@supports (color:color-mix(in lab,red,red)){.fill-emerald-400\/12{fill:color-mix(in oklab,var(--color-emerald-400) 12%,transparent)}}.fill-emerald-400\/85{fill:#00d294d9}@supports (color:color-mix(in lab,red,red)){.fill-emerald-400\/85{fill:color-mix(in oklab,var(--color-emerald-400) 85%,transparent)}}.fill-emerald-500{fill:var(--color-emerald-500)}.fill-emerald-700{fill:var(--color-emerald-700)}.fill-emerald-900{fill:var(--color-emerald-900)}.fill-fg-faint{fill:var(--color-fg-faint)}.fill-fg-muted{fill:var(--color-fg-muted)}.fill-line{fill:var(--color-line)}.fill-panel{fill:var(--color-panel)}.stroke-emerald-400{stroke:var(--color-emerald-400)}.stroke-emerald-500\/20{stroke:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.stroke-emerald-500\/20{stroke:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.stroke-emerald-500\/25{stroke:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.stroke-emerald-500\/25{stroke:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#\.\.\]{color:#..}.text-\[\#…\]{color:#…}.text-\[Npx\]{color:Npx}.text-amber-200{color:var(--color-amber-200)}.text-amber-200\/70{color:#fee685b3}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/70{color:color-mix(in oklab,var(--color-amber-200) 70%,transparent)}}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/70{color:#00d294b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/70{color:color-mix(in oklab,var(--color-emerald-400) 70%,transparent)}}.text-fg{color:var(--color-fg)}.text-fg-faint{color:var(--color-fg-faint)}.text-fg-muted{color:var(--color-fg-muted)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-sky-300{color:var(--color-sky-300)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-violet-300{color:var(--color-violet-300)}.uppercase{text-transform:uppercase}.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,)}.underline-offset-4{text-underline-offset:4px}.accent-emerald-500{accent-color:var(--color-emerald-500)}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.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)}.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)}.filter{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,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-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,)}.backdrop-filter{-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,)}.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(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-fg-faint::placeholder{color:var(--color-fg-faint)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-emerald-500\/40:hover{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/40:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.hover\:border-rose-500\/40:hover{border-color:#ff235766}@supports (color:color-mix(in lab,red,red)){.hover\:border-rose-500\/40:hover{border-color:color-mix(in oklab,var(--color-rose-500) 40%,transparent)}}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.hover\:bg-white\/\[0\.025\]:hover{background-color:#ffffff06}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.025\]:hover{background-color:color-mix(in oklab,var(--color-white) 2.5%,transparent)}}.hover\:text-emerald-400:hover{color:var(--color-emerald-400)}.hover\:text-fg:hover{color:var(--color-fg)}.hover\:text-fg-muted:hover{color:var(--color-fg-muted)}.hover\:text-rose-400:hover{color:var(--color-rose-400)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-emerald-500\/50:focus{border-color:#00bb7f80}@supports (color:color-mix(in lab,red,red)){.focus\:border-emerald-500\/50:focus{border-color:color-mix(in oklab,var(--color-emerald-500) 50%,transparent)}}.focus\:bg-white\/\[0\.06\]:focus{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.focus\:bg-white\/\[0\.06\]:focus{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.focus\:text-fg:focus{color:var(--color-fg)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:opacity-40:disabled{opacity:.4}@media(hover:hover){.disabled\:hover\:text-fg-muted:disabled:hover{color:var(--color-fg-muted)}}@media(min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:gap-4{gap:calc(var(--spacing) * 4)}}@media(min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:h-screen{height:100vh}.lg\:min-h-0{min-height:0}.lg\:w-auto{width:auto}.lg\:flex-none{flex:none}.lg\:grid-cols-\[minmax\(0\,1fr\)_380px\]{grid-template-columns:minmax(0,1fr) 380px}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-between{justify-content:space-between}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.lg\:border-line{border-color:var(--color-line)}.lg\:px-5{padding-inline:calc(var(--spacing) * 5)}.lg\:py-1{padding-block:var(--spacing)}.lg\:pl-3{padding-left:calc(var(--spacing) * 3)}}}@keyframes rr-fade-up{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}.rr-fade-up{animation:.45s cubic-bezier(.2,.7,.2,1) both rr-fade-up}@keyframes rr-spin{to{transform:rotate(360deg)}}.rr-sweep{transform-box:view-box;transform-origin:12px 12px;animation:3.4s linear infinite rr-spin}@media(prefers-reduced-motion:reduce){.rr-fade-up,.rr-sweep{animation:none}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@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:"<percentage>";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:"<percentage>";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:"<length>";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-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:"<percentage>";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}
|