diff --git a/.air.toml b/.air.toml index c2953af..f1eefe4 100644 --- a/.air.toml +++ b/.air.toml @@ -9,13 +9,13 @@ tmp_dir = "tmp" delay = 1000 exclude_dir = ["assets", "tmp", "vendor", "testdata", "uploads", "dbs", "public"] exclude_file = [] - exclude_regex = ["_test.go"] + exclude_regex = ["_test.go",".go~",".html~", ".gohtml~", ".#.*"] exclude_unchanged = false follow_symlink = false full_bin = "" include_dir = [] include_ext = ["go", "tpl", "tmpl", "html", "css"] - include_file = [] + include_file = ["static/css/tailwind.css"] kill_delay = "0s" log = "build-errors.log" poll = false diff --git a/cmd/admin/main.go b/cmd/admin/main.go index 046a587..e13ca24 100644 --- a/cmd/admin/main.go +++ b/cmd/admin/main.go @@ -6,8 +6,8 @@ import ( "fmt" "os" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/services" ) // main creates a new admin user with the email passed in via the flag. diff --git a/cmd/web/main.go b/cmd/web/main.go index 7d143d7..29eed31 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -9,10 +9,10 @@ import ( "os" "os/signal" - "github.com/camzawacki/personal-site/pkg/handlers" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/tasks" + "github.com/camzawacki/personal-site/internal/handlers" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/tasks" ) func main() { diff --git a/config/config.yaml b/config/config.yaml index 06ce5e4..7510c1f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,6 +1,6 @@ http: hostname: "" - port: 8000 + port: 8001 readTimeout: "5s" writeTimeout: "10s" idleTimeout: "2m" @@ -14,7 +14,7 @@ app: name: "Pagoda" # We manually set this rather than using the HTTP settings in order to build absolute URLs for users # since it's likely your app's HTTP settings are not identical to what is exposed by your server. - host: "http://localhost:8000" + host: "http://localhost:8001" environment: "local" # Change this on any live environments. encryptionKey: "?E(G+KbPeShVmYq3t6w9z$C&F)J@McQf" diff --git a/docker-compose.yml b/docker-compose.yml index 1c25846..8d876e0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ services: - PAGODA_APP_ENVIRONMENT=production - PAGODA_APP_HOST=camzalewski.com - PAGODA_HTTP_HOSTNAME=0.0.0.0 - - PAGODA_HTTP_PORT=8000 + - PAGODA_HTTP_PORT=8001 - PAGODA_APP_ENCRYPTIONKEY=${ENCRYPTION_KEY} volumes: - sqlite_data:/app/dbs diff --git a/go.mod b/go.mod index 0960776..0a5ffea 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/camzawacki/personal-site go 1.24.6 require ( - entgo.io/ent v0.14.5 + entgo.io/ent v0.14.6 github.com/PuerkitoBio/goquery v1.10.3 github.com/go-playground/validator/v10 v10.29.0 github.com/golang-jwt/jwt/v5 v5.3.0 @@ -26,8 +26,12 @@ require ( github.com/andybalholm/cascadia v1.3.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/bmatcuk/doublestar v1.3.4 // indirect + github.com/clipperhouse/displaywidth v0.6.2 // indirect + github.com/clipperhouse/stringish v0.1.1 // indirect + github.com/clipperhouse/uax29/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dolthub/maphash v0.1.0 // indirect + github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/gabriel-vasile/mimetype v1.4.12 // indirect github.com/gammazero/deque v1.2.0 // indirect @@ -39,16 +43,23 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/hashicorp/hcl/v2 v2.24.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect + github.com/olekukonko/errors v1.1.0 // indirect + github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0 // indirect + github.com/olekukonko/tablewriter v1.1.3 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.10 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect diff --git a/go.sum b/go.sum index 134f800..f314c55 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ ariga.io/atlas v0.38.0 h1:MwbtwVtDWJFq+ECyeTAz2ArvewDnpeiw/t/sgNdDsdo= ariga.io/atlas v0.38.0/go.mod h1:D7XMK6ei3GvfDqvzk+2VId78j77LdqHrqPOWamn51/s= entgo.io/ent v0.14.5 h1:Rj2WOYJtCkWyFo6a+5wB3EfBRP0rnx1fMk6gGA0UUe4= entgo.io/ent v0.14.5/go.mod h1:zTzLmWtPvGpmSwtkaayM2cm5m819NdM7z7tYPq3vN0U= +entgo.io/ent v0.14.6 h1:/f2696BpwuWAEEG6PVGWflg6+Inrpq4pRWuNlWz/Skk= +entgo.io/ent v0.14.6/go.mod h1:z46QBUdGC+BATwsedbDuREfSS0oSCV+csdEYlL4p73s= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo= @@ -14,10 +16,19 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0= github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= +github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo= +github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dolthub/maphash v0.1.0 h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ= github.com/dolthub/maphash v0.1.0/go.mod h1:gkg4Ch4CdCDu5h6PMriVLawB7koZ+5ijb9puGMV50a4= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= @@ -57,6 +68,8 @@ github.com/gorilla/sessions v1.4.0 h1:kpIYOp/oi6MG/p5PgxApU8srsSw9tuFbt46Lt7auzq github.com/gorilla/sessions v1.4.0/go.mod h1:FLWm50oby91+hl7p/wRxDth9bWSuk0qVL2emc7lT5ik= github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -74,6 +87,8 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/maypok86/otter v1.2.4 h1:HhW1Pq6VdJkmWwcZZq19BlEQkHtI8xgsQzBVXJU0nfc= @@ -82,18 +97,30 @@ github.com/mikestefanello/backlite v0.6.0 h1:kpQKxR5NGHWvtAZuR0AsEZo95g967FY9fnU github.com/mikestefanello/backlite v0.6.0/go.mod h1:gx6UKLUQY5OVXQkIm3AzNkyPn9OzoKHKuwM4JGrY4tQ= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0 h1:jrYnow5+hy3WRDCBypUFvVKNSPPCdqgSXIE9eJDD8LM= +github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA= +github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= diff --git a/pkg/context/context.go b/internal/context/context.go similarity index 100% rename from pkg/context/context.go rename to internal/context/context.go diff --git a/pkg/context/context_test.go b/internal/context/context_test.go similarity index 100% rename from pkg/context/context_test.go rename to internal/context/context_test.go diff --git a/pkg/form/form.go b/internal/form/form.go similarity index 96% rename from pkg/form/form.go rename to internal/form/form.go index e9e468e..7aba378 100644 --- a/pkg/form/form.go +++ b/internal/form/form.go @@ -2,7 +2,7 @@ package form import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" ) // Form represents a form that can be submitted and validated. diff --git a/pkg/form/form_test.go b/internal/form/form_test.go similarity index 92% rename from pkg/form/form_test.go rename to internal/form/form_test.go index c2a3c3e..3747fbe 100644 --- a/pkg/form/form_test.go +++ b/internal/form/form_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/form/submission.go b/internal/form/submission.go similarity index 97% rename from pkg/form/submission.go rename to internal/form/submission.go index c27acc8..42b87ff 100644 --- a/pkg/form/submission.go +++ b/internal/form/submission.go @@ -5,7 +5,7 @@ import ( "net/http" "github.com/go-playground/validator/v10" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" "github.com/labstack/echo/v4" ) diff --git a/pkg/form/submission_test.go b/internal/form/submission_test.go similarity index 96% rename from pkg/form/submission_test.go rename to internal/form/submission_test.go index 6700197..d591539 100644 --- a/pkg/form/submission_test.go +++ b/internal/form/submission_test.go @@ -8,7 +8,7 @@ import ( "github.com/go-playground/validator/v10" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/services" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/handlers/admin.go b/internal/handlers/admin.go similarity index 92% rename from pkg/handlers/admin.go rename to internal/handlers/admin.go index 8fa0c47..2c7c83e 100644 --- a/pkg/handlers/admin.go +++ b/internal/handlers/admin.go @@ -11,14 +11,14 @@ import ( "github.com/mikestefanello/backlite/ui" "github.com/camzawacki/personal-site/ent" "github.com/camzawacki/personal-site/ent/admin" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/middleware" - "github.com/camzawacki/personal-site/pkg/msg" - "github.com/camzawacki/personal-site/pkg/pager" - "github.com/camzawacki/personal-site/pkg/redirect" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/middleware" + "github.com/camzawacki/personal-site/internal/msg" + "github.com/camzawacki/personal-site/internal/pager" + "github.com/camzawacki/personal-site/internal/redirect" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Admin struct { diff --git a/pkg/handlers/auth.go b/internal/handlers/auth.go similarity index 93% rename from pkg/handlers/auth.go rename to internal/handlers/auth.go index 88ee967..d5da88f 100644 --- a/pkg/handlers/auth.go +++ b/internal/handlers/auth.go @@ -9,17 +9,17 @@ import ( "github.com/camzawacki/personal-site/config" "github.com/camzawacki/personal-site/ent" "github.com/camzawacki/personal-site/ent/user" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/middleware" - "github.com/camzawacki/personal-site/pkg/msg" - "github.com/camzawacki/personal-site/pkg/redirect" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/emails" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/middleware" + "github.com/camzawacki/personal-site/internal/msg" + "github.com/camzawacki/personal-site/internal/redirect" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/emails" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Auth struct { diff --git a/pkg/handlers/cache.go b/internal/handlers/cache.go similarity index 82% rename from pkg/handlers/cache.go rename to internal/handlers/cache.go index 186f228..fc5970f 100644 --- a/pkg/handlers/cache.go +++ b/internal/handlers/cache.go @@ -5,11 +5,11 @@ import ( "time" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Cache struct { diff --git a/pkg/handlers/contact.go b/internal/handlers/contact.go similarity index 78% rename from pkg/handlers/contact.go rename to internal/handlers/contact.go index e9f032b..0997117 100644 --- a/pkg/handlers/contact.go +++ b/internal/handlers/contact.go @@ -5,11 +5,11 @@ import ( "github.com/go-playground/validator/v10" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Contact struct { diff --git a/pkg/handlers/error.go b/internal/handlers/error.go similarity index 81% rename from pkg/handlers/error.go rename to internal/handlers/error.go index ee95923..a509320 100644 --- a/pkg/handlers/error.go +++ b/internal/handlers/error.go @@ -4,9 +4,9 @@ import ( "net/http" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Error struct{} diff --git a/pkg/handlers/files.go b/internal/handlers/files.go similarity index 82% rename from pkg/handlers/files.go rename to internal/handlers/files.go index ec3176c..212c7ae 100644 --- a/pkg/handlers/files.go +++ b/internal/handlers/files.go @@ -6,11 +6,11 @@ import ( "time" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/msg" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/models" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/msg" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/models" + "github.com/camzawacki/personal-site/internal/ui/pages" "github.com/spf13/afero" ) diff --git a/pkg/handlers/handlers.go b/internal/handlers/handlers.go similarity index 93% rename from pkg/handlers/handlers.go rename to internal/handlers/handlers.go index af9a527..4f96371 100644 --- a/pkg/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -5,7 +5,7 @@ import ( "net/http" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/services" ) var handlers []Handler diff --git a/pkg/handlers/handlers_test.go b/internal/handlers/handlers_test.go similarity index 100% rename from pkg/handlers/handlers_test.go rename to internal/handlers/handlers_test.go diff --git a/pkg/handlers/pages.go b/internal/handlers/pages.go similarity index 79% rename from pkg/handlers/pages.go rename to internal/handlers/pages.go index 5b2346e..ed00b8d 100644 --- a/pkg/handlers/pages.go +++ b/internal/handlers/pages.go @@ -4,11 +4,11 @@ import ( "fmt" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/pager" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/models" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/pager" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/models" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Pages struct{} diff --git a/pkg/handlers/pages_test.go b/internal/handlers/pages_test.go similarity index 89% rename from pkg/handlers/pages_test.go rename to internal/handlers/pages_test.go index 1157914..6b372ab 100644 --- a/pkg/handlers/pages_test.go +++ b/internal/handlers/pages_test.go @@ -4,7 +4,7 @@ import ( "net/http" "testing" - "github.com/camzawacki/personal-site/pkg/routenames" + "github.com/camzawacki/personal-site/internal/routenames" "github.com/stretchr/testify/assert" ) diff --git a/pkg/handlers/router.go b/internal/handlers/router.go similarity index 92% rename from pkg/handlers/router.go rename to internal/handlers/router.go index 305a06e..9bece75 100644 --- a/pkg/handlers/router.go +++ b/internal/handlers/router.go @@ -7,9 +7,9 @@ import ( "github.com/gorilla/sessions" "github.com/labstack/echo/v4" echomw "github.com/labstack/echo/v4/middleware" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/middleware" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/middleware" + "github.com/camzawacki/personal-site/internal/services" files "github.com/camzawacki/personal-site/public" ) diff --git a/pkg/handlers/router_test.go b/internal/handlers/router_test.go similarity index 97% rename from pkg/handlers/router_test.go rename to internal/handlers/router_test.go index d23691a..d6b1b0e 100644 --- a/pkg/handlers/router_test.go +++ b/internal/handlers/router_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/camzawacki/personal-site/config" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/services" "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" diff --git a/pkg/handlers/search.go b/internal/handlers/search.go similarity index 78% rename from pkg/handlers/search.go rename to internal/handlers/search.go index 7f4f441..7e13722 100644 --- a/pkg/handlers/search.go +++ b/internal/handlers/search.go @@ -5,10 +5,10 @@ import ( "math/rand" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/ui/models" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/ui/models" + "github.com/camzawacki/personal-site/internal/ui/pages" ) type Search struct{} diff --git a/pkg/handlers/task.go b/internal/handlers/task.go similarity index 74% rename from pkg/handlers/task.go rename to internal/handlers/task.go index f419d41..1b3fd88 100644 --- a/pkg/handlers/task.go +++ b/internal/handlers/task.go @@ -5,16 +5,16 @@ import ( "time" "github.com/mikestefanello/backlite" - "github.com/camzawacki/personal-site/pkg/msg" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/pages" + "github.com/camzawacki/personal-site/internal/msg" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/pages" "github.com/go-playground/validator/v10" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/tasks" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/tasks" ) type Task struct { diff --git a/pkg/htmx/htmx.go b/internal/htmx/htmx.go similarity index 98% rename from pkg/htmx/htmx.go rename to internal/htmx/htmx.go index 9b13790..b9563a5 100644 --- a/pkg/htmx/htmx.go +++ b/internal/htmx/htmx.go @@ -4,7 +4,7 @@ import ( "net/http" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" ) // Request headers: https://htmx.org/docs/#request-headers diff --git a/pkg/htmx/htmx_test.go b/internal/htmx/htmx_test.go similarity index 94% rename from pkg/htmx/htmx_test.go rename to internal/htmx/htmx_test.go index 5856756..57c63e1 100644 --- a/pkg/htmx/htmx_test.go +++ b/internal/htmx/htmx_test.go @@ -4,8 +4,8 @@ import ( "net/http" "testing" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" diff --git a/pkg/log/log.go b/internal/log/log.go similarity index 90% rename from pkg/log/log.go rename to internal/log/log.go index 65c2fdb..880f398 100644 --- a/pkg/log/log.go +++ b/internal/log/log.go @@ -4,7 +4,7 @@ import ( "log/slog" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" ) // Set sets a logger in the context. diff --git a/pkg/log/log_test.go b/internal/log/log_test.go similarity index 85% rename from pkg/log/log_test.go rename to internal/log/log_test.go index 69ca659..dcfe0e7 100644 --- a/pkg/log/log_test.go +++ b/internal/log/log_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" ) diff --git a/pkg/middleware/auth.go b/internal/middleware/auth.go similarity index 92% rename from pkg/middleware/auth.go rename to internal/middleware/auth.go index 26ed4a4..be3a8df 100644 --- a/pkg/middleware/auth.go +++ b/internal/middleware/auth.go @@ -6,11 +6,11 @@ import ( "strconv" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/msg" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/msg" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/services" "github.com/labstack/echo/v4" ) diff --git a/pkg/middleware/auth_test.go b/internal/middleware/auth_test.go similarity index 97% rename from pkg/middleware/auth_test.go rename to internal/middleware/auth_test.go index c6eb9f9..2d56b8d 100644 --- a/pkg/middleware/auth_test.go +++ b/internal/middleware/auth_test.go @@ -7,8 +7,8 @@ import ( "testing" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/require" diff --git a/pkg/middleware/cache.go b/internal/middleware/cache.go similarity index 100% rename from pkg/middleware/cache.go rename to internal/middleware/cache.go diff --git a/pkg/middleware/cache_test.go b/internal/middleware/cache_test.go similarity index 89% rename from pkg/middleware/cache_test.go rename to internal/middleware/cache_test.go index 8929542..7aea379 100644 --- a/pkg/middleware/cache_test.go +++ b/internal/middleware/cache_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" ) diff --git a/pkg/middleware/config.go b/internal/middleware/config.go similarity index 87% rename from pkg/middleware/config.go rename to internal/middleware/config.go index f494874..e4a8324 100644 --- a/pkg/middleware/config.go +++ b/internal/middleware/config.go @@ -3,7 +3,7 @@ package middleware import ( "github.com/labstack/echo/v4" "github.com/camzawacki/personal-site/config" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" ) // Config stores the configuration in the request so it can be accessed by the ui. diff --git a/pkg/middleware/config_test.go b/internal/middleware/config_test.go similarity index 80% rename from pkg/middleware/config_test.go rename to internal/middleware/config_test.go index 97c50ce..6ae6dfd 100644 --- a/pkg/middleware/config_test.go +++ b/internal/middleware/config_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/camzawacki/personal-site/config" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/middleware/entity.go b/internal/middleware/entity.go similarity index 94% rename from pkg/middleware/entity.go rename to internal/middleware/entity.go index 782df47..adc31a2 100644 --- a/pkg/middleware/entity.go +++ b/internal/middleware/entity.go @@ -7,7 +7,7 @@ import ( "github.com/camzawacki/personal-site/ent" "github.com/camzawacki/personal-site/ent/user" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" "github.com/labstack/echo/v4" ) diff --git a/pkg/middleware/entity_test.go b/internal/middleware/entity_test.go similarity index 81% rename from pkg/middleware/entity_test.go rename to internal/middleware/entity_test.go index 12bbfb2..6bf5662 100644 --- a/pkg/middleware/entity_test.go +++ b/internal/middleware/entity_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/middleware/log.go b/internal/middleware/log.go similarity index 97% rename from pkg/middleware/log.go rename to internal/middleware/log.go index e29f343..c14499b 100644 --- a/pkg/middleware/log.go +++ b/internal/middleware/log.go @@ -6,7 +6,7 @@ import ( "time" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/log" + "github.com/camzawacki/personal-site/internal/log" ) // SetLogger initializes a logger for the current request and stores it in the context. diff --git a/pkg/middleware/log_test.go b/internal/middleware/log_test.go similarity index 95% rename from pkg/middleware/log_test.go rename to internal/middleware/log_test.go index 7c1225e..11e1d12 100644 --- a/pkg/middleware/log_test.go +++ b/internal/middleware/log_test.go @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" echomw "github.com/labstack/echo/v4/middleware" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/require" "github.com/stretchr/testify/assert" diff --git a/pkg/middleware/middleware_test.go b/internal/middleware/middleware_test.go similarity index 84% rename from pkg/middleware/middleware_test.go rename to internal/middleware/middleware_test.go index 19a4670..ed28583 100644 --- a/pkg/middleware/middleware_test.go +++ b/internal/middleware/middleware_test.go @@ -6,8 +6,8 @@ import ( "github.com/camzawacki/personal-site/config" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/services" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/services" + "github.com/camzawacki/personal-site/internal/tests" ) var ( diff --git a/pkg/middleware/session.go b/internal/middleware/session.go similarity index 88% rename from pkg/middleware/session.go rename to internal/middleware/session.go index 87d89a2..e9b9108 100644 --- a/pkg/middleware/session.go +++ b/internal/middleware/session.go @@ -4,7 +4,7 @@ import ( "github.com/gorilla/context" "github.com/gorilla/sessions" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/session" + "github.com/camzawacki/personal-site/internal/session" ) // Session sets the session storage in the request context diff --git a/pkg/middleware/session_test.go b/internal/middleware/session_test.go similarity index 82% rename from pkg/middleware/session_test.go rename to internal/middleware/session_test.go index ffb9fba..3646178 100644 --- a/pkg/middleware/session_test.go +++ b/internal/middleware/session_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/gorilla/sessions" - "github.com/camzawacki/personal-site/pkg/session" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/session" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/msg/msg.go b/internal/msg/msg.go similarity index 95% rename from pkg/msg/msg.go rename to internal/msg/msg.go index 37bd731..db70921 100644 --- a/pkg/msg/msg.go +++ b/internal/msg/msg.go @@ -3,8 +3,8 @@ package msg import ( "github.com/gorilla/sessions" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/session" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/session" ) // Type is a message type. diff --git a/pkg/msg/msg_test.go b/internal/msg/msg_test.go similarity index 93% rename from pkg/msg/msg_test.go rename to internal/msg/msg_test.go index 02c908b..2febd38 100644 --- a/pkg/msg/msg_test.go +++ b/internal/msg/msg_test.go @@ -3,7 +3,7 @@ package msg import ( "testing" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/pager/pager.go b/internal/pager/pager.go similarity index 100% rename from pkg/pager/pager.go rename to internal/pager/pager.go diff --git a/pkg/pager/pager_test.go b/internal/pager/pager_test.go similarity index 96% rename from pkg/pager/pager_test.go rename to internal/pager/pager_test.go index 62c6601..2cb3e78 100644 --- a/pkg/pager/pager_test.go +++ b/internal/pager/pager_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" ) diff --git a/pkg/redirect/redirect.go b/internal/redirect/redirect.go similarity index 97% rename from pkg/redirect/redirect.go rename to internal/redirect/redirect.go index 67c8395..15f3618 100644 --- a/pkg/redirect/redirect.go +++ b/internal/redirect/redirect.go @@ -7,7 +7,7 @@ import ( "net/url" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/htmx" + "github.com/camzawacki/personal-site/internal/htmx" ) // Redirect is a helper to perform HTTP redirects. diff --git a/pkg/redirect/redirect_test.go b/internal/redirect/redirect_test.go similarity index 94% rename from pkg/redirect/redirect_test.go rename to internal/redirect/redirect_test.go index 728b0f2..2fff7ee 100644 --- a/pkg/redirect/redirect_test.go +++ b/internal/redirect/redirect_test.go @@ -6,8 +6,8 @@ import ( "testing" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/htmx" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/htmx" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/routenames/names.go b/internal/routenames/names.go similarity index 100% rename from pkg/routenames/names.go rename to internal/routenames/names.go diff --git a/pkg/services/auth.go b/internal/services/auth.go similarity index 98% rename from pkg/services/auth.go rename to internal/services/auth.go index 82dedd9..891e269 100644 --- a/pkg/services/auth.go +++ b/internal/services/auth.go @@ -12,8 +12,8 @@ import ( "github.com/camzawacki/personal-site/ent" "github.com/camzawacki/personal-site/ent/passwordtoken" "github.com/camzawacki/personal-site/ent/user" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/session" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/session" "github.com/labstack/echo/v4" "golang.org/x/crypto/bcrypt" diff --git a/pkg/services/auth_test.go b/internal/services/auth_test.go similarity index 100% rename from pkg/services/auth_test.go rename to internal/services/auth_test.go diff --git a/pkg/services/cache.go b/internal/services/cache.go similarity index 100% rename from pkg/services/cache.go rename to internal/services/cache.go diff --git a/pkg/services/cache_test.go b/internal/services/cache_test.go similarity index 100% rename from pkg/services/cache_test.go rename to internal/services/cache_test.go diff --git a/pkg/services/container.go b/internal/services/container.go similarity index 99% rename from pkg/services/container.go rename to internal/services/container.go index a35dafa..e1d2b13 100644 --- a/pkg/services/container.go +++ b/internal/services/container.go @@ -15,7 +15,7 @@ import ( "github.com/mikestefanello/backlite" "github.com/camzawacki/personal-site/config" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/log" + "github.com/camzawacki/personal-site/internal/log" "github.com/spf13/afero" // Required by ent. diff --git a/pkg/services/container_test.go b/internal/services/container_test.go similarity index 100% rename from pkg/services/container_test.go rename to internal/services/container_test.go diff --git a/pkg/services/mail.go b/internal/services/mail.go similarity index 98% rename from pkg/services/mail.go rename to internal/services/mail.go index e84ed11..a574548 100644 --- a/pkg/services/mail.go +++ b/internal/services/mail.go @@ -5,7 +5,7 @@ import ( "errors" "github.com/camzawacki/personal-site/config" - "github.com/camzawacki/personal-site/pkg/log" + "github.com/camzawacki/personal-site/internal/log" "maragu.dev/gomponents" "github.com/labstack/echo/v4" diff --git a/pkg/services/mail_test.go b/internal/services/mail_test.go similarity index 100% rename from pkg/services/mail_test.go rename to internal/services/mail_test.go diff --git a/pkg/services/services_test.go b/internal/services/services_test.go similarity index 92% rename from pkg/services/services_test.go rename to internal/services/services_test.go index 0f5d916..2f01df0 100644 --- a/pkg/services/services_test.go +++ b/internal/services/services_test.go @@ -6,7 +6,7 @@ import ( "github.com/camzawacki/personal-site/config" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/tests" "github.com/labstack/echo/v4" ) diff --git a/pkg/services/validator.go b/internal/services/validator.go similarity index 100% rename from pkg/services/validator.go rename to internal/services/validator.go diff --git a/pkg/services/validator_test.go b/internal/services/validator_test.go similarity index 100% rename from pkg/services/validator_test.go rename to internal/services/validator_test.go diff --git a/pkg/session/session.go b/internal/session/session.go similarity index 91% rename from pkg/session/session.go rename to internal/session/session.go index 631b86e..65d132d 100644 --- a/pkg/session/session.go +++ b/internal/session/session.go @@ -5,7 +5,7 @@ import ( "github.com/gorilla/sessions" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/context" + "github.com/camzawacki/personal-site/internal/context" ) // ErrStoreNotFound indicates that the session store was not present in the context diff --git a/pkg/session/session_test.go b/internal/session/session_test.go similarity index 100% rename from pkg/session/session_test.go rename to internal/session/session_test.go diff --git a/pkg/tasks/example.go b/internal/tasks/example.go similarity index 90% rename from pkg/tasks/example.go rename to internal/tasks/example.go index 846e5f6..478b284 100644 --- a/pkg/tasks/example.go +++ b/internal/tasks/example.go @@ -5,10 +5,10 @@ import ( "time" "github.com/mikestefanello/backlite" - "github.com/camzawacki/personal-site/pkg/routenames" + "github.com/camzawacki/personal-site/internal/routenames" - "github.com/camzawacki/personal-site/pkg/log" - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/log" + "github.com/camzawacki/personal-site/internal/services" ) // ExampleTask is an example implementation of backlite.Task. diff --git a/pkg/tasks/register.go b/internal/tasks/register.go similarity index 74% rename from pkg/tasks/register.go rename to internal/tasks/register.go index 648b8e3..5bb393e 100644 --- a/pkg/tasks/register.go +++ b/internal/tasks/register.go @@ -1,7 +1,7 @@ package tasks import ( - "github.com/camzawacki/personal-site/pkg/services" + "github.com/camzawacki/personal-site/internal/services" ) // Register registers all task queues with the task client. diff --git a/pkg/tests/tests.go b/internal/tests/tests.go similarity index 97% rename from pkg/tests/tests.go rename to internal/tests/tests.go index 9b6e1d8..fb8a31f 100644 --- a/pkg/tests/tests.go +++ b/internal/tests/tests.go @@ -11,7 +11,7 @@ import ( "time" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/session" + "github.com/camzawacki/personal-site/internal/session" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/ui/cache/cache.go b/internal/ui/cache/cache.go similarity index 98% rename from pkg/ui/cache/cache.go rename to internal/ui/cache/cache.go index 7a2c4e1..95f365b 100644 --- a/pkg/ui/cache/cache.go +++ b/internal/ui/cache/cache.go @@ -4,7 +4,7 @@ import ( "bytes" "sync" - "github.com/camzawacki/personal-site/pkg/log" + "github.com/camzawacki/personal-site/internal/log" "maragu.dev/gomponents" ) diff --git a/pkg/ui/cache/cache_test.go b/internal/ui/cache/cache_test.go similarity index 100% rename from pkg/ui/cache/cache_test.go rename to internal/ui/cache/cache_test.go diff --git a/pkg/ui/components/alerts.go b/internal/ui/components/alerts.go similarity index 87% rename from pkg/ui/components/alerts.go rename to internal/ui/components/alerts.go index 8b41636..66c97d3 100644 --- a/pkg/ui/components/alerts.go +++ b/internal/ui/components/alerts.go @@ -1,9 +1,9 @@ package components import ( - "github.com/camzawacki/personal-site/pkg/msg" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/icons" + "github.com/camzawacki/personal-site/internal/msg" + "github.com/camzawacki/personal-site/internal/ui" + "github.com/camzawacki/personal-site/internal/ui/icons" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/components/data.go b/internal/ui/components/data.go similarity index 100% rename from pkg/ui/components/data.go rename to internal/ui/components/data.go diff --git a/pkg/ui/components/form.go b/internal/ui/components/form.go similarity index 97% rename from pkg/ui/components/form.go rename to internal/ui/components/form.go index 83a854e..e7ad33b 100644 --- a/pkg/ui/components/form.go +++ b/internal/ui/components/form.go @@ -1,8 +1,8 @@ package components import ( - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/ui" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/ui" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/components/head.go b/internal/ui/components/head.go similarity index 94% rename from pkg/ui/components/head.go rename to internal/ui/components/head.go index e8d6fcc..01bc043 100644 --- a/pkg/ui/components/head.go +++ b/internal/ui/components/head.go @@ -3,7 +3,7 @@ package components import ( "strings" - "github.com/camzawacki/personal-site/pkg/ui" + "github.com/camzawacki/personal-site/internal/ui" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/components/htmx.go b/internal/ui/components/htmx.go similarity index 93% rename from pkg/ui/components/htmx.go rename to internal/ui/components/htmx.go index 704859a..613e522 100644 --- a/pkg/ui/components/htmx.go +++ b/internal/ui/components/htmx.go @@ -3,7 +3,7 @@ package components import ( "fmt" - "github.com/camzawacki/personal-site/pkg/ui" + "github.com/camzawacki/personal-site/internal/ui" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/components/nav.go b/internal/ui/components/nav.go similarity index 72% rename from pkg/ui/components/nav.go rename to internal/ui/components/nav.go index c2bcc5c..5e70a69 100644 --- a/pkg/ui/components/nav.go +++ b/internal/ui/components/nav.go @@ -3,13 +3,32 @@ package components import ( "fmt" - "github.com/camzawacki/personal-site/pkg/pager" - "github.com/camzawacki/personal-site/pkg/ui" + "github.com/camzawacki/personal-site/internal/pager" + "github.com/camzawacki/personal-site/internal/ui" . "maragu.dev/gomponents" . "maragu.dev/gomponents/components" . "maragu.dev/gomponents/html" ) +func NavLink(r *ui.Request, title, routeName string, disabled bool, routeParams ...any) Node { + href := r.Path(routeName, routeParams...) + var link Node + if disabled { + link = Span( + Class("text-xl text-base-content/40"), + Text(title), + ) + } else { + link = A( + Class("text-xl hover:underline cursor-pointer"), + Href(href), + Text(title), + ) + } + return link + +} + func MenuLink(r *ui.Request, icon Node, title, routeName string, routeParams ...any) Node { href := r.Path(routeName, routeParams...) diff --git a/pkg/ui/components/styles.go b/internal/ui/components/styles.go similarity index 100% rename from pkg/ui/components/styles.go rename to internal/ui/components/styles.go diff --git a/pkg/ui/components/tabs.go b/internal/ui/components/tabs.go similarity index 100% rename from pkg/ui/components/tabs.go rename to internal/ui/components/tabs.go diff --git a/pkg/ui/emails/auth.go b/internal/ui/emails/auth.go similarity index 80% rename from pkg/ui/emails/auth.go rename to internal/ui/emails/auth.go index 06c2ae9..21f389f 100644 --- a/pkg/ui/emails/auth.go +++ b/internal/ui/emails/auth.go @@ -2,8 +2,8 @@ package emails import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/admin_entity.go b/internal/ui/forms/admin_entity.go similarity index 94% rename from pkg/ui/forms/admin_entity.go rename to internal/ui/forms/admin_entity.go index 547db5a..bbb6c61 100644 --- a/pkg/ui/forms/admin_entity.go +++ b/internal/ui/forms/admin_entity.go @@ -6,9 +6,9 @@ import ( "entgo.io/ent/schema/field" "github.com/camzawacki/personal-site/ent/admin" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/admin_entity_delete.go b/internal/ui/forms/admin_entity_delete.go similarity index 75% rename from pkg/ui/forms/admin_entity_delete.go rename to internal/ui/forms/admin_entity_delete.go index c4f65e0..90d39bd 100644 --- a/pkg/ui/forms/admin_entity_delete.go +++ b/internal/ui/forms/admin_entity_delete.go @@ -4,9 +4,9 @@ import ( "net/http" "github.com/camzawacki/personal-site/ent/admin" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/cache.go b/internal/ui/forms/cache.go similarity index 84% rename from pkg/ui/forms/cache.go rename to internal/ui/forms/cache.go index af7935a..519de63 100644 --- a/pkg/ui/forms/cache.go +++ b/internal/ui/forms/cache.go @@ -3,10 +3,10 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/contact.go b/internal/ui/forms/contact.go similarity index 84% rename from pkg/ui/forms/contact.go rename to internal/ui/forms/contact.go index 92f2eff..3ebba2f 100644 --- a/pkg/ui/forms/contact.go +++ b/internal/ui/forms/contact.go @@ -3,10 +3,10 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/file.go b/internal/ui/forms/file.go similarity index 73% rename from pkg/ui/forms/file.go rename to internal/ui/forms/file.go index a523856..3eca2da 100644 --- a/pkg/ui/forms/file.go +++ b/internal/ui/forms/file.go @@ -3,9 +3,9 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/forgot_password.go b/internal/ui/forms/forgot_password.go similarity index 75% rename from pkg/ui/forms/forgot_password.go rename to internal/ui/forms/forgot_password.go index 2b8bbbd..9b33bad 100644 --- a/pkg/ui/forms/forgot_password.go +++ b/internal/ui/forms/forgot_password.go @@ -3,10 +3,10 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/login.go b/internal/ui/forms/login.go similarity index 84% rename from pkg/ui/forms/login.go rename to internal/ui/forms/login.go index bc14626..0641622 100644 --- a/pkg/ui/forms/login.go +++ b/internal/ui/forms/login.go @@ -3,10 +3,10 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/register.go b/internal/ui/forms/register.go similarity index 87% rename from pkg/ui/forms/register.go rename to internal/ui/forms/register.go index 43f2800..0a83f1e 100644 --- a/pkg/ui/forms/register.go +++ b/internal/ui/forms/register.go @@ -3,10 +3,10 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/reset_password.go b/internal/ui/forms/reset_password.go similarity index 84% rename from pkg/ui/forms/reset_password.go rename to internal/ui/forms/reset_password.go index 3a96f13..74b7b60 100644 --- a/pkg/ui/forms/reset_password.go +++ b/internal/ui/forms/reset_password.go @@ -3,9 +3,9 @@ package forms import ( "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/forms/task.go b/internal/ui/forms/task.go similarity index 81% rename from pkg/ui/forms/task.go rename to internal/ui/forms/task.go index 7f2b610..672a563 100644 --- a/pkg/ui/forms/task.go +++ b/internal/ui/forms/task.go @@ -4,10 +4,10 @@ import ( "fmt" "net/http" - "github.com/camzawacki/personal-site/pkg/form" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/form" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/icons/icons.go b/internal/ui/icons/icons.go similarity index 99% rename from pkg/ui/icons/icons.go rename to internal/ui/icons/icons.go index 5af035d..b6b9385 100644 --- a/pkg/ui/icons/icons.go +++ b/internal/ui/icons/icons.go @@ -3,7 +3,7 @@ package icons import ( "fmt" - "github.com/camzawacki/personal-site/pkg/ui/cache" + "github.com/camzawacki/personal-site/internal/ui/cache" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/layouts/auth.go b/internal/ui/layouts/auth.go similarity index 85% rename from pkg/ui/layouts/auth.go rename to internal/ui/layouts/auth.go index efaa394..49e8e0b 100644 --- a/pkg/ui/layouts/auth.go +++ b/internal/ui/layouts/auth.go @@ -1,8 +1,8 @@ package layouts import ( - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/internal/ui/layouts/primary.go b/internal/ui/layouts/primary.go new file mode 100644 index 0000000..e0e98c5 --- /dev/null +++ b/internal/ui/layouts/primary.go @@ -0,0 +1,42 @@ +package layouts + +import ( + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" + . "maragu.dev/gomponents" + . "maragu.dev/gomponents/html" +) + +func Primary(r *ui.Request, content Node) Node { + return Doctype( + HTML( + Lang("en"), + Data("theme", "light"), + Head( + Metatags(r), + CSS(), + JS(), + ), + Body( + Nav( + Class("navbar bg-base-100 border-b border-gray-200 p-5 justify-center"), + Div( + Class("flex items-center"), + NavLink(r, "Cam Zalewaki", routenames.Home, false), + Span(Class("divider divider-horizontal")), + NavLink(r, "Writing", routenames.About, true), + Span(Class("divider divider-horizontal")), + NavLink(r, "Projects", routenames.About, true), + Span(Class("divider divider-horizontal")), + NavLink(r, "Misc", routenames.About, true), + Span(Class("divider divider-horizontal")), + NavLink(r, "About", routenames.About, true), + ), + ), + content, + HtmxListeners(r), + ), + ), + ) +} diff --git a/pkg/ui/models/file.go b/internal/ui/models/file.go similarity index 100% rename from pkg/ui/models/file.go rename to internal/ui/models/file.go diff --git a/pkg/ui/models/post.go b/internal/ui/models/post.go similarity index 85% rename from pkg/ui/models/post.go rename to internal/ui/models/post.go index 748e148..ea74f75 100644 --- a/pkg/ui/models/post.go +++ b/internal/ui/models/post.go @@ -3,9 +3,9 @@ package models import ( "fmt" - "github.com/camzawacki/personal-site/pkg/pager" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" + "github.com/camzawacki/personal-site/internal/pager" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/models/search_result.go b/internal/ui/models/search_result.go similarity index 100% rename from pkg/ui/models/search_result.go rename to internal/ui/models/search_result.go diff --git a/pkg/ui/pages/about.go b/internal/ui/pages/about.go similarity index 90% rename from pkg/ui/pages/about.go rename to internal/ui/pages/about.go index 7ce5965..cfdafef 100644 --- a/pkg/ui/pages/about.go +++ b/internal/ui/pages/about.go @@ -2,10 +2,10 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/cache" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui" + "github.com/camzawacki/personal-site/internal/ui/cache" + . "github.com/camzawacki/personal-site/internal/ui/components" + "github.com/camzawacki/personal-site/internal/ui/layouts" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/pages/admin_entity.go b/internal/ui/pages/admin_entity.go similarity index 89% rename from pkg/ui/pages/admin_entity.go rename to internal/ui/pages/admin_entity.go index 0024cd1..056819c 100644 --- a/pkg/ui/pages/admin_entity.go +++ b/internal/ui/pages/admin_entity.go @@ -6,11 +6,11 @@ import ( "github.com/labstack/echo/v4" "github.com/camzawacki/personal-site/ent/admin" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/layouts" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/pages/auth.go b/internal/ui/pages/auth.go similarity index 85% rename from pkg/ui/pages/auth.go rename to internal/ui/pages/auth.go index 2fd2c0a..c2146dc 100644 --- a/pkg/ui/pages/auth.go +++ b/internal/ui/pages/auth.go @@ -2,9 +2,9 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/layouts" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/pages/cache.go b/internal/ui/pages/cache.go similarity index 57% rename from pkg/ui/pages/cache.go rename to internal/ui/pages/cache.go index bcea2d4..a304bcf 100644 --- a/pkg/ui/pages/cache.go +++ b/internal/ui/pages/cache.go @@ -2,9 +2,9 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/layouts" ) func UpdateCache(ctx echo.Context, form *forms.Cache) error { diff --git a/pkg/ui/pages/contact.go b/internal/ui/pages/contact.go similarity index 83% rename from pkg/ui/pages/contact.go rename to internal/ui/pages/contact.go index b23456e..2730a19 100644 --- a/pkg/ui/pages/contact.go +++ b/internal/ui/pages/contact.go @@ -2,10 +2,10 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/layouts" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/pages/error.go b/internal/ui/pages/error.go similarity index 81% rename from pkg/ui/pages/error.go rename to internal/ui/pages/error.go index 252513b..f2937b7 100644 --- a/pkg/ui/pages/error.go +++ b/internal/ui/pages/error.go @@ -4,9 +4,9 @@ import ( "net/http" "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + "github.com/camzawacki/personal-site/internal/ui/layouts" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/pages/file.go b/internal/ui/pages/file.go similarity index 77% rename from pkg/ui/pages/file.go rename to internal/ui/pages/file.go index 79a6f5d..f947479 100644 --- a/pkg/ui/pages/file.go +++ b/internal/ui/pages/file.go @@ -2,11 +2,11 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/layouts" - "github.com/camzawacki/personal-site/pkg/ui/models" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui/models" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/internal/ui/pages/home.go b/internal/ui/pages/home.go new file mode 100644 index 0000000..fa4121d --- /dev/null +++ b/internal/ui/pages/home.go @@ -0,0 +1,63 @@ +package pages + +import ( + "github.com/labstack/echo/v4" + // "github.com/camzawacki/personal-site/internal/routenames" + "github.com/camzawacki/personal-site/internal/ui" + // . "github.com/camzawacki/personal-site/internal/ui/components" + // "github.com/camzawacki/personal-site/internal/ui/icons" + "github.com/camzawacki/personal-site/internal/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui/models" + . "maragu.dev/gomponents" + . "maragu.dev/gomponents/html" +) + +func Home(ctx echo.Context, posts *models.Posts) error { + r := ui.NewRequest(ctx) + r.Metatags.Description = "This is my homepage." + r.Metatags.Keywords = []string{"Software", "Coding", "Projects", "Homepage"} + + img := Div( + Class("w-full h-full flex justify-center"), + Div( + Class("bg-blue-100 size-92 object-contain overflow-hidden rounded-4xl"), + Img( + Src(ui.StaticFile("me2.webp")), + ), + ), + ) + // tabs := cache.SetIfNotExists("pages.about.Tabs", func() Node { + + banner := Div( + Class("w-full py-4 bg-red-100 text-center text-lg"), + Text("This website is currently under construction. For an older version, see "), + A( + Class("underline"), + Href("https://camzawacki.com"), + Text("camzawacki.com"), + ), + ) + + education := Div( + Class("prose-xl"), + H2(Text("Education")), + Ul(Class("list-disc pl-3"), + Li(Text("PhD Electrical Engineering")), + Li(Text("MS Robotics")), + Li(Text("BS Mechanical Engineering & Computer Science")), + ), + ) + + content := Div( + Class("flex flex-col p-5 mx-10 gap-2"), + img, + Div(Class("w-full divider")), + banner, + Div( + Class("mx-auto w-160"), + education, + ), + ) + + return r.Render(layouts.Primary, content) +} diff --git a/pkg/ui/pages/search.go b/internal/ui/pages/search.go similarity index 65% rename from pkg/ui/pages/search.go rename to internal/ui/pages/search.go index 89426a0..8696585 100644 --- a/pkg/ui/pages/search.go +++ b/internal/ui/pages/search.go @@ -2,9 +2,9 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/layouts" - "github.com/camzawacki/personal-site/pkg/ui/models" + "github.com/camzawacki/personal-site/internal/ui" + "github.com/camzawacki/personal-site/internal/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui/models" . "maragu.dev/gomponents" ) diff --git a/pkg/ui/pages/task.go b/internal/ui/pages/task.go similarity index 81% rename from pkg/ui/pages/task.go rename to internal/ui/pages/task.go index eeb42df..558a934 100644 --- a/pkg/ui/pages/task.go +++ b/internal/ui/pages/task.go @@ -2,10 +2,10 @@ package pages import ( "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/forms" - "github.com/camzawacki/personal-site/pkg/ui/layouts" + "github.com/camzawacki/personal-site/internal/ui" + . "github.com/camzawacki/personal-site/internal/ui/components" + "github.com/camzawacki/personal-site/internal/ui/forms" + "github.com/camzawacki/personal-site/internal/ui/layouts" . "maragu.dev/gomponents" . "maragu.dev/gomponents/html" ) diff --git a/pkg/ui/request.go b/internal/ui/request.go similarity index 97% rename from pkg/ui/request.go rename to internal/ui/request.go index 7c1231d..66e8e74 100644 --- a/pkg/ui/request.go +++ b/internal/ui/request.go @@ -4,8 +4,8 @@ import ( "github.com/labstack/echo/v4" "github.com/camzawacki/personal-site/config" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/htmx" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/htmx" "maragu.dev/gomponents" ) diff --git a/pkg/ui/request_test.go b/internal/ui/request_test.go similarity index 93% rename from pkg/ui/request_test.go rename to internal/ui/request_test.go index 5d8319b..1a70c3c 100644 --- a/pkg/ui/request_test.go +++ b/internal/ui/request_test.go @@ -6,9 +6,9 @@ import ( "github.com/labstack/echo/v4" "github.com/camzawacki/personal-site/config" "github.com/camzawacki/personal-site/ent" - "github.com/camzawacki/personal-site/pkg/context" - "github.com/camzawacki/personal-site/pkg/htmx" - "github.com/camzawacki/personal-site/pkg/tests" + "github.com/camzawacki/personal-site/internal/context" + "github.com/camzawacki/personal-site/internal/htmx" + "github.com/camzawacki/personal-site/internal/tests" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "maragu.dev/gomponents" diff --git a/pkg/ui/ui.go b/internal/ui/ui.go similarity index 100% rename from pkg/ui/ui.go rename to internal/ui/ui.go diff --git a/pkg/ui/ui_test.go b/internal/ui/ui_test.go similarity index 100% rename from pkg/ui/ui_test.go rename to internal/ui/ui_test.go diff --git a/pkg/ui/layouts/primary.go b/pkg/ui/layouts/primary.go deleted file mode 100644 index 180b50e..0000000 --- a/pkg/ui/layouts/primary.go +++ /dev/null @@ -1,181 +0,0 @@ -package layouts - -import ( - "github.com/camzawacki/personal-site/ent/admin" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - "github.com/camzawacki/personal-site/pkg/ui/cache" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/icons" - . "maragu.dev/gomponents" - . "maragu.dev/gomponents/html" -) - -func Primary(r *ui.Request, content Node) Node { - return Doctype( - HTML( - Lang("en"), - Data("theme", "dark"), - Head( - Metatags(r), - CSS(), - JS(), - ), - Body( - Div( - Class("drawer lg:drawer-open"), - Input( - ID("sidebar"), - Type("checkbox"), - Class("drawer-toggle"), - ), - Div( - Class("drawer-content flex flex-col p-7 prose-base"), - If(len(r.Title) > 0, H1(Text(r.Title))), - FlashMessages(r), - content, - Label( - For("sidebar"), - Class("btn btn-primary drawer-button lg:hidden"), - Text("Open drawer"), - ), - ), - sidebarMenu(r), - ), - searchModal(r), - HtmxListeners(r), - ), - ), - ) -} - -func search() Node { - return cache.SetIfNotExists("layout.search", func() Node { - return Div( - Class("ml-2"), - Attr("x-data", ""), - Label( - Class("input"), - icons.MagnifyingGlass(), - Input( - Type("search"), - Class("grow"), - Placeholder("Search"), - Attr("@click", "search_modal.showModal();"), - ), - ), - - ) - }) -} - -func searchModal(r *ui.Request) Node { - return cache.SetIfNotExists("layout.searchModal", func() Node { - return Dialog( - ID("search_modal"), - Class("modal"), - Div( - Class("modal-box"), - Form( - Method("dialog"), - Button( - Class("btn btn-sm btn-circle btn-ghost absolute right-2 top-2"), - Text("✕"), - ), - ), - H3( - Class("text-lg font-bold mb-2"), - Text("Search"), - ), - Input( - Attr("hx-get", r.Path(routenames.Search)), - Attr("hx-trigger", "keyup changed delay:500ms"), - Attr("hx-target", "#results"), - Name("query"), - Class("input w-full"), - Type("search"), - Placeholder("Search..."), - ), - Ul( - ID("results"), - Class("list"), - ), - ), - Form( - Method("dialog"), - Class("modal-backdrop"), - Button( - Text("close"), - ), - ), - ) - }) -} - -func sidebarMenu(r *ui.Request) Node { - header := func(text string) Node { - return Li( - Class("menu-title mt-3 uppercase"), - Span(Text(text)), - ) - } - - adminSubMenu := func() Node { - entityTypeLinks := make(Group, len(admin.GetEntityTypes())) - for _, n := range admin.GetEntityTypes() { - entityTypeLinks = append( - entityTypeLinks, - MenuLink(r, icons.PencilSquare(), n.GetName(), routenames.AdminEntityList(n.GetName())), - ) - } - - return Group{ - header("Entities"), - entityTypeLinks, - header("Monitoring"), - Li( - A( - icons.CircleStack(), - Href(r.Path(routenames.AdminTasks)), - Text("Tasks"), - Target("_blank"), - ), - ), - } - } - - return Div( - Class("drawer-side"), - Label( - For("sidebar"), - Aria("label", "close sidebar"), - Class("drawer-overlay"), - ), - Div( - Class("menu bg-base-200 text-base-content min-h-full w-80 p-4"), - Div( - Class("w-2/3 mx-auto mt-3 mb-10"), - Img( - Src(ui.StaticFile("logo.png")), - ), - ), - search(), - Ul( - HxBoost(), - header("General"), - MenuLink(r, icons.Home(), "Dashboard", routenames.Home), - MenuLink(r, icons.Info(), "About", routenames.About), - MenuLink(r, icons.Mail(), "Contact", routenames.Contact), - MenuLink(r, icons.Archive(), "Cache", routenames.Cache), - MenuLink(r, icons.CircleStack(), "Task", routenames.Task), - MenuLink(r, icons.Document(), "Files", routenames.Files), - header("Account"), - If(r.IsAuth, MenuLink(r, icons.Exit(), "Logout", routenames.Logout)), - If(!r.IsAuth, MenuLink(r, icons.Enter(), "Login", routenames.Login)), - If(!r.IsAuth, MenuLink(r, icons.UserPlus(), "Register", routenames.Register)), - If(!r.IsAuth, MenuLink(r, icons.QuestionCircle(), "Forgot password", routenames.ForgotPasswordSubmit)), - Iff(r.IsAdmin, adminSubMenu), - ), - ), - ) -} diff --git a/pkg/ui/pages/home.go b/pkg/ui/pages/home.go deleted file mode 100644 index ab9be39..0000000 --- a/pkg/ui/pages/home.go +++ /dev/null @@ -1,107 +0,0 @@ -package pages - -import ( - "github.com/labstack/echo/v4" - "github.com/camzawacki/personal-site/pkg/routenames" - "github.com/camzawacki/personal-site/pkg/ui" - . "github.com/camzawacki/personal-site/pkg/ui/components" - "github.com/camzawacki/personal-site/pkg/ui/icons" - "github.com/camzawacki/personal-site/pkg/ui/layouts" - "github.com/camzawacki/personal-site/pkg/ui/models" - . "maragu.dev/gomponents" - . "maragu.dev/gomponents/html" -) - -func Home(ctx echo.Context, posts *models.Posts) error { - r := ui.NewRequest(ctx) - r.Metatags.Description = "This is the home page." - r.Metatags.Keywords = []string{"Software", "Coding", "Go"} - - // This pages helps to illustrate the different options you can take when using HTMX to introduce interactivity - // to your web application. The following three options are available, but here, we're opting for the first one. - // 1) Highly-optimized and progressive enhancement: - // This is highly-optimized because the server is doing the least amount of work possible, only rendering - // the least amount possible based on the incoming request. It's possible that even your route handler would - // want to check the HTMX request in order to limit what it does. With HTMX, it's possible to still return a - // normal, full page, but use hx-select to pluck out only the part you want to re-render. It requires some extra - // condition checks and code but performance is improved. Progressive enhancement refers to having a fully - // functional web app, even if JS was disabled, but providing the enhancement if JS is enabled. All of these - // examples should continue to work fine without JS. - // 2) Not optimized and progressive enhancement: - // As mentioned previously, you can remove all of these conditions, re-render the entire page for every request, - // and rely on HTMX's hx-select to only replace what you want to (ie, the posts). - // 3) Optimized and partial renderings: - // You could have a separate route that is only for fetching posts while paging, and that would render only - // that partial HTML, which HTMX would then use to inject in to this page. - - headerMsg := func() Node { - return Group{ - Stats( - Stat{ - Title: "User name", - Value: func() string { - if r.IsAuth { - return r.AuthUser.Name - } - return "(not logged in)" - }(), - Description: "The logged in user's name", - Icon: icons.UserCircle(), - }, - Stat{ - Title: "Admin status", - Value: func() string { - if r.IsAdmin { - return "Administrator" - } - return "Non-administrator" - }(), - Description: "Use `make admin` to create an admin account", - Icon: icons.LockClosed(), - }, - Stat{ - Title: "GitHub Stars", - Value: "2,500+", - Description: "Star if you like Pagoda", - Icon: icons.Star(), - }, - ), - H2(Text("Recent posts")), - Span(Text("Below is an example of both paging and AJAX fetching using HTMX")), - } - } - - cards := func() Node { - return Div( - Class("flex w-full gap-2 mt-5"), - Card(CardParams{ - Title: "Serving files", - Body: Group{ - Text("In the example posts above, check how the file URL contains a cache-buster query parameter which changes only when the app is restarted. "), - Text("Static files also contain cache-control headers which are configured via middleware."), - }, - Color: ColorWarning, - Size: SizeSmall, - }), - Card(CardParams{ - Title: "Documentation", - Body: Group{ - Text("Have you read through the entire documentation? If not, you may be missing functionality or have questions. "), - }, - Footer: Group{ - ButtonLink(ColorNeutral, "https://github.com/camzawacki/personal-site?tab=readme-ov-file#table-of-contents", "Learn more"), - }, - Color: ColorNeutral, - Size: SizeSmall, - }), - ) - } - - g := Group{ - Iff(r.Htmx.Target != "posts", headerMsg), - posts.Render(r.Path(routenames.Home)), - Iff(r.Htmx.Target != "posts", cards), - } - - return r.Render(layouts.Primary, g) -} diff --git a/public/static/main.css b/public/static/main.css index cec6d1e..d488300 100644 --- a/public/static/main.css +++ b/public/static/main.css @@ -1,2 +1,2 @@ -/*! tailwindcss v4.1.10 | 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-font-weight: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}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--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-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-thin:100;--font-weight-semibold:600;--font-weight-bold:700;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@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(--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;-webkit-text-decoration: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}:-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}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@property --radialprogress{syntax: ""; inherits: true; initial-value: 0%;}:root{scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E")}:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not([class*=drawer-open])>.drawer-toggle:checked){overflow:hidden}:where(:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not(.drawer-open)>.drawer-toggle:checked)){scrollbar-gutter:stable;background-image:linear-gradient(var(--color-base-100),var(--color-base-100));--root-bg:var(--color-base-100)}@supports (color:color-mix(in lab, red, red)){:where(:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not(.drawer-open)>.drawer-toggle:checked)){--root-bg:color-mix(in srgb,var(--color-base-100),oklch(0% 0 0) 40%)}}:where(.modal[open],.modal-open,.modal-toggle:checked+.modal):not(.modal-start,.modal-end){scrollbar-gutter:stable}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:root:has(input.theme-controller[value=custom-theme]:checked),[data-theme=custom-theme]{color-scheme:normal}}@layer components;@layer utilities{.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:translate .3s ease-out,visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:hidden}.modal::backdrop{display:none}.modal.modal-open,.modal[open],.modal:target{pointer-events:auto;visibility:visible;opacity:1;background-color:oklch(0% 0 0/.4)}:is(.modal.modal-open,.modal[open],.modal:target) .modal-box{opacity:1;translate:0;scale:1}@starting-style{.modal.modal-open,.modal[open],.modal:target{visibility:hidden;opacity:0}}.drawer-side{pointer-events:none;visibility:hidden;z-index:1;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete,visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0;overflow:hidden}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:1rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));order:var(--tab-order);height:var(--tab-height);border-color:#0000;padding-inline-start:var(--tab-p);padding-inline-end:var(--tab-p);font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{content:attr(aria-label)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true]))+.tab-content{height:calc(100% - var(--tab-height) + var(--border));display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true]){color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px)-2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}.prose .btn{text-decoration-line:none}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible{isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){box-shadow:none}.btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled){--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media (hover:hover){.btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:var(--color-neutral)}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):hover{background-color:color-mix(in oklab,var(--color-neutral)20%,transparent)}}.btn:is(:disabled,[disabled],.btn-disabled):hover{--btn-border:#0000;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):hover{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border)0;--tab-radius-ss:min(var(--radius-field),var(--tab-radius-min));--tab-radius-se:min(var(--radius-field),var(--tab-radius-min));--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border)var(--tab-p)0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color)#0000;--tab-corner-width:calc(100% + min(var(--radius-field),var(--tab-radius-min))*2);--tab-corner-height:min(var(--radius-field),var(--tab-radius-min));--tab-corner-position:top left,top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border)var(--border)0 var(--border);--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border))var(--border)calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--tab-grad:calc(69% - var(--border));--radius-start:radial-gradient(circle at top left,#0000 var(--tab-grad),var(--tab-border-color)calc(var(--tab-grad) + .25px),var(--tab-border-color)calc(var(--tab-grad) + var(--border)),var(--tab-bg)calc(var(--tab-grad) + var(--border) + .25px));--radius-end:radial-gradient(circle at top right,#0000 var(--tab-grad),var(--tab-border-color)calc(var(--tab-grad) + .25px),var(--tab-border-color)calc(var(--tab-grad) + var(--border)),var(--tab-bg)calc(var(--tab-grad) + var(--border) + .25px));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start),var(--radius-end);background-size:min(var(--radius-field),var(--tab-radius-min))min(var(--radius-field),var(--tab-radius-min));inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true]){--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color)}.tabs-lift .tab-content{--tabcontent-margin:calc(-1*var(--border))0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list{flex-direction:column;font-size:.875rem;display:flex}.list :where(.list-row){--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}.list :where(.list-row):has(.list-col-grow:first-child){--list-grid-cols:1fr}.list :where(.list-row):has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row) :not(.list-col-wrap){grid-row-start:1}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab, red, red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab,var(--color-base-content)5%,transparent)}}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;font-size:.875rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-block}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}.input:has(>input[disabled]),.input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]){box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.table{border-radius:var(--radius-box);text-align:left;width:100%;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead,tfoot){color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot){border-top:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(tfoot){border-top:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr,tbody tr:not(:last-child)){border-bottom:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead tr,tbody tr:not(:last-child)){border-bottom:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem)*6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab, red, red)){.range{--range-bg:color-mix(in oklab,currentColor 10%,#0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px currentColor,0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab, red, red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px currentColor,0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab, red, red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.select{border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;text-overflow:ellipsis;box-shadow:0 1px var(--input-color)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:1rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.select{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.select{--size:calc(var(--size-field,.25rem)*10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.select select{appearance:none;background:inherit;border-radius:inherit;border-style:none;width:calc(100% + 2.75rem);height:calc(100% - 2px);margin-inline:-1rem -1.75rem;padding-inline:1rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}.select:has(>select[disabled]),.select:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card:where(.card-border){border:var(--border)solid var(--color-base-200)}.card:where(.card-dash){border:var(--border)dashed var(--color-base-200)}.card.image-full{display:grid}.card.image-full>*{grid-row-start:1;grid-column-start:1}.card.image-full>.card-body{color:var(--color-neutral-content);position:relative}.card.image-full :where(figure){border-radius:inherit;overflow:hidden}.card.image-full>figure img{object-fit:cover;filter:brightness(28%);height:100%}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0/calc(var(--depth)*.1))inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.checkbox:disabled{cursor:not-allowed;opacity:.2}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border)solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab, red, red)){.radio{border:var(--border)solid var(--input-color,color-mix(in srgb,currentColor 20%,#0000))}}.radio{box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor;animation:.2s ease-out radio}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px*-1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.radio:disabled{cursor:not-allowed;opacity:.2}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.stats{border-radius:var(--radius-box);grid-auto-flow:column;display:inline-grid;position:relative;overflow-x:auto}.absolute{position:absolute}.relative{position:relative}.static{position:static}.top-2{top:calc(var(--spacing)*2)}.right-2{right:calc(var(--spacing)*2)}.file-input{cursor:pointer;cursor:pointer;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset}}.file-input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border)*2);margin-inline-end:1rem;margin-block:calc(var(--border)*-1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise)*100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px white inset,var(--btn-shadow);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border)*-1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab,color-mix(in oklab,white 30%,var(--btn-bg))calc(var(--depth)*20%),#0000)inset,var(--btn-shadow)}}.file-input::file-selector-button{--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-border:color-mix(in oklab,var(--btn-bg),#000 5%)}}.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)30%,#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)30%,#0000)}}.file-input::file-selector-button{--btn-noise:var(--fx-noise)}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.file-input:focus{box-shadow:0 1px color-mix(in oklab,var(--input-color)10%,#0000)}}.file-input:focus{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){box-shadow:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){color:color-mix(in oklch,var(--color-base-content)20%,#0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.hero-content{isolation:isolate;justify-content:center;align-items:center;gap:1rem;max-width:80rem;padding:1rem;display:flex}.textarea{border:var(--border)solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;touch-action:manipulation;border-color:var(--input-color);width:clamp(3rem,20rem,100%);min-height:5rem;box-shadow:0 1px var(--input-color)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem;font-size:.875rem}@supports (color:color-mix(in lab, red, red)){.textarea{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:0;--tabcontent-radius-se:0;--tabcontent-radius-es:0;--tabcontent-radius-ee:0;--tabcontent-order:1;width:100%;margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.stat-figure{grid-row:1/span 3;grid-column-start:2;place-self:center flex-end}.hero{background-position:50%;background-size:cover;place-items:center;width:100%;display:grid}.hero>*{grid-row-start:1;grid-column-start:1}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-desc{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.stat-desc{font-size:.75rem}.stat-title{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-title{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.stat-title{font-size:.75rem}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.divider{--divider-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.mx-auto{margin-inline:auto}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.label{color:color-mix(in oklab,currentColor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.join-item:where(:not(:first-child,:disabled,[disabled],.btn-disabled)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.join-item:where(:is(:disabled,[disabled],.btn-disabled)){border-width:var(--border,1px)0 var(--border,1px)var(--border,1px)}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose-base :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose-base :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.888889em;font-size:2.25em;line-height:1.11111}.prose-base :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:1em;font-size:1.5em;line-height:1.33333}.prose-base :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;line-height:1.6}.prose-base :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose-base :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-base :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-base :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-base :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-size:.875em}.prose-base :where(code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;line-height:1.71429}.prose-base :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose-base :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-base :where(.prose-base>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-base :where(.prose-base>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose-base>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose-base>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-base :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-base :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-base :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-base :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:3em;margin-bottom:3em}.prose-base :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-base :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.71429}.prose-base :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-base :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-base :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-base :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose-base :where(.prose-base>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-base :where(.prose-base>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.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)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.ml-2{margin-left:calc(var(--spacing)*2)}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab, red, red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab, red, red)){.status{color:#0000004d}@supports (color:color-mix(in lab, red, red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab, red, red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));width:fit-content;padding-inline:calc(.25rem*3 - var(--border));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);height:var(--size);justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem)*10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border)dashed currentColor}@supports (color:color-mix(in lab, red, red)){.stat:not(:last-child){border-inline-end:var(--border)dashed color-mix(in oklab,currentColor 10%,#0000)}}.stat:not(:last-child){border-block-end:none}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;border:var(--border)solid var(--color-base-200);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px #000,0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.alert.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.alert.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert.alert-soft{background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100))}}.alert.alert-soft{border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert.alert-soft{border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100))}}.alert.alert-soft{box-shadow:none;background-image:none}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.flex{display:flex}.hidden{display:none}.inline{display:inline}.table{display:table}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-5{height:calc(var(--spacing)*5)}.h-24{height:calc(var(--spacing)*24)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-2\/3{width:66.6667%}.w-5{width:calc(var(--spacing)*5)}.w-80{width:calc(var(--spacing)*80)}.w-96{width:calc(var(--spacing)*96)}.w-full{width:100%}.grow{flex-grow:1}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing)*2)}.rounded-box{border-radius:var(--radius-box);border-radius:var(--radius-box)}.alert-error{border-color:var(--color-error);color:var(--color-error-content);--alert-color:var(--color-error)}.alert-info{border-color:var(--color-info);color:var(--color-info-content);--alert-color:var(--color-info)}.alert-success{border-color:var(--color-success);color:var(--color-success-content);--alert-color:var(--color-success)}.alert-warning{border-color:var(--color-warning);color:var(--color-warning-content);--alert-color:var(--color-warning)}.border-base-300{border-color:var(--color-base-300)}.table-zebra tbody tr:where(:nth-child(2n)),.table-zebra tbody tr:where(:nth-child(2n)) :where(.table-pin-cols tr th){background-color:var(--color-base-200)}@media (hover:hover){:is(.table-zebra tbody tr.row-hover,.table-zebra tbody tr.row-hover:where(:nth-child(2n))):hover{background-color:var(--color-base-300)}}.bg-accent{background-color:var(--color-accent)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-info{background-color:var(--color-info)}.bg-neutral{background-color:var(--color-neutral)}.bg-primary{background-color:var(--color-primary)}.bg-success{background-color:var(--color-success)}.bg-warning{background-color:var(--color-warning)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-7{padding:calc(var(--spacing)*7)}.menu-title{color:var(--color-base-content);padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab, red, red)){.menu-title{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.menu-title{font-size:.875rem;font-weight:600}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.text-accent-content{color:var(--color-accent-content)}.text-base-content,.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.text-error{color:var(--color-error)}.text-info-content{color:var(--color-info-content)}.text-neutral-content{color:var(--color-neutral-content)}.text-primary{color:var(--color-primary)}.text-primary-content{color:var(--color-primary-content)}.text-secondary{color:var(--color-secondary)}.text-success-content{color:var(--color-success-content)}.text-warning-content{color:var(--color-warning-content)}.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,)}.btn-link{--btn-border:#0000;--btn-bg:#0000;--btn-fg:var(--color-primary);--btn-noise:none;--btn-shadow:"";outline-color:currentColor;text-decoration-line:underline}.btn-link:is(.btn-active,:hover,:active:focus,:focus-visible){--btn-border:#0000;--btn-bg:#0000;text-decoration-line:underline}@media (hover:none){.btn-link:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){text-decoration-line:none}}.opacity-30{opacity:.3}.opacity-60{opacity:.6}.shadow{--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-md{--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)}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible):not(:disabled,[disabled],.btn-disabled){--btn-fg:currentColor;outline-color:currentColor}@media (hover:none){.btn-ghost:hover:not(.btn-active,:active,:focus-visible,:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none;--btn-fg:currentColor}}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.card-lg .card-body{--card-p:2rem;--card-fs:1rem}.card-lg .card-title{--cardtitle-fs:1.25rem}.card-md .card-body{--card-p:1.5rem;--card-fs:.875rem}.card-md .card-title{--cardtitle-fs:1.125rem}.card-sm .card-body{--card-p:1rem;--card-fs:.75rem}.card-sm .card-title{--cardtitle-fs:1rem}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.input-success,.input-success:focus,.input-success:focus-within{--input-color:var(--color-success)}@media (min-width:64rem){.lg\:drawer-open>.drawer-side{overflow-y:auto}.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;overscroll-behavior:auto;opacity:1;width:auto;display:block;position:sticky}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:#0000}.lg\:drawer-open>.drawer-toggle~.drawer-side>:not(.drawer-overlay),[dir=rtl] :is(.lg\:drawer-open>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:0%}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:hidden{display:none}}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes progress{50%{background-position-x:-115%}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes dropdown{0%{opacity:0}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@property --tw-font-weight{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} \ No newline at end of file +/*! tailwindcss v4.3.0 | 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-border-style:solid;--tw-font-weight: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}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-blue-100:oklch(93.2% .032 255.585);--color-gray-200:oklch(92.8% .006 264.531);--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-thin:100;--font-weight-semibold:600;--font-weight-bold:700;--radius-4xl:2rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@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(--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;-webkit-text-decoration: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]){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}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:not(span){overflow:var(--page-overflow)}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) var(--root-bg,#0000)}@supports (color:color-mix(in lab, red, red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) color-mix(in srgb, var(--root-bg,#0000), oklch(0% 0 0) calc(var(--page-has-backdrop,0) * 40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset) ; else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) #0000}}@property --radialprogress{syntax:"";inherits:true;initial-value:0%}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(98% .003 60.858);--color-base-200:oklch(92% .006 60.531);--color-base-300:oklch(70% .015 60.067);--color-base-content:oklch(20% .042 265.755);--color-primary:oklch(36.6% .111 265.522);--color-primary-content:oklch(96% .029 272.314);--color-secondary:oklch(50% .095 242.749);--color-secondary-content:oklch(97% .014 254.604);--color-accent:oklch(32.8% .196 20.4);--color-accent-content:oklch(97% .021 166.113);--color-neutral:oklch(37% .044 257.287);--color-neutral-content:oklch(98% .003 247.858);--color-info:oklch(62% .107 259.815);--color-info-content:oklch(97% .014 254.604);--color-success:oklch(76% .124 130.85);--color-success-content:oklch(98% .031 120.757);--color-warning:oklch(76% .106 70.08);--color-warning-content:oklch(98% .022 95.277);--color-error:oklch(63% .145 25.331);--color-error-content:oklch(97% .013 17.38);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1.5px;--depth:1;--noise:1}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field), var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)), var(--tab-border-color) calc(69% - var(--border) + .25px), var(--tab-border-color) 69%, var(--tab-bg) calc(69% + .25px);order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0 / calc(var(--depth) * .15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow);--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000)}}.btn{--btn-noise:var(--fx-noise)}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0, auto) 1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab, red, red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent)}}.input{cursor:text;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.table{border-collapse:separate;--tw-border-spacing-x:calc(.25rem * 0);--tw-border-spacing-y:calc(.25rem * 0);width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead,tfoot){color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem) * 6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab, red, red)){.range{--range-bg:color-mix(in oklab, currentColor 10%, #0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab, red, red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab, red, red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.select{border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.select{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.select{--size:calc(var(--size-field,.25rem) * 10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border) * 2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}.checkbox{border:var(--border) solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox{border:var(--border) solid var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 0 #0000 inset, 0 0 #0000;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:0deg}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border) solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab, red, red)){.radio{border:var(--border) solid var(--input-color,color-mix(in srgb, currentColor 20%, #0000))}}.radio{box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media (prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.stats{border-radius:var(--radius-box);grid-auto-flow:column;display:inline-grid;position:relative;overflow-x:auto}.file-input{cursor:pointer;cursor:pointer;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.file-input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border) * 2);margin-inline-end:1rem;margin-block:calc(var(--border) * -1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise) * 100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0 / calc(var(--depth) * .15));box-shadow:0 .5px 0 .5px white inset, var(--btn-shadow);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border) * -1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab, color-mix(in oklab, white 30%, var(--btn-bg)) calc(var(--depth) * 20%), #0000) inset, var(--btn-shadow)}}.file-input::file-selector-button{--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-border:color-mix(in oklab, var(--btn-bg), #000 5%)}}.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000)}}.file-input::file-selector-button{--btn-noise:var(--fx-noise)}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.file-input:focus{box-shadow:0 1px color-mix(in oklab, var(--input-color) 10%, #0000)}}.file-input:focus{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){box-shadow:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){color:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.hero-content{isolation:isolate;justify-content:center;align-items:center;gap:1rem;max-width:80rem;padding:1rem;display:flex}.textarea{border:var(--border) solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab, red, red)){.textarea{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.stat-figure{grid-row:1/span 3;grid-column-start:2;place-self:center flex-end}.hero{background-position:50%;background-size:cover;place-items:center;width:100%;display:grid}.hero>*{grid-row-start:1;grid-column-start:1}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-desc{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-desc{font-size:.75rem}.stat-title{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-title{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-title{font-size:.75rem}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.divider{--divider-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.label{color:color-mix(in oklab, currentcolor 60%, transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab, red, red)){.status{background-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab, red, red)){.status{color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.status{background-image:radial-gradient(circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * .5)), #0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab, red, red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border) solid var(--badge-color,var(--color-base-200));background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem) * 6);width:fit-content;height:var(--size);padding-inline:calc(var(--size) / 2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem) * 10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border) dashed currentColor}@supports (color:color-mix(in lab, red, red)){.stat:not(:last-child){border-inline-end:var(--border) dashed color-mix(in oklab, currentColor 10%, #0000)}}.stat:not(:last-child){border-block-end:none}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px color-mix(in oklab, color-mix(in oklab, #000 20%, var(--alert-color,var(--color-base-200))) calc(var(--depth) * 20%), #0000), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}}.prose :where(a.btn:not(.btn-link)):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}@layer daisyui.l1.l2{.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border) 0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border) var(--tab-p) 0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color) #0000;--tab-corner-width:calc(100% + var(--tab-radius-limit) * 2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left, top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border) var(--border) 0 var(--border);--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border)) var(--border) calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left, var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right, var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start), var(--radius-end);background-size:var(--tab-radius-limit) var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1 * var(--border)) 0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row>*{grid-row-start:1}.checkbox:disabled,.radio:disabled{cursor:not-allowed;opacity:.2}:where(.navbar){position:relative}.divider-horizontal{--divider-m:0 1rem}.divider-horizontal.divider{flex-direction:column;width:1rem;height:auto}.divider-horizontal.divider:before,.divider-horizontal.divider:after{width:.125rem;height:100%}:where(:not(ul,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}.table-zebra tbody tr:where(:nth-child(2n)),.table-zebra tbody tr:where(:nth-child(2n)) :where(.table-pin-cols tr th){background-color:var(--color-base-200)}@media (hover:hover){:is(.table-zebra tbody tr.row-hover,.table-zebra tbody tr.row-hover:where(:nth-child(2n))):hover{background-color:var(--color-base-300)}}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.card-lg .card-body{--card-p:2rem;--card-fs:1rem}.card-lg .card-title{--cardtitle-fs:1.25rem}.card-md .card-body{--card-p:1.5rem;--card-fs:.875rem}.card-md .card-title{--cardtitle-fs:1.125rem}.card-sm .card-body{--card-p:1rem;--card-fs:.75rem}.card-sm .card-title{--cardtitle-fs:1rem}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.input-success,.input-success:focus,.input-success:focus-within{--input-color:var(--color-success)}}.absolute{position:absolute}.relative{position:relative}.static{position:static}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media (hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.mx-10{margin-inline:calc(var(--spacing) * 10)}.mx-auto{margin-inline:auto}.join-item:where(:not(:first-child,:disabled,[disabled],.btn-disabled)){margin-block-start:0;margin-inline-start:calc(var(--border,1px) * -1)}.join-item:where(:is(:disabled,[disabled],.btn-disabled)){border-width:var(--border,1px) 0 var(--border,1px) var(--border,1px)}.prose-xl{font-size:1.25rem;line-height:1.8}.prose-xl :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em;margin-bottom:1.2em}.prose-xl :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1em;margin-bottom:1em;font-size:1.2em;line-height:1.5}.prose-xl :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1.06667em}.prose-xl :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.857143em;font-size:2.8em;line-height:1}.prose-xl :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.888889em;font-size:1.8em;line-height:1.11111}.prose-xl :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.666667em;font-size:1.5em;line-height:1.33333}.prose-xl :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.8em;margin-bottom:.6em;line-height:1.6}.prose-xl :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-xl :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-xl :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-xl :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-xl :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.25em;padding-inline-end:.4em;padding-bottom:.25em;border-radius:.3125rem;padding-inline-start:.4em;font-size:.9em}.prose-xl :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-xl :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.861111em}.prose-xl :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-xl :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:1.11111em;padding-inline-end:1.33333em;padding-bottom:1.11111em;border-radius:.5rem;margin-top:2em;margin-bottom:2em;padding-inline-start:1.33333em;font-size:.9em;line-height:1.77778}.prose-xl :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-xl :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em;margin-bottom:1.2em;padding-inline-start:1.6em}.prose-xl :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6em;margin-bottom:.6em}.prose-xl :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-xl :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4em}.prose-xl :where(.prose-xl>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8em;margin-bottom:.8em}.prose-xl :where(.prose-xl>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em}.prose-xl :where(.prose-xl>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em}.prose-xl :where(.prose-xl>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em}.prose-xl :where(.prose-xl>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.2em}.prose-xl :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8em;margin-bottom:.8em}.prose-xl :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em;margin-bottom:1.2em}.prose-xl :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.2em}.prose-xl :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6em;padding-inline-start:1.6em}.prose-xl :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8em;margin-bottom:2.8em}.prose-xl :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-xl :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-xl :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-xl :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-xl :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em;line-height:1.55556}.prose-xl :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.666667em;padding-bottom:.888889em;padding-inline-start:.666667em}.prose-xl :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-xl :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-xl :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.888889em;padding-inline-end:.666667em;padding-bottom:.888889em;padding-inline-start:.666667em}.prose-xl :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-xl :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-xl :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-xl :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-xl :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1em;font-size:.9em;line-height:1.55556}.prose-xl :where(.prose-xl>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-xl :where(.prose-xl>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.flex{display:flex}.hidden{display:none}.inline{display:inline}.table{display:table}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-92{width:calc(var(--spacing) * 92);height:calc(var(--spacing) * 92)}.h-5{height:calc(var(--spacing) * 5)}.h-24{height:calc(var(--spacing) * 24)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-2\/3{width:66.6667%}.w-5{width:calc(var(--spacing) * 5)}.w-96{width:calc(var(--spacing) * 96)}.w-160{width:calc(var(--spacing) * 160)}.w-full{width:100%}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-hidden{overflow:hidden}.rounded-4xl{border-radius:var(--radius-4xl)}.rounded-box{border-radius:var(--radius-box);border-radius:var(--radius-box)}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-base-300{border-color:var(--color-base-300)}.border-gray-200{border-color:var(--color-gray-200)}.bg-accent{background-color:var(--color-accent)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-info{background-color:var(--color-info)}.bg-neutral{background-color:var(--color-neutral)}.bg-primary{background-color:var(--color-primary)}.bg-red-100{background-color:var(--color-red-100)}.bg-success{background-color:var(--color-success)}.bg-warning{background-color:var(--color-warning)}.object-contain{object-fit:contain}.p-2{padding:calc(var(--spacing) * 2)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.py-4{padding-block:calc(var(--spacing) * 4)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.text-accent-content{color:var(--color-accent-content)}.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.text-error{color:var(--color-error)}.text-info-content{color:var(--color-info-content)}.text-neutral-content{color:var(--color-neutral-content)}.text-primary{color:var(--color-primary)}.text-primary-content{color:var(--color-primary-content)}.text-secondary{color:var(--color-secondary)}.text-success-content{color:var(--color-success-content)}.text-warning-content{color:var(--color-warning-content)}.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,)}@layer daisyui.l1{.btn-link{--btn-border:#0000;--btn-bg:#0000;--btn-noise:none;--btn-shadow:"";outline-color:currentColor;text-decoration-line:underline}.btn-link:not(.btn-disabled,.btn:disabled,.btn[disabled]){--btn-fg:var(--btn-color,var(--color-primary))}.btn-link:is(.btn-active,:hover,:active:focus,:focus-visible){--btn-border:#0000;--btn-bg:#0000}}.underline{text-decoration-line:underline}.opacity-30{opacity:.3}.opacity-60{opacity:.6}.shadow{--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-md{--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)}@media (hover:hover){.hover\:underline:hover{text-decoration-line:underline}}}@keyframes menu{0%{opacity:0}}@keyframes dropdown{0%{opacity:0}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes progress{50%{background-position-x:-115%}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items) * 100%)}to{translate:0 -100%}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{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} \ No newline at end of file diff --git a/public/static/me2.webp b/public/static/me2.webp new file mode 100644 index 0000000..f2c9f97 Binary files /dev/null and b/public/static/me2.webp differ diff --git a/tailwind.css b/tailwind.css index fd80716..2bc1c5e 100644 --- a/tailwind.css +++ b/tailwind.css @@ -1,9 +1,43 @@ @import "tailwindcss" source(none); @plugin "@tailwindcss/typography"; -@source "./pkg/ui/**/*.{go}"; +@source "./internal/ui/**/*.{go}"; @plugin "./daisyui.js"; /* Optional for custom themes – Docs: https://daisyui.com/docs/themes/#how-to-add-a-new-custom-theme */ @plugin "./daisyui-theme.js"{ /* custom theme here */ -} \ No newline at end of file + + name: "light"; + default: false; + prefersdark: false; + color-scheme: "light"; + --color-base-100: oklch(98% 0.003 60.858); + --color-base-200: oklch(92% 0.006 60.531); + --color-base-300: oklch(70% 0.015 60.067); + --color-base-content: oklch(20% 0.042 265.755); + --color-primary: oklch(36.6% 0.111 265.522); + --color-primary-content: oklch(96% 0.029 272.314); + --color-secondary: oklch(50% 0.095 242.749); + --color-secondary-content: oklch(97% 0.014 254.604); + --color-accent: oklch(32.8% 0.196 20.400); + --color-accent-content: oklch(97% 0.021 166.113); + --color-neutral: oklch(37% 0.044 257.287); + --color-neutral-content: oklch(98% 0.003 247.858); + --color-info: oklch(62% 0.107 259.815); + --color-info-content: oklch(97% 0.014 254.604); + --color-success: oklch(76% 0.124 130.850); + --color-success-content: oklch(98% 0.031 120.757); + --color-warning: oklch(76% 0.106 70.080); + --color-warning-content: oklch(98% 0.022 95.277); + --color-error: oklch(63% 0.145 25.331); + --color-error-content: oklch(97% 0.013 17.38); + --radius-selector: 0.5rem; + --radius-field: 0.5rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1.5px; + --depth: 1; + --noise: 1; + +}