your personal website on atproto - mirror blento.app

Merge branch 'flo-bit:main' into main

authored by

polijn and committed by
GitHub
93fd9f28 ae4fe500

+557 -192
+3 -1
.claude/settings.local.json
··· 22 "Bash(pnpm config:*)", 23 "Bash(lsof:*)", 24 "Bash(pnpm dev)", 25 - "Bash(pnpm exec svelte-kit:*)" 26 ] 27 } 28 }
··· 22 "Bash(pnpm config:*)", 23 "Bash(lsof:*)", 24 "Bash(pnpm dev)", 25 + "Bash(pnpm exec svelte-kit:*)", 26 + "Bash(pnpm build:*)", 27 + "Bash(pnpm remove:*)" 28 ] 29 } 30 }
+23 -7
docs/Beta.md
··· 11 12 - show nsfw warnings 13 14 - - big button card 15 16 - - card with big call to action button 17 18 - - video card? 19 20 - - allow setting base and accent color 21 22 - - ask to fill with some default cards on page creation 23 24 - - when adding images try to add them in a size that best fits aspect ratio 25 26 - - onboarding
··· 11 12 - show nsfw warnings 13 14 + - card with big call to action button "create your blento" 15 16 + - ask to fill with some default cards on page creation 17 18 + - when adding images try to add them in a size that best fits aspect ratio 19 20 + - onboarding? 21 22 + - switch sidebar to a quick list of available cards with search function 23 24 + - test 25 + - selfhosting 26 27 + - guestbook card 28 + 29 + - onboarding? 30 + 31 + - switch sidebar to a quick list of available cards with search function 32 + 33 + - test 34 + - selfhosting 35 + 36 + - guestbook card 37 + 38 + - analytics? 39 + 40 + - refresh recently updated blentos (move to top of list, update profiles every 24 hours) 41 + 42 + - server side oauth?
+1
package.json
··· 71 "@types/three": "^0.176.0", 72 "bits-ui": "^2.15.4", 73 "clsx": "^2.1.1", 74 "gsap": "^3.14.2", 75 "hls.js": "^1.6.15", 76 "leaflet": "^1.9.4",
··· 71 "@types/three": "^0.176.0", 72 "bits-ui": "^2.15.4", 73 "clsx": "^2.1.1", 74 + "dompurify": "^3.3.1", 75 "gsap": "^3.14.2", 76 "hls.js": "^1.6.15", 77 "leaflet": "^1.9.4",
+155 -139
pnpm-lock.yaml
··· 104 clsx: 105 specifier: ^2.1.1 106 version: 2.1.1 107 gsap: 108 specifier: ^3.14.2 109 version: 3.14.2 ··· 308 optional: true 309 310 '@cloudflare/workerd-darwin-64@1.20260120.0': 311 - resolution: {integrity: sha512-JLHx3p5dpwz4wjVSis45YNReftttnI3ndhdMh5BUbbpdreN/g0jgxNt5Qp9tDFqEKl++N63qv+hxJiIIvSLR+Q==} 312 engines: {node: '>=16'} 313 cpu: [x64] 314 os: [darwin] 315 316 '@cloudflare/workerd-darwin-arm64@1.20260120.0': 317 - resolution: {integrity: sha512-1Md2tCRhZjwajsZNOiBeOVGiS3zbpLPzUDjHr4+XGTXWOA6FzzwScJwQZLa0Doc28Cp4Nr1n7xGL0Dwiz1XuOA==} 318 engines: {node: '>=16'} 319 cpu: [arm64] 320 os: [darwin] 321 322 '@cloudflare/workerd-linux-64@1.20260120.0': 323 - resolution: {integrity: sha512-O0mIfJfvU7F8N5siCoRDaVDuI12wkz2xlG4zK6/Ct7U9c9FiE0ViXNFWXFQm5PPj+qbkNRyhjUwhP+GCKTk5EQ==} 324 engines: {node: '>=16'} 325 cpu: [x64] 326 os: [linux] 327 328 '@cloudflare/workerd-linux-arm64@1.20260120.0': 329 - resolution: {integrity: sha512-aRHO/7bjxVpjZEmVVcpmhbzpN6ITbFCxuLLZSW0H9O0C0w40cDCClWSi19T87Ax/PQcYjFNT22pTewKsupkckA==} 330 engines: {node: '>=16'} 331 cpu: [arm64] 332 os: [linux] 333 334 '@cloudflare/workerd-windows-64@1.20260120.0': 335 - resolution: {integrity: sha512-ASZIz1E8sqZQqQCgcfY1PJbBpUDrxPt8NZ+lqNil0qxnO4qX38hbCsdDF2/TDAuq0Txh7nu8ztgTelfNDlb4EA==} 336 engines: {node: '>=16'} 337 cpu: [x64] 338 os: [win32] ··· 348 resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} 349 350 '@emnapi/runtime@1.8.1': 351 - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 352 353 '@esbuild/aix-ppc64@0.27.0': 354 - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} 355 engines: {node: '>=18'} 356 cpu: [ppc64] 357 os: [aix] 358 359 '@esbuild/aix-ppc64@0.27.2': 360 - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} 361 engines: {node: '>=18'} 362 cpu: [ppc64] 363 os: [aix] 364 365 '@esbuild/android-arm64@0.27.0': 366 - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} 367 engines: {node: '>=18'} 368 cpu: [arm64] 369 os: [android] 370 371 '@esbuild/android-arm64@0.27.2': 372 - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} 373 engines: {node: '>=18'} 374 cpu: [arm64] 375 os: [android] 376 377 '@esbuild/android-arm@0.27.0': 378 - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} 379 engines: {node: '>=18'} 380 cpu: [arm] 381 os: [android] 382 383 '@esbuild/android-arm@0.27.2': 384 - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} 385 engines: {node: '>=18'} 386 cpu: [arm] 387 os: [android] 388 389 '@esbuild/android-x64@0.27.0': 390 - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} 391 engines: {node: '>=18'} 392 cpu: [x64] 393 os: [android] 394 395 '@esbuild/android-x64@0.27.2': 396 - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} 397 engines: {node: '>=18'} 398 cpu: [x64] 399 os: [android] 400 401 '@esbuild/darwin-arm64@0.27.0': 402 - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} 403 engines: {node: '>=18'} 404 cpu: [arm64] 405 os: [darwin] 406 407 '@esbuild/darwin-arm64@0.27.2': 408 - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} 409 engines: {node: '>=18'} 410 cpu: [arm64] 411 os: [darwin] 412 413 '@esbuild/darwin-x64@0.27.0': 414 - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} 415 engines: {node: '>=18'} 416 cpu: [x64] 417 os: [darwin] 418 419 '@esbuild/darwin-x64@0.27.2': 420 - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} 421 engines: {node: '>=18'} 422 cpu: [x64] 423 os: [darwin] 424 425 '@esbuild/freebsd-arm64@0.27.0': 426 - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} 427 engines: {node: '>=18'} 428 cpu: [arm64] 429 os: [freebsd] 430 431 '@esbuild/freebsd-arm64@0.27.2': 432 - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} 433 engines: {node: '>=18'} 434 cpu: [arm64] 435 os: [freebsd] 436 437 '@esbuild/freebsd-x64@0.27.0': 438 - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} 439 engines: {node: '>=18'} 440 cpu: [x64] 441 os: [freebsd] 442 443 '@esbuild/freebsd-x64@0.27.2': 444 - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} 445 engines: {node: '>=18'} 446 cpu: [x64] 447 os: [freebsd] 448 449 '@esbuild/linux-arm64@0.27.0': 450 - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} 451 engines: {node: '>=18'} 452 cpu: [arm64] 453 os: [linux] 454 455 '@esbuild/linux-arm64@0.27.2': 456 - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} 457 engines: {node: '>=18'} 458 cpu: [arm64] 459 os: [linux] 460 461 '@esbuild/linux-arm@0.27.0': 462 - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} 463 engines: {node: '>=18'} 464 cpu: [arm] 465 os: [linux] 466 467 '@esbuild/linux-arm@0.27.2': 468 - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} 469 engines: {node: '>=18'} 470 cpu: [arm] 471 os: [linux] 472 473 '@esbuild/linux-ia32@0.27.0': 474 - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} 475 engines: {node: '>=18'} 476 cpu: [ia32] 477 os: [linux] 478 479 '@esbuild/linux-ia32@0.27.2': 480 - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} 481 engines: {node: '>=18'} 482 cpu: [ia32] 483 os: [linux] 484 485 '@esbuild/linux-loong64@0.27.0': 486 - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} 487 engines: {node: '>=18'} 488 cpu: [loong64] 489 os: [linux] 490 491 '@esbuild/linux-loong64@0.27.2': 492 - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} 493 engines: {node: '>=18'} 494 cpu: [loong64] 495 os: [linux] 496 497 '@esbuild/linux-mips64el@0.27.0': 498 - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} 499 engines: {node: '>=18'} 500 cpu: [mips64el] 501 os: [linux] 502 503 '@esbuild/linux-mips64el@0.27.2': 504 - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} 505 engines: {node: '>=18'} 506 cpu: [mips64el] 507 os: [linux] 508 509 '@esbuild/linux-ppc64@0.27.0': 510 - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} 511 engines: {node: '>=18'} 512 cpu: [ppc64] 513 os: [linux] 514 515 '@esbuild/linux-ppc64@0.27.2': 516 - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} 517 engines: {node: '>=18'} 518 cpu: [ppc64] 519 os: [linux] 520 521 '@esbuild/linux-riscv64@0.27.0': 522 - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} 523 engines: {node: '>=18'} 524 cpu: [riscv64] 525 os: [linux] 526 527 '@esbuild/linux-riscv64@0.27.2': 528 - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} 529 engines: {node: '>=18'} 530 cpu: [riscv64] 531 os: [linux] 532 533 '@esbuild/linux-s390x@0.27.0': 534 - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} 535 engines: {node: '>=18'} 536 cpu: [s390x] 537 os: [linux] 538 539 '@esbuild/linux-s390x@0.27.2': 540 - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} 541 engines: {node: '>=18'} 542 cpu: [s390x] 543 os: [linux] 544 545 '@esbuild/linux-x64@0.27.0': 546 - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} 547 engines: {node: '>=18'} 548 cpu: [x64] 549 os: [linux] 550 551 '@esbuild/linux-x64@0.27.2': 552 - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} 553 engines: {node: '>=18'} 554 cpu: [x64] 555 os: [linux] 556 557 '@esbuild/netbsd-arm64@0.27.0': 558 - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} 559 engines: {node: '>=18'} 560 cpu: [arm64] 561 os: [netbsd] 562 563 '@esbuild/netbsd-arm64@0.27.2': 564 - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} 565 engines: {node: '>=18'} 566 cpu: [arm64] 567 os: [netbsd] 568 569 '@esbuild/netbsd-x64@0.27.0': 570 - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} 571 engines: {node: '>=18'} 572 cpu: [x64] 573 os: [netbsd] 574 575 '@esbuild/netbsd-x64@0.27.2': 576 - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} 577 engines: {node: '>=18'} 578 cpu: [x64] 579 os: [netbsd] 580 581 '@esbuild/openbsd-arm64@0.27.0': 582 - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} 583 engines: {node: '>=18'} 584 cpu: [arm64] 585 os: [openbsd] 586 587 '@esbuild/openbsd-arm64@0.27.2': 588 - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} 589 engines: {node: '>=18'} 590 cpu: [arm64] 591 os: [openbsd] 592 593 '@esbuild/openbsd-x64@0.27.0': 594 - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} 595 engines: {node: '>=18'} 596 cpu: [x64] 597 os: [openbsd] 598 599 '@esbuild/openbsd-x64@0.27.2': 600 - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} 601 engines: {node: '>=18'} 602 cpu: [x64] 603 os: [openbsd] 604 605 '@esbuild/openharmony-arm64@0.27.0': 606 - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} 607 engines: {node: '>=18'} 608 cpu: [arm64] 609 os: [openharmony] 610 611 '@esbuild/openharmony-arm64@0.27.2': 612 - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} 613 engines: {node: '>=18'} 614 cpu: [arm64] 615 os: [openharmony] 616 617 '@esbuild/sunos-x64@0.27.0': 618 - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} 619 engines: {node: '>=18'} 620 cpu: [x64] 621 os: [sunos] 622 623 '@esbuild/sunos-x64@0.27.2': 624 - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} 625 engines: {node: '>=18'} 626 cpu: [x64] 627 os: [sunos] 628 629 '@esbuild/win32-arm64@0.27.0': 630 - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} 631 engines: {node: '>=18'} 632 cpu: [arm64] 633 os: [win32] 634 635 '@esbuild/win32-arm64@0.27.2': 636 - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} 637 engines: {node: '>=18'} 638 cpu: [arm64] 639 os: [win32] 640 641 '@esbuild/win32-ia32@0.27.0': 642 - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} 643 engines: {node: '>=18'} 644 cpu: [ia32] 645 os: [win32] 646 647 '@esbuild/win32-ia32@0.27.2': 648 - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} 649 engines: {node: '>=18'} 650 cpu: [ia32] 651 os: [win32] 652 653 '@esbuild/win32-x64@0.27.0': 654 - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} 655 engines: {node: '>=18'} 656 cpu: [x64] 657 os: [win32] 658 659 '@esbuild/win32-x64@0.27.2': 660 - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} 661 engines: {node: '>=18'} 662 cpu: [x64] 663 os: [win32] ··· 784 engines: {node: '>=18'} 785 786 '@img/sharp-darwin-arm64@0.34.5': 787 - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} 788 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 789 cpu: [arm64] 790 os: [darwin] 791 792 '@img/sharp-darwin-x64@0.34.5': 793 - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} 794 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 795 cpu: [x64] 796 os: [darwin] 797 798 '@img/sharp-libvips-darwin-arm64@1.2.4': 799 - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} 800 cpu: [arm64] 801 os: [darwin] 802 803 '@img/sharp-libvips-darwin-x64@1.2.4': 804 - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} 805 cpu: [x64] 806 os: [darwin] 807 808 '@img/sharp-libvips-linux-arm64@1.2.4': 809 - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} 810 cpu: [arm64] 811 os: [linux] 812 813 '@img/sharp-libvips-linux-arm@1.2.4': 814 - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} 815 cpu: [arm] 816 os: [linux] 817 818 '@img/sharp-libvips-linux-ppc64@1.2.4': 819 - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} 820 cpu: [ppc64] 821 os: [linux] 822 823 '@img/sharp-libvips-linux-riscv64@1.2.4': 824 - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} 825 cpu: [riscv64] 826 os: [linux] 827 828 '@img/sharp-libvips-linux-s390x@1.2.4': 829 - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} 830 cpu: [s390x] 831 os: [linux] 832 833 '@img/sharp-libvips-linux-x64@1.2.4': 834 - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} 835 cpu: [x64] 836 os: [linux] 837 838 '@img/sharp-libvips-linuxmusl-arm64@1.2.4': 839 - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} 840 cpu: [arm64] 841 os: [linux] 842 843 '@img/sharp-libvips-linuxmusl-x64@1.2.4': 844 - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} 845 cpu: [x64] 846 os: [linux] 847 848 '@img/sharp-linux-arm64@0.34.5': 849 - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} 850 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 851 cpu: [arm64] 852 os: [linux] 853 854 '@img/sharp-linux-arm@0.34.5': 855 - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} 856 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 857 cpu: [arm] 858 os: [linux] 859 860 '@img/sharp-linux-ppc64@0.34.5': 861 - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} 862 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 863 cpu: [ppc64] 864 os: [linux] 865 866 '@img/sharp-linux-riscv64@0.34.5': 867 - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} 868 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 869 cpu: [riscv64] 870 os: [linux] 871 872 '@img/sharp-linux-s390x@0.34.5': 873 - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} 874 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 875 cpu: [s390x] 876 os: [linux] 877 878 '@img/sharp-linux-x64@0.34.5': 879 - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} 880 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 881 cpu: [x64] 882 os: [linux] 883 884 '@img/sharp-linuxmusl-arm64@0.34.5': 885 - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} 886 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 887 cpu: [arm64] 888 os: [linux] 889 890 '@img/sharp-linuxmusl-x64@0.34.5': 891 - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} 892 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 893 cpu: [x64] 894 os: [linux] 895 896 '@img/sharp-wasm32@0.34.5': 897 - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} 898 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 899 cpu: [wasm32] 900 901 '@img/sharp-win32-arm64@0.34.5': 902 - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} 903 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 904 cpu: [arm64] 905 os: [win32] 906 907 '@img/sharp-win32-ia32@0.34.5': 908 - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} 909 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 910 cpu: [ia32] 911 os: [win32] 912 913 '@img/sharp-win32-x64@0.34.5': 914 - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} 915 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 916 cpu: [x64] 917 os: [win32] ··· 989 engines: {node: '>= 10'} 990 991 '@rollup/rollup-android-arm-eabi@4.56.0': 992 - resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==} 993 cpu: [arm] 994 os: [android] 995 996 '@rollup/rollup-android-arm64@4.56.0': 997 - resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==} 998 cpu: [arm64] 999 os: [android] 1000 1001 '@rollup/rollup-darwin-arm64@4.56.0': 1002 - resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==} 1003 cpu: [arm64] 1004 os: [darwin] 1005 1006 '@rollup/rollup-darwin-x64@4.56.0': 1007 - resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==} 1008 cpu: [x64] 1009 os: [darwin] 1010 1011 '@rollup/rollup-freebsd-arm64@4.56.0': 1012 - resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==} 1013 cpu: [arm64] 1014 os: [freebsd] 1015 1016 '@rollup/rollup-freebsd-x64@4.56.0': 1017 - resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==} 1018 cpu: [x64] 1019 os: [freebsd] 1020 1021 '@rollup/rollup-linux-arm-gnueabihf@4.56.0': 1022 - resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==} 1023 cpu: [arm] 1024 os: [linux] 1025 1026 '@rollup/rollup-linux-arm-musleabihf@4.56.0': 1027 - resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==} 1028 cpu: [arm] 1029 os: [linux] 1030 1031 '@rollup/rollup-linux-arm64-gnu@4.56.0': 1032 - resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==} 1033 cpu: [arm64] 1034 os: [linux] 1035 1036 '@rollup/rollup-linux-arm64-musl@4.56.0': 1037 - resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==} 1038 cpu: [arm64] 1039 os: [linux] 1040 1041 '@rollup/rollup-linux-loong64-gnu@4.56.0': 1042 - resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==} 1043 cpu: [loong64] 1044 os: [linux] 1045 1046 '@rollup/rollup-linux-loong64-musl@4.56.0': 1047 - resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==} 1048 cpu: [loong64] 1049 os: [linux] 1050 1051 '@rollup/rollup-linux-ppc64-gnu@4.56.0': 1052 - resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==} 1053 cpu: [ppc64] 1054 os: [linux] 1055 1056 '@rollup/rollup-linux-ppc64-musl@4.56.0': 1057 - resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==} 1058 cpu: [ppc64] 1059 os: [linux] 1060 1061 '@rollup/rollup-linux-riscv64-gnu@4.56.0': 1062 - resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==} 1063 cpu: [riscv64] 1064 os: [linux] 1065 1066 '@rollup/rollup-linux-riscv64-musl@4.56.0': 1067 - resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==} 1068 cpu: [riscv64] 1069 os: [linux] 1070 1071 '@rollup/rollup-linux-s390x-gnu@4.56.0': 1072 - resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==} 1073 cpu: [s390x] 1074 os: [linux] 1075 1076 '@rollup/rollup-linux-x64-gnu@4.56.0': 1077 - resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==} 1078 cpu: [x64] 1079 os: [linux] 1080 1081 '@rollup/rollup-linux-x64-musl@4.56.0': 1082 - resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==} 1083 cpu: [x64] 1084 os: [linux] 1085 1086 '@rollup/rollup-openbsd-x64@4.56.0': 1087 - resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==} 1088 cpu: [x64] 1089 os: [openbsd] 1090 1091 '@rollup/rollup-openharmony-arm64@4.56.0': 1092 - resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==} 1093 cpu: [arm64] 1094 os: [openharmony] 1095 1096 '@rollup/rollup-win32-arm64-msvc@4.56.0': 1097 - resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==} 1098 cpu: [arm64] 1099 os: [win32] 1100 1101 '@rollup/rollup-win32-ia32-msvc@4.56.0': 1102 - resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==} 1103 cpu: [ia32] 1104 os: [win32] 1105 1106 '@rollup/rollup-win32-x64-gnu@4.56.0': 1107 - resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==} 1108 cpu: [x64] 1109 os: [win32] 1110 1111 '@rollup/rollup-win32-x64-msvc@4.56.0': 1112 - resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==} 1113 cpu: [x64] 1114 os: [win32] 1115 ··· 1182 resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} 1183 1184 '@tailwindcss/oxide-android-arm64@4.1.18': 1185 - resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} 1186 engines: {node: '>= 10'} 1187 cpu: [arm64] 1188 os: [android] 1189 1190 '@tailwindcss/oxide-darwin-arm64@4.1.18': 1191 - resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} 1192 engines: {node: '>= 10'} 1193 cpu: [arm64] 1194 os: [darwin] 1195 1196 '@tailwindcss/oxide-darwin-x64@4.1.18': 1197 - resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} 1198 engines: {node: '>= 10'} 1199 cpu: [x64] 1200 os: [darwin] 1201 1202 '@tailwindcss/oxide-freebsd-x64@4.1.18': 1203 - resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} 1204 engines: {node: '>= 10'} 1205 cpu: [x64] 1206 os: [freebsd] 1207 1208 '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 1209 - resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} 1210 engines: {node: '>= 10'} 1211 cpu: [arm] 1212 os: [linux] 1213 1214 '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 1215 - resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} 1216 engines: {node: '>= 10'} 1217 cpu: [arm64] 1218 os: [linux] 1219 1220 '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 1221 - resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} 1222 engines: {node: '>= 10'} 1223 cpu: [arm64] 1224 os: [linux] 1225 1226 '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 1227 - resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} 1228 engines: {node: '>= 10'} 1229 cpu: [x64] 1230 os: [linux] 1231 1232 '@tailwindcss/oxide-linux-x64-musl@4.1.18': 1233 - resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} 1234 engines: {node: '>= 10'} 1235 cpu: [x64] 1236 os: [linux] 1237 1238 '@tailwindcss/oxide-wasm32-wasi@4.1.18': 1239 - resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} 1240 engines: {node: '>=14.0.0'} 1241 cpu: [wasm32] 1242 bundledDependencies: ··· 1248 - tslib 1249 1250 '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 1251 - resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} 1252 engines: {node: '>= 10'} 1253 cpu: [arm64] 1254 os: [win32] 1255 1256 '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 1257 - resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} 1258 engines: {node: '>= 10'} 1259 cpu: [x64] 1260 os: [win32] ··· 1274 vite: ^5.2.0 || ^6 || ^7 1275 1276 '@takumi-rs/core-darwin-arm64@0.55.4': 1277 - resolution: {integrity: sha512-LH/X/ul19DActLGcBpXnxH3OBEq8qOgPD56hNHAJMbnCRxAO6TDaIh2U7WqPVliSkFk3jZfikbD21SIEpZrp8A==} 1278 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1279 cpu: [arm64] 1280 os: [darwin] 1281 1282 '@takumi-rs/core-darwin-x64@0.55.4': 1283 - resolution: {integrity: sha512-UW7ovR/D1Qp8n8bJOo6JLqZZUDFWWtGRXEZZUZhzUeMSzJ4k3C6ef/DEc75bUTGeBKqCeypMPcvtkQAjcVwwhw==} 1284 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1285 cpu: [x64] 1286 os: [darwin] 1287 1288 '@takumi-rs/core-linux-arm64-gnu@0.55.4': 1289 - resolution: {integrity: sha512-y1d5yuPapKlmt77TpE+XrtULj7LZ51leBqWSg6qMNKxhpvRqmjI/SYjHmk5YvshnrTkdKmRQiXJiiN5EzOhbmA==} 1290 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1291 cpu: [arm64] 1292 os: [linux] 1293 1294 '@takumi-rs/core-linux-arm64-musl@0.55.4': 1295 - resolution: {integrity: sha512-VRbQqbMeoPlrMmaqPwn30Sw82LYya+o4ru9dqV/7BKExozWj/pX9ahexlJdHsZ6wqmsr+ZxexZivK1mPum9ang==} 1296 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1297 cpu: [arm64] 1298 os: [linux] 1299 1300 '@takumi-rs/core-linux-x64-gnu@0.55.4': 1301 - resolution: {integrity: sha512-ecCUtNgOe6mCWKf+SE7cbJXWd6D6TQoCnKZAJAGrJkJLAdy/gBhCFhOyPz8M7q/4uWHUATentqi35KAp+jxBiQ==} 1302 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1303 cpu: [x64] 1304 os: [linux] 1305 1306 '@takumi-rs/core-linux-x64-musl@0.55.4': 1307 - resolution: {integrity: sha512-YBM2zPrGE/1sfHoFZvOsCvCuK9PfaxzePN/GnnlaAvpvgeRHiAU4PJkLGDpjMFfsWUAEdjly/b0HSAjVQ7NL6Q==} 1308 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1309 cpu: [x64] 1310 os: [linux] 1311 1312 '@takumi-rs/core-win32-arm64-msvc@0.55.4': 1313 - resolution: {integrity: sha512-VcgLCWnmyWuhwLv0Tpob8Hv5IFPreFVykoHruPGwXDVVoUcCo+lQ8oCO5EYTB8B/tBAXl2S0xUL0nMDbyLzMxQ==} 1314 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1315 cpu: [arm64] 1316 os: [win32] 1317 1318 '@takumi-rs/core-win32-x64-msvc@0.55.4': 1319 - resolution: {integrity: sha512-ta9g1gUybS2V4mHaccJHcMeBb+w1P6pgZuqHzLoQzBIEK9a/KncHPfnR48cz4sGfg4atorfSa6UBffa2FqijyQ==} 1320 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1321 cpu: [x64] 1322 os: [win32] ··· 1537 1538 '@types/three@0.176.0': 1539 resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==} 1540 1541 '@types/turndown@5.0.6': 1542 resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==} ··· 1831 resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1832 engines: {node: '>= 4'} 1833 1834 domutils@3.2.2: 1835 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 1836 ··· 1992 resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1993 1994 fsevents@2.3.3: 1995 - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1996 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1997 os: [darwin] 1998 ··· 2128 engines: {node: '>= 0.8.0'} 2129 2130 lightningcss-android-arm64@1.30.2: 2131 - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 2132 engines: {node: '>= 12.0.0'} 2133 cpu: [arm64] 2134 os: [android] 2135 2136 lightningcss-darwin-arm64@1.30.2: 2137 - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 2138 engines: {node: '>= 12.0.0'} 2139 cpu: [arm64] 2140 os: [darwin] 2141 2142 lightningcss-darwin-x64@1.30.2: 2143 - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 2144 engines: {node: '>= 12.0.0'} 2145 cpu: [x64] 2146 os: [darwin] 2147 2148 lightningcss-freebsd-x64@1.30.2: 2149 - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 2150 engines: {node: '>= 12.0.0'} 2151 cpu: [x64] 2152 os: [freebsd] 2153 2154 lightningcss-linux-arm-gnueabihf@1.30.2: 2155 - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 2156 engines: {node: '>= 12.0.0'} 2157 cpu: [arm] 2158 os: [linux] 2159 2160 lightningcss-linux-arm64-gnu@1.30.2: 2161 - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 2162 engines: {node: '>= 12.0.0'} 2163 cpu: [arm64] 2164 os: [linux] 2165 2166 lightningcss-linux-arm64-musl@1.30.2: 2167 - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 2168 engines: {node: '>= 12.0.0'} 2169 cpu: [arm64] 2170 os: [linux] 2171 2172 lightningcss-linux-x64-gnu@1.30.2: 2173 - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 2174 engines: {node: '>= 12.0.0'} 2175 cpu: [x64] 2176 os: [linux] 2177 2178 lightningcss-linux-x64-musl@1.30.2: 2179 - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 2180 engines: {node: '>= 12.0.0'} 2181 cpu: [x64] 2182 os: [linux] 2183 2184 lightningcss-win32-arm64-msvc@1.30.2: 2185 - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 2186 engines: {node: '>= 12.0.0'} 2187 cpu: [arm64] 2188 os: [win32] 2189 2190 lightningcss-win32-x64-msvc@1.30.2: 2191 - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 2192 engines: {node: '>= 12.0.0'} 2193 cpu: [x64] 2194 os: [win32] ··· 4194 fflate: 0.8.2 4195 meshoptimizer: 0.18.1 4196 4197 '@types/turndown@5.0.6': {} 4198 4199 '@types/webxr@0.5.24': {} ··· 4512 domhandler@5.0.3: 4513 dependencies: 4514 domelementtype: 2.3.0 4515 4516 domutils@3.2.2: 4517 dependencies:
··· 104 clsx: 105 specifier: ^2.1.1 106 version: 2.1.1 107 + dompurify: 108 + specifier: ^3.3.1 109 + version: 3.3.1 110 gsap: 111 specifier: ^3.14.2 112 version: 3.14.2 ··· 311 optional: true 312 313 '@cloudflare/workerd-darwin-64@1.20260120.0': 314 + resolution: {integrity: sha512-JLHx3p5dpwz4wjVSis45YNReftttnI3ndhdMh5BUbbpdreN/g0jgxNt5Qp9tDFqEKl++N63qv+hxJiIIvSLR+Q==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260120.0.tgz} 315 engines: {node: '>=16'} 316 cpu: [x64] 317 os: [darwin] 318 319 '@cloudflare/workerd-darwin-arm64@1.20260120.0': 320 + resolution: {integrity: sha512-1Md2tCRhZjwajsZNOiBeOVGiS3zbpLPzUDjHr4+XGTXWOA6FzzwScJwQZLa0Doc28Cp4Nr1n7xGL0Dwiz1XuOA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260120.0.tgz} 321 engines: {node: '>=16'} 322 cpu: [arm64] 323 os: [darwin] 324 325 '@cloudflare/workerd-linux-64@1.20260120.0': 326 + resolution: {integrity: sha512-O0mIfJfvU7F8N5siCoRDaVDuI12wkz2xlG4zK6/Ct7U9c9FiE0ViXNFWXFQm5PPj+qbkNRyhjUwhP+GCKTk5EQ==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260120.0.tgz} 327 engines: {node: '>=16'} 328 cpu: [x64] 329 os: [linux] 330 331 '@cloudflare/workerd-linux-arm64@1.20260120.0': 332 + resolution: {integrity: sha512-aRHO/7bjxVpjZEmVVcpmhbzpN6ITbFCxuLLZSW0H9O0C0w40cDCClWSi19T87Ax/PQcYjFNT22pTewKsupkckA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260120.0.tgz} 333 engines: {node: '>=16'} 334 cpu: [arm64] 335 os: [linux] 336 337 '@cloudflare/workerd-windows-64@1.20260120.0': 338 + resolution: {integrity: sha512-ASZIz1E8sqZQqQCgcfY1PJbBpUDrxPt8NZ+lqNil0qxnO4qX38hbCsdDF2/TDAuq0Txh7nu8ztgTelfNDlb4EA==, tarball: https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260120.0.tgz} 339 engines: {node: '>=16'} 340 cpu: [x64] 341 os: [win32] ··· 351 resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} 352 353 '@emnapi/runtime@1.8.1': 354 + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz} 355 356 '@esbuild/aix-ppc64@0.27.0': 357 + resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz} 358 engines: {node: '>=18'} 359 cpu: [ppc64] 360 os: [aix] 361 362 '@esbuild/aix-ppc64@0.27.2': 363 + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz} 364 engines: {node: '>=18'} 365 cpu: [ppc64] 366 os: [aix] 367 368 '@esbuild/android-arm64@0.27.0': 369 + resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz} 370 engines: {node: '>=18'} 371 cpu: [arm64] 372 os: [android] 373 374 '@esbuild/android-arm64@0.27.2': 375 + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz} 376 engines: {node: '>=18'} 377 cpu: [arm64] 378 os: [android] 379 380 '@esbuild/android-arm@0.27.0': 381 + resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz} 382 engines: {node: '>=18'} 383 cpu: [arm] 384 os: [android] 385 386 '@esbuild/android-arm@0.27.2': 387 + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz} 388 engines: {node: '>=18'} 389 cpu: [arm] 390 os: [android] 391 392 '@esbuild/android-x64@0.27.0': 393 + resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz} 394 engines: {node: '>=18'} 395 cpu: [x64] 396 os: [android] 397 398 '@esbuild/android-x64@0.27.2': 399 + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz} 400 engines: {node: '>=18'} 401 cpu: [x64] 402 os: [android] 403 404 '@esbuild/darwin-arm64@0.27.0': 405 + resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz} 406 engines: {node: '>=18'} 407 cpu: [arm64] 408 os: [darwin] 409 410 '@esbuild/darwin-arm64@0.27.2': 411 + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz} 412 engines: {node: '>=18'} 413 cpu: [arm64] 414 os: [darwin] 415 416 '@esbuild/darwin-x64@0.27.0': 417 + resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz} 418 engines: {node: '>=18'} 419 cpu: [x64] 420 os: [darwin] 421 422 '@esbuild/darwin-x64@0.27.2': 423 + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz} 424 engines: {node: '>=18'} 425 cpu: [x64] 426 os: [darwin] 427 428 '@esbuild/freebsd-arm64@0.27.0': 429 + resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz} 430 engines: {node: '>=18'} 431 cpu: [arm64] 432 os: [freebsd] 433 434 '@esbuild/freebsd-arm64@0.27.2': 435 + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz} 436 engines: {node: '>=18'} 437 cpu: [arm64] 438 os: [freebsd] 439 440 '@esbuild/freebsd-x64@0.27.0': 441 + resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz} 442 engines: {node: '>=18'} 443 cpu: [x64] 444 os: [freebsd] 445 446 '@esbuild/freebsd-x64@0.27.2': 447 + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz} 448 engines: {node: '>=18'} 449 cpu: [x64] 450 os: [freebsd] 451 452 '@esbuild/linux-arm64@0.27.0': 453 + resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz} 454 engines: {node: '>=18'} 455 cpu: [arm64] 456 os: [linux] 457 458 '@esbuild/linux-arm64@0.27.2': 459 + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz} 460 engines: {node: '>=18'} 461 cpu: [arm64] 462 os: [linux] 463 464 '@esbuild/linux-arm@0.27.0': 465 + resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz} 466 engines: {node: '>=18'} 467 cpu: [arm] 468 os: [linux] 469 470 '@esbuild/linux-arm@0.27.2': 471 + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz} 472 engines: {node: '>=18'} 473 cpu: [arm] 474 os: [linux] 475 476 '@esbuild/linux-ia32@0.27.0': 477 + resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz} 478 engines: {node: '>=18'} 479 cpu: [ia32] 480 os: [linux] 481 482 '@esbuild/linux-ia32@0.27.2': 483 + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz} 484 engines: {node: '>=18'} 485 cpu: [ia32] 486 os: [linux] 487 488 '@esbuild/linux-loong64@0.27.0': 489 + resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz} 490 engines: {node: '>=18'} 491 cpu: [loong64] 492 os: [linux] 493 494 '@esbuild/linux-loong64@0.27.2': 495 + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz} 496 engines: {node: '>=18'} 497 cpu: [loong64] 498 os: [linux] 499 500 '@esbuild/linux-mips64el@0.27.0': 501 + resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz} 502 engines: {node: '>=18'} 503 cpu: [mips64el] 504 os: [linux] 505 506 '@esbuild/linux-mips64el@0.27.2': 507 + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz} 508 engines: {node: '>=18'} 509 cpu: [mips64el] 510 os: [linux] 511 512 '@esbuild/linux-ppc64@0.27.0': 513 + resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz} 514 engines: {node: '>=18'} 515 cpu: [ppc64] 516 os: [linux] 517 518 '@esbuild/linux-ppc64@0.27.2': 519 + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz} 520 engines: {node: '>=18'} 521 cpu: [ppc64] 522 os: [linux] 523 524 '@esbuild/linux-riscv64@0.27.0': 525 + resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz} 526 engines: {node: '>=18'} 527 cpu: [riscv64] 528 os: [linux] 529 530 '@esbuild/linux-riscv64@0.27.2': 531 + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz} 532 engines: {node: '>=18'} 533 cpu: [riscv64] 534 os: [linux] 535 536 '@esbuild/linux-s390x@0.27.0': 537 + resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz} 538 engines: {node: '>=18'} 539 cpu: [s390x] 540 os: [linux] 541 542 '@esbuild/linux-s390x@0.27.2': 543 + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz} 544 engines: {node: '>=18'} 545 cpu: [s390x] 546 os: [linux] 547 548 '@esbuild/linux-x64@0.27.0': 549 + resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz} 550 engines: {node: '>=18'} 551 cpu: [x64] 552 os: [linux] 553 554 '@esbuild/linux-x64@0.27.2': 555 + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz} 556 engines: {node: '>=18'} 557 cpu: [x64] 558 os: [linux] 559 560 '@esbuild/netbsd-arm64@0.27.0': 561 + resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz} 562 engines: {node: '>=18'} 563 cpu: [arm64] 564 os: [netbsd] 565 566 '@esbuild/netbsd-arm64@0.27.2': 567 + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz} 568 engines: {node: '>=18'} 569 cpu: [arm64] 570 os: [netbsd] 571 572 '@esbuild/netbsd-x64@0.27.0': 573 + resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz} 574 engines: {node: '>=18'} 575 cpu: [x64] 576 os: [netbsd] 577 578 '@esbuild/netbsd-x64@0.27.2': 579 + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz} 580 engines: {node: '>=18'} 581 cpu: [x64] 582 os: [netbsd] 583 584 '@esbuild/openbsd-arm64@0.27.0': 585 + resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz} 586 engines: {node: '>=18'} 587 cpu: [arm64] 588 os: [openbsd] 589 590 '@esbuild/openbsd-arm64@0.27.2': 591 + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz} 592 engines: {node: '>=18'} 593 cpu: [arm64] 594 os: [openbsd] 595 596 '@esbuild/openbsd-x64@0.27.0': 597 + resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz} 598 engines: {node: '>=18'} 599 cpu: [x64] 600 os: [openbsd] 601 602 '@esbuild/openbsd-x64@0.27.2': 603 + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz} 604 engines: {node: '>=18'} 605 cpu: [x64] 606 os: [openbsd] 607 608 '@esbuild/openharmony-arm64@0.27.0': 609 + resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz} 610 engines: {node: '>=18'} 611 cpu: [arm64] 612 os: [openharmony] 613 614 '@esbuild/openharmony-arm64@0.27.2': 615 + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz} 616 engines: {node: '>=18'} 617 cpu: [arm64] 618 os: [openharmony] 619 620 '@esbuild/sunos-x64@0.27.0': 621 + resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz} 622 engines: {node: '>=18'} 623 cpu: [x64] 624 os: [sunos] 625 626 '@esbuild/sunos-x64@0.27.2': 627 + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz} 628 engines: {node: '>=18'} 629 cpu: [x64] 630 os: [sunos] 631 632 '@esbuild/win32-arm64@0.27.0': 633 + resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz} 634 engines: {node: '>=18'} 635 cpu: [arm64] 636 os: [win32] 637 638 '@esbuild/win32-arm64@0.27.2': 639 + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz} 640 engines: {node: '>=18'} 641 cpu: [arm64] 642 os: [win32] 643 644 '@esbuild/win32-ia32@0.27.0': 645 + resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz} 646 engines: {node: '>=18'} 647 cpu: [ia32] 648 os: [win32] 649 650 '@esbuild/win32-ia32@0.27.2': 651 + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz} 652 engines: {node: '>=18'} 653 cpu: [ia32] 654 os: [win32] 655 656 '@esbuild/win32-x64@0.27.0': 657 + resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz} 658 engines: {node: '>=18'} 659 cpu: [x64] 660 os: [win32] 661 662 '@esbuild/win32-x64@0.27.2': 663 + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz} 664 engines: {node: '>=18'} 665 cpu: [x64] 666 os: [win32] ··· 787 engines: {node: '>=18'} 788 789 '@img/sharp-darwin-arm64@0.34.5': 790 + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, tarball: https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz} 791 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 792 cpu: [arm64] 793 os: [darwin] 794 795 '@img/sharp-darwin-x64@0.34.5': 796 + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, tarball: https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz} 797 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 798 cpu: [x64] 799 os: [darwin] 800 801 '@img/sharp-libvips-darwin-arm64@1.2.4': 802 + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz} 803 cpu: [arm64] 804 os: [darwin] 805 806 '@img/sharp-libvips-darwin-x64@1.2.4': 807 + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz} 808 cpu: [x64] 809 os: [darwin] 810 811 '@img/sharp-libvips-linux-arm64@1.2.4': 812 + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz} 813 cpu: [arm64] 814 os: [linux] 815 816 '@img/sharp-libvips-linux-arm@1.2.4': 817 + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz} 818 cpu: [arm] 819 os: [linux] 820 821 '@img/sharp-libvips-linux-ppc64@1.2.4': 822 + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz} 823 cpu: [ppc64] 824 os: [linux] 825 826 '@img/sharp-libvips-linux-riscv64@1.2.4': 827 + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz} 828 cpu: [riscv64] 829 os: [linux] 830 831 '@img/sharp-libvips-linux-s390x@1.2.4': 832 + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz} 833 cpu: [s390x] 834 os: [linux] 835 836 '@img/sharp-libvips-linux-x64@1.2.4': 837 + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz} 838 cpu: [x64] 839 os: [linux] 840 841 '@img/sharp-libvips-linuxmusl-arm64@1.2.4': 842 + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz} 843 cpu: [arm64] 844 os: [linux] 845 846 '@img/sharp-libvips-linuxmusl-x64@1.2.4': 847 + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz} 848 cpu: [x64] 849 os: [linux] 850 851 '@img/sharp-linux-arm64@0.34.5': 852 + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz} 853 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 854 cpu: [arm64] 855 os: [linux] 856 857 '@img/sharp-linux-arm@0.34.5': 858 + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz} 859 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 860 cpu: [arm] 861 os: [linux] 862 863 '@img/sharp-linux-ppc64@0.34.5': 864 + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, tarball: https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz} 865 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 866 cpu: [ppc64] 867 os: [linux] 868 869 '@img/sharp-linux-riscv64@0.34.5': 870 + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, tarball: https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz} 871 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 872 cpu: [riscv64] 873 os: [linux] 874 875 '@img/sharp-linux-s390x@0.34.5': 876 + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, tarball: https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz} 877 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 878 cpu: [s390x] 879 os: [linux] 880 881 '@img/sharp-linux-x64@0.34.5': 882 + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, tarball: https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz} 883 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 884 cpu: [x64] 885 os: [linux] 886 887 '@img/sharp-linuxmusl-arm64@0.34.5': 888 + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz} 889 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 890 cpu: [arm64] 891 os: [linux] 892 893 '@img/sharp-linuxmusl-x64@0.34.5': 894 + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz} 895 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 896 cpu: [x64] 897 os: [linux] 898 899 '@img/sharp-wasm32@0.34.5': 900 + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, tarball: https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz} 901 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 902 cpu: [wasm32] 903 904 '@img/sharp-win32-arm64@0.34.5': 905 + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, tarball: https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz} 906 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 907 cpu: [arm64] 908 os: [win32] 909 910 '@img/sharp-win32-ia32@0.34.5': 911 + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, tarball: https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz} 912 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 913 cpu: [ia32] 914 os: [win32] 915 916 '@img/sharp-win32-x64@0.34.5': 917 + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, tarball: https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz} 918 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 919 cpu: [x64] 920 os: [win32] ··· 992 engines: {node: '>= 10'} 993 994 '@rollup/rollup-android-arm-eabi@4.56.0': 995 + resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz} 996 cpu: [arm] 997 os: [android] 998 999 '@rollup/rollup-android-arm64@4.56.0': 1000 + resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz} 1001 cpu: [arm64] 1002 os: [android] 1003 1004 '@rollup/rollup-darwin-arm64@4.56.0': 1005 + resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz} 1006 cpu: [arm64] 1007 os: [darwin] 1008 1009 '@rollup/rollup-darwin-x64@4.56.0': 1010 + resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz} 1011 cpu: [x64] 1012 os: [darwin] 1013 1014 '@rollup/rollup-freebsd-arm64@4.56.0': 1015 + resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz} 1016 cpu: [arm64] 1017 os: [freebsd] 1018 1019 '@rollup/rollup-freebsd-x64@4.56.0': 1020 + resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz} 1021 cpu: [x64] 1022 os: [freebsd] 1023 1024 '@rollup/rollup-linux-arm-gnueabihf@4.56.0': 1025 + resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz} 1026 cpu: [arm] 1027 os: [linux] 1028 1029 '@rollup/rollup-linux-arm-musleabihf@4.56.0': 1030 + resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz} 1031 cpu: [arm] 1032 os: [linux] 1033 1034 '@rollup/rollup-linux-arm64-gnu@4.56.0': 1035 + resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz} 1036 cpu: [arm64] 1037 os: [linux] 1038 1039 '@rollup/rollup-linux-arm64-musl@4.56.0': 1040 + resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz} 1041 cpu: [arm64] 1042 os: [linux] 1043 1044 '@rollup/rollup-linux-loong64-gnu@4.56.0': 1045 + resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz} 1046 cpu: [loong64] 1047 os: [linux] 1048 1049 '@rollup/rollup-linux-loong64-musl@4.56.0': 1050 + resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz} 1051 cpu: [loong64] 1052 os: [linux] 1053 1054 '@rollup/rollup-linux-ppc64-gnu@4.56.0': 1055 + resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz} 1056 cpu: [ppc64] 1057 os: [linux] 1058 1059 '@rollup/rollup-linux-ppc64-musl@4.56.0': 1060 + resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz} 1061 cpu: [ppc64] 1062 os: [linux] 1063 1064 '@rollup/rollup-linux-riscv64-gnu@4.56.0': 1065 + resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz} 1066 cpu: [riscv64] 1067 os: [linux] 1068 1069 '@rollup/rollup-linux-riscv64-musl@4.56.0': 1070 + resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz} 1071 cpu: [riscv64] 1072 os: [linux] 1073 1074 '@rollup/rollup-linux-s390x-gnu@4.56.0': 1075 + resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz} 1076 cpu: [s390x] 1077 os: [linux] 1078 1079 '@rollup/rollup-linux-x64-gnu@4.56.0': 1080 + resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz} 1081 cpu: [x64] 1082 os: [linux] 1083 1084 '@rollup/rollup-linux-x64-musl@4.56.0': 1085 + resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz} 1086 cpu: [x64] 1087 os: [linux] 1088 1089 '@rollup/rollup-openbsd-x64@4.56.0': 1090 + resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==, tarball: https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz} 1091 cpu: [x64] 1092 os: [openbsd] 1093 1094 '@rollup/rollup-openharmony-arm64@4.56.0': 1095 + resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==, tarball: https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz} 1096 cpu: [arm64] 1097 os: [openharmony] 1098 1099 '@rollup/rollup-win32-arm64-msvc@4.56.0': 1100 + resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz} 1101 cpu: [arm64] 1102 os: [win32] 1103 1104 '@rollup/rollup-win32-ia32-msvc@4.56.0': 1105 + resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz} 1106 cpu: [ia32] 1107 os: [win32] 1108 1109 '@rollup/rollup-win32-x64-gnu@4.56.0': 1110 + resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz} 1111 cpu: [x64] 1112 os: [win32] 1113 1114 '@rollup/rollup-win32-x64-msvc@4.56.0': 1115 + resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz} 1116 cpu: [x64] 1117 os: [win32] 1118 ··· 1185 resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} 1186 1187 '@tailwindcss/oxide-android-arm64@4.1.18': 1188 + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz} 1189 engines: {node: '>= 10'} 1190 cpu: [arm64] 1191 os: [android] 1192 1193 '@tailwindcss/oxide-darwin-arm64@4.1.18': 1194 + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz} 1195 engines: {node: '>= 10'} 1196 cpu: [arm64] 1197 os: [darwin] 1198 1199 '@tailwindcss/oxide-darwin-x64@4.1.18': 1200 + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz} 1201 engines: {node: '>= 10'} 1202 cpu: [x64] 1203 os: [darwin] 1204 1205 '@tailwindcss/oxide-freebsd-x64@4.1.18': 1206 + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz} 1207 engines: {node: '>= 10'} 1208 cpu: [x64] 1209 os: [freebsd] 1210 1211 '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 1212 + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz} 1213 engines: {node: '>= 10'} 1214 cpu: [arm] 1215 os: [linux] 1216 1217 '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 1218 + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz} 1219 engines: {node: '>= 10'} 1220 cpu: [arm64] 1221 os: [linux] 1222 1223 '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 1224 + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz} 1225 engines: {node: '>= 10'} 1226 cpu: [arm64] 1227 os: [linux] 1228 1229 '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 1230 + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz} 1231 engines: {node: '>= 10'} 1232 cpu: [x64] 1233 os: [linux] 1234 1235 '@tailwindcss/oxide-linux-x64-musl@4.1.18': 1236 + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz} 1237 engines: {node: '>= 10'} 1238 cpu: [x64] 1239 os: [linux] 1240 1241 '@tailwindcss/oxide-wasm32-wasi@4.1.18': 1242 + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz} 1243 engines: {node: '>=14.0.0'} 1244 cpu: [wasm32] 1245 bundledDependencies: ··· 1251 - tslib 1252 1253 '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 1254 + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz} 1255 engines: {node: '>= 10'} 1256 cpu: [arm64] 1257 os: [win32] 1258 1259 '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 1260 + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz} 1261 engines: {node: '>= 10'} 1262 cpu: [x64] 1263 os: [win32] ··· 1277 vite: ^5.2.0 || ^6 || ^7 1278 1279 '@takumi-rs/core-darwin-arm64@0.55.4': 1280 + resolution: {integrity: sha512-LH/X/ul19DActLGcBpXnxH3OBEq8qOgPD56hNHAJMbnCRxAO6TDaIh2U7WqPVliSkFk3jZfikbD21SIEpZrp8A==, tarball: https://registry.npmjs.org/@takumi-rs/core-darwin-arm64/-/core-darwin-arm64-0.55.4.tgz} 1281 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1282 cpu: [arm64] 1283 os: [darwin] 1284 1285 '@takumi-rs/core-darwin-x64@0.55.4': 1286 + resolution: {integrity: sha512-UW7ovR/D1Qp8n8bJOo6JLqZZUDFWWtGRXEZZUZhzUeMSzJ4k3C6ef/DEc75bUTGeBKqCeypMPcvtkQAjcVwwhw==, tarball: https://registry.npmjs.org/@takumi-rs/core-darwin-x64/-/core-darwin-x64-0.55.4.tgz} 1287 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1288 cpu: [x64] 1289 os: [darwin] 1290 1291 '@takumi-rs/core-linux-arm64-gnu@0.55.4': 1292 + resolution: {integrity: sha512-y1d5yuPapKlmt77TpE+XrtULj7LZ51leBqWSg6qMNKxhpvRqmjI/SYjHmk5YvshnrTkdKmRQiXJiiN5EzOhbmA==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-arm64-gnu/-/core-linux-arm64-gnu-0.55.4.tgz} 1293 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1294 cpu: [arm64] 1295 os: [linux] 1296 1297 '@takumi-rs/core-linux-arm64-musl@0.55.4': 1298 + resolution: {integrity: sha512-VRbQqbMeoPlrMmaqPwn30Sw82LYya+o4ru9dqV/7BKExozWj/pX9ahexlJdHsZ6wqmsr+ZxexZivK1mPum9ang==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-arm64-musl/-/core-linux-arm64-musl-0.55.4.tgz} 1299 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1300 cpu: [arm64] 1301 os: [linux] 1302 1303 '@takumi-rs/core-linux-x64-gnu@0.55.4': 1304 + resolution: {integrity: sha512-ecCUtNgOe6mCWKf+SE7cbJXWd6D6TQoCnKZAJAGrJkJLAdy/gBhCFhOyPz8M7q/4uWHUATentqi35KAp+jxBiQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-x64-gnu/-/core-linux-x64-gnu-0.55.4.tgz} 1305 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1306 cpu: [x64] 1307 os: [linux] 1308 1309 '@takumi-rs/core-linux-x64-musl@0.55.4': 1310 + resolution: {integrity: sha512-YBM2zPrGE/1sfHoFZvOsCvCuK9PfaxzePN/GnnlaAvpvgeRHiAU4PJkLGDpjMFfsWUAEdjly/b0HSAjVQ7NL6Q==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-x64-musl/-/core-linux-x64-musl-0.55.4.tgz} 1311 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1312 cpu: [x64] 1313 os: [linux] 1314 1315 '@takumi-rs/core-win32-arm64-msvc@0.55.4': 1316 + resolution: {integrity: sha512-VcgLCWnmyWuhwLv0Tpob8Hv5IFPreFVykoHruPGwXDVVoUcCo+lQ8oCO5EYTB8B/tBAXl2S0xUL0nMDbyLzMxQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-win32-arm64-msvc/-/core-win32-arm64-msvc-0.55.4.tgz} 1317 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1318 cpu: [arm64] 1319 os: [win32] 1320 1321 '@takumi-rs/core-win32-x64-msvc@0.55.4': 1322 + resolution: {integrity: sha512-ta9g1gUybS2V4mHaccJHcMeBb+w1P6pgZuqHzLoQzBIEK9a/KncHPfnR48cz4sGfg4atorfSa6UBffa2FqijyQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-win32-x64-msvc/-/core-win32-x64-msvc-0.55.4.tgz} 1323 engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1324 cpu: [x64] 1325 os: [win32] ··· 1540 1541 '@types/three@0.176.0': 1542 resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==} 1543 + 1544 + '@types/trusted-types@2.0.7': 1545 + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, tarball: https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz} 1546 1547 '@types/turndown@5.0.6': 1548 resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==} ··· 1837 resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1838 engines: {node: '>= 4'} 1839 1840 + dompurify@3.3.1: 1841 + resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==, tarball: https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz} 1842 + 1843 domutils@3.2.2: 1844 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 1845 ··· 2001 resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 2002 2003 fsevents@2.3.3: 2004 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} 2005 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2006 os: [darwin] 2007 ··· 2137 engines: {node: '>= 0.8.0'} 2138 2139 lightningcss-android-arm64@1.30.2: 2140 + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==, tarball: https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz} 2141 engines: {node: '>= 12.0.0'} 2142 cpu: [arm64] 2143 os: [android] 2144 2145 lightningcss-darwin-arm64@1.30.2: 2146 + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==, tarball: https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz} 2147 engines: {node: '>= 12.0.0'} 2148 cpu: [arm64] 2149 os: [darwin] 2150 2151 lightningcss-darwin-x64@1.30.2: 2152 + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==, tarball: https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz} 2153 engines: {node: '>= 12.0.0'} 2154 cpu: [x64] 2155 os: [darwin] 2156 2157 lightningcss-freebsd-x64@1.30.2: 2158 + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==, tarball: https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz} 2159 engines: {node: '>= 12.0.0'} 2160 cpu: [x64] 2161 os: [freebsd] 2162 2163 lightningcss-linux-arm-gnueabihf@1.30.2: 2164 + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==, tarball: https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz} 2165 engines: {node: '>= 12.0.0'} 2166 cpu: [arm] 2167 os: [linux] 2168 2169 lightningcss-linux-arm64-gnu@1.30.2: 2170 + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz} 2171 engines: {node: '>= 12.0.0'} 2172 cpu: [arm64] 2173 os: [linux] 2174 2175 lightningcss-linux-arm64-musl@1.30.2: 2176 + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz} 2177 engines: {node: '>= 12.0.0'} 2178 cpu: [arm64] 2179 os: [linux] 2180 2181 lightningcss-linux-x64-gnu@1.30.2: 2182 + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz} 2183 engines: {node: '>= 12.0.0'} 2184 cpu: [x64] 2185 os: [linux] 2186 2187 lightningcss-linux-x64-musl@1.30.2: 2188 + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz} 2189 engines: {node: '>= 12.0.0'} 2190 cpu: [x64] 2191 os: [linux] 2192 2193 lightningcss-win32-arm64-msvc@1.30.2: 2194 + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==, tarball: https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz} 2195 engines: {node: '>= 12.0.0'} 2196 cpu: [arm64] 2197 os: [win32] 2198 2199 lightningcss-win32-x64-msvc@1.30.2: 2200 + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==, tarball: https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz} 2201 engines: {node: '>= 12.0.0'} 2202 cpu: [x64] 2203 os: [win32] ··· 4203 fflate: 0.8.2 4204 meshoptimizer: 0.18.1 4205 4206 + '@types/trusted-types@2.0.7': 4207 + optional: true 4208 + 4209 '@types/turndown@5.0.6': {} 4210 4211 '@types/webxr@0.5.24': {} ··· 4524 domhandler@5.0.3: 4525 dependencies: 4526 domelementtype: 2.3.0 4527 + 4528 + dompurify@3.3.1: 4529 + optionalDependencies: 4530 + '@types/trusted-types': 2.0.7 4531 4532 domutils@3.2.2: 4533 dependencies:
+2 -1
src/lib/atproto/settings.ts
··· 1 import { dev } from '$app/environment'; 2 3 - export const SITE = 'https://blento.app'; 4 5 type Permissions = { 6 collections: readonly string[];
··· 1 import { dev } from '$app/environment'; 2 + import { env } from '$env/dynamic/public'; 3 4 + export const SITE = env.PUBLIC_DOMAIN; 5 6 type Permissions = { 7 collections: readonly string[];
+53
src/lib/cards/ButtonCard/ButtonCard.svelte
···
··· 1 + <script lang="ts"> 2 + import { goto } from '$app/navigation'; 3 + import { user } from '$lib/atproto'; 4 + import { getHandleOrDid } from '$lib/atproto/methods'; 5 + import { loginModalState } from '$lib/atproto/UI/LoginModal.svelte'; 6 + import { cn } from '@foxui/core'; 7 + import type { ContentComponentProps } from '../types'; 8 + 9 + let { item }: ContentComponentProps = $props(); 10 + </script> 11 + 12 + {#snippet content()} 13 + <span 14 + class={cn( 15 + 'text-base-950 dark:text-base-50 line-clamp-1 inline-flex items-center justify-center px-4 text-2xl font-semibold', 16 + item.color === 'transparent' 17 + ? 'bg-accent-400 dark:bg-accent-500 hover:bg-accent-400 dark:text-base-950 rounded-2xl px-5 py-2.5 text-xl transition-colors duration-100' 18 + : '' 19 + )} 20 + > 21 + {item.cardData.text || 'Click me'} 22 + </span> 23 + {/snippet} 24 + 25 + {#if item.cardData.href === '#login'} 26 + <button 27 + onclick={() => { 28 + if (user.isLoggedIn && user.profile) { 29 + goto('/' + getHandleOrDid(user.profile) + '/edit', {}); 30 + } else { 31 + loginModalState.show(); 32 + } 33 + }} 34 + class={[ 35 + 'flex h-full w-full cursor-pointer flex-col items-center justify-center transition-colors duration-100', 36 + item.color === 'transparent' ? 'hover:bg-transparent' : 'hover:bg-accent-100/20' 37 + ]} 38 + > 39 + {@render content()} 40 + </button> 41 + {:else} 42 + <a 43 + href={item.cardData.href || '#'} 44 + target="_blank" 45 + rel="noopener noreferrer" 46 + class={[ 47 + 'flex h-full w-full flex-col items-center justify-center transition-colors duration-100', 48 + item.color === 'transparent' ? 'hover:bg-transparent' : 'hover:bg-accent-100/20' 49 + ]} 50 + > 51 + {@render content()} 52 + </a> 53 + {/if}
+34
src/lib/cards/ButtonCard/ButtonCardSettings.svelte
···
··· 1 + <script lang="ts"> 2 + import type { Item } from '$lib/types'; 3 + import type { SettingsComponentProps } from '../types'; 4 + import { Input, Label } from '@foxui/core'; 5 + 6 + let { item = $bindable<Item>(), onclose }: SettingsComponentProps = $props(); 7 + 8 + function confirmUrl() { 9 + let href = item.cardData.href?.trim() || ''; 10 + if (href && !/^https?:\/\//i.test(href) && !href.startsWith('#')) { 11 + href = 'https://' + href; 12 + } 13 + item.cardData.href = href; 14 + onclose(); 15 + } 16 + </script> 17 + 18 + <div class="flex flex-col gap-3"> 19 + <div class="flex flex-col gap-1"> 20 + <Label for="button-href" class="text-sm">Link</Label> 21 + <Input 22 + id="button-href" 23 + bind:value={item.cardData.href} 24 + placeholder="youtube.com" 25 + class="mt-2 text-sm" 26 + onkeydown={(event) => { 27 + if (event.code === 'Enter') { 28 + event.preventDefault(); 29 + confirmUrl(); 30 + } 31 + }} 32 + /> 33 + </div> 34 + </div>
+23
src/lib/cards/ButtonCard/EditingButtonCard.svelte
···
··· 1 + <script lang="ts"> 2 + import type { ContentComponentProps } from '../types'; 3 + import PlainTextEditor from '$lib/components/PlainTextEditor.svelte'; 4 + import { cn } from '@foxui/core'; 5 + 6 + let { item = $bindable() }: ContentComponentProps = $props(); 7 + </script> 8 + 9 + <div 10 + class="text-base-950 dark:text-base-50 flex h-full w-full flex-col items-center justify-center gap-2 px-4" 11 + > 12 + <PlainTextEditor 13 + key="text" 14 + bind:contentDict={item.cardData} 15 + placeholder="Button text" 16 + class={cn( 17 + 'line-clamp-1 text-center text-2xl font-semibold', 18 + item.color === 'transparent' 19 + ? 'bg-accent-400 dark:bg-accent-500 hover:bg-accent-400 dark:text-base-950 rounded-2xl px-5 py-2.5 text-xl transition-colors duration-100' 20 + : '' 21 + )} 22 + /> 23 + </div>
+31
src/lib/cards/ButtonCard/index.ts
···
··· 1 + import type { CardDefinition } from '../types'; 2 + import ButtonCard from './ButtonCard.svelte'; 3 + import EditingButtonCard from './EditingButtonCard.svelte'; 4 + import ButtonCardSettings from './ButtonCardSettings.svelte'; 5 + 6 + export const ButtonCardDefinition: CardDefinition = { 7 + type: 'button', 8 + contentComponent: ButtonCard, 9 + editingContentComponent: EditingButtonCard, 10 + settingsComponent: ButtonCardSettings, 11 + sidebarButtonText: 'Button', 12 + 13 + createNew: (card) => { 14 + card.cardData = { 15 + text: 'Click me' 16 + }; 17 + card.w = 2; 18 + card.h = 1; 19 + card.mobileW = 4; 20 + card.mobileH = 2; 21 + }, 22 + 23 + defaultColor: 'transparent', 24 + allowSetColor: true, 25 + canHaveLabel: false, 26 + 27 + minW: 2, 28 + minH: 1, 29 + maxW: 8, 30 + maxH: 4 31 + };
+8 -11
src/lib/cards/StatusphereCard/EditStatusphereCard.svelte
··· 26 } 27 }); 28 29 let showPopover = $state(false); 30 </script> 31 32 <div class="flex h-full w-full items-center justify-center p-4"> 33 <PopoverEmojiPicker 34 bind:open={showPopover} 35 - onpicked={(emoji) => { 36 - record ??= { 37 - value: {} 38 - }; 39 - 40 - record.value.status = emoji.unicode; 41 - 42 item.cardData.hasUpdate = true; 43 - item.cardData.emoji = emoji.unicode; 44 45 showPopover = false; 46 }} 47 > 48 {#snippet child({ props })} 49 - {@const animated = emojiToNotoAnimatedWebp(record?.value?.status)} 50 51 <button {...props} class="z-20 h-full max-h-40 w-full max-w-40"> 52 {#if animated} ··· 55 alt="" 56 class="hover:bg-base-500/10 h-full max-h-40 w-full max-w-40 rounded-2xl object-contain" 57 /> 58 - {:else if record?.value?.status} 59 <div class="text-9xl"> 60 - {record.value.status} 61 </div> 62 {:else} 63 <div>Click here to set a status</div>
··· 26 } 27 }); 28 29 + // Use card-specific emoji if set, otherwise fall back to PDS data 30 + let emoji = $derived(item.cardData?.emoji ?? record?.value?.status); 31 + 32 let showPopover = $state(false); 33 </script> 34 35 <div class="flex h-full w-full items-center justify-center p-4"> 36 <PopoverEmojiPicker 37 bind:open={showPopover} 38 + onpicked={(picked) => { 39 item.cardData.hasUpdate = true; 40 + item.cardData.emoji = picked.unicode; 41 42 showPopover = false; 43 }} 44 > 45 {#snippet child({ props })} 46 + {@const animated = emojiToNotoAnimatedWebp(emoji)} 47 48 <button {...props} class="z-20 h-full max-h-40 w-full max-w-40"> 49 {#if animated} ··· 52 alt="" 53 class="hover:bg-base-500/10 h-full max-h-40 w-full max-w-40 rounded-2xl object-contain" 54 /> 55 + {:else if emoji} 56 <div class="text-9xl"> 57 + {emoji} 58 </div> 59 {:else} 60 <div>Click here to set a status</div>
+5 -3
src/lib/cards/StatusphereCard/StatusphereCard.svelte
··· 9 // svelte-ignore state_referenced_locally 10 let record = $state(data[item.cardType] as any); 11 12 - let animated = $derived(emojiToNotoAnimatedWebp(record?.value?.status)); 13 </script> 14 15 <div class="flex h-full w-full items-center justify-center p-4"> 16 {#if animated} 17 <img src={animated} alt="" class="h-full max-h-40 w-full object-contain" /> 18 - {:else if record?.value?.status} 19 <div class="text-9xl"> 20 - {record?.value?.status} 21 </div> 22 {:else} 23 No status yet
··· 9 // svelte-ignore state_referenced_locally 10 let record = $state(data[item.cardType] as any); 11 12 + // Use card-specific emoji if set, otherwise fall back to PDS data 13 + let emoji = $derived(item.cardData?.emoji ?? record?.value?.status); 14 + let animated = $derived(emojiToNotoAnimatedWebp(emoji)); 15 </script> 16 17 <div class="flex h-full w-full items-center justify-center p-4"> 18 {#if animated} 19 <img src={animated} alt="" class="h-full max-h-40 w-full object-contain" /> 20 + {:else if emoji} 21 <div class="text-9xl"> 22 + {emoji} 23 </div> 24 {:else} 25 No status yet
+1 -1
src/lib/cards/StatusphereCard/index.ts
··· 36 } 37 }); 38 delete item.cardData.hasUpdate; 39 - delete item.cardData.emoji; 40 } 41 42 return item;
··· 36 } 37 }); 38 delete item.cardData.hasUpdate; 39 + // Keep item.cardData.emoji so each card can have its own status 40 } 41 42 return item;
+7 -2
src/lib/cards/TextCard/TextCard.svelte
··· 1 <script lang="ts"> 2 import { marked } from 'marked'; 3 import type { ContentComponentProps } from '../types'; 4 import { textAlignClasses, textSizeClasses, verticalAlignClasses } from '.'; 5 import { cn } from '@foxui/core'; ··· 8 9 const renderer = new marked.Renderer(); 10 renderer.link = ({ href, title, text }) => 11 - `<a target="_blank" href="${href}" title="${title}">${text}</a>`; 12 </script> 13 14 <div ··· 19 textSizeClasses[(item.cardData.textSize ?? 0) as number] 20 )} 21 > 22 - <span>{@html marked.parse(item.cardData.text ?? '', { renderer })}</span> 23 </div>
··· 1 <script lang="ts"> 2 import { marked } from 'marked'; 3 + import { sanitize } from '$lib/sanitize'; 4 import type { ContentComponentProps } from '../types'; 5 import { textAlignClasses, textSizeClasses, verticalAlignClasses } from '.'; 6 import { cn } from '@foxui/core'; ··· 9 10 const renderer = new marked.Renderer(); 11 renderer.link = ({ href, title, text }) => 12 + `<a target="_blank" href="${href}" title="${title ?? ''}">${text}</a>`; 13 </script> 14 15 <div ··· 20 textSizeClasses[(item.cardData.textSize ?? 0) as number] 21 )} 22 > 23 + <span 24 + >{@html sanitize(marked.parse(item.cardData.text ?? '', { renderer }) as string, { 25 + ADD_ATTR: ['target'] 26 + })}</span 27 + > 28 </div>
+102 -10
src/lib/cards/TimerCard/TimerCard.svelte
··· 62 eventDiff !== null ? Math.floor((eventDiff % (1000 * 60)) / 1000) : 0 63 ); 64 65 - let isEventComplete = $derived(cardData.mode === 'event' && eventDiff === 0); 66 67 // Get timezone display name 68 let timezoneDisplay = $derived.by(() => { ··· 113 114 <!-- Event Countdown Mode --> 115 {:else if cardData.mode === 'event'} 116 - {#if eventDiff !== null && !isEventComplete} 117 <NumberFlowGroup> 118 <div 119 class="text-base-900 dark:text-base-100 accent:text-base-900 flex items-baseline gap-4 text-center @sm:gap-6 @md:gap-8" ··· 121 > 122 {#if eventDays > 0} 123 <div class="flex flex-col items-center"> 124 - <NumberFlow value={eventDays} trend={-1} class="text-4xl font-bold" /> 125 - <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">days</span 126 > 127 </div> 128 {/if} ··· 157 </div> 158 </div> 159 </NumberFlowGroup> 160 - {:else if isEventComplete} 161 - <div 162 - class="text-accent-600 dark:text-accent-400 accent:text-accent-900 text-xl font-bold @xs:text-2xl @sm:text-3xl @md:text-4xl" 163 - > 164 - Event Started! 165 - </div> 166 {:else} 167 <div class="text-base-500 text-sm">Set a target date in settings</div> 168 {/if}
··· 62 eventDiff !== null ? Math.floor((eventDiff % (1000 * 60)) / 1000) : 0 63 ); 64 65 + // Check if event is in the past (elapsed mode) 66 + let isEventPast = $derived.by(() => { 67 + if (cardData.mode !== 'event' || !cardData.targetDate) return false; 68 + const target = new Date(cardData.targetDate); 69 + return now.getTime() > target.getTime(); 70 + }); 71 + 72 + // Elapsed time since past event 73 + let elapsedDiff = $derived.by(() => { 74 + if (!isEventPast || !cardData.targetDate) return null; 75 + const target = new Date(cardData.targetDate); 76 + return now.getTime() - target.getTime(); 77 + }); 78 + 79 + let elapsedYears = $derived( 80 + elapsedDiff !== null ? Math.floor(elapsedDiff / (1000 * 60 * 60 * 24 * 365)) : 0 81 + ); 82 + let elapsedDays = $derived( 83 + elapsedDiff !== null 84 + ? Math.floor((elapsedDiff % (1000 * 60 * 60 * 24 * 365)) / (1000 * 60 * 60 * 24)) 85 + : 0 86 + ); 87 + let elapsedHours = $derived( 88 + elapsedDiff !== null ? Math.floor((elapsedDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) : 0 89 + ); 90 + let elapsedMinutes = $derived( 91 + elapsedDiff !== null ? Math.floor((elapsedDiff % (1000 * 60 * 60)) / (1000 * 60)) : 0 92 + ); 93 + let elapsedSeconds = $derived( 94 + elapsedDiff !== null ? Math.floor((elapsedDiff % (1000 * 60)) / 1000) : 0 95 + ); 96 97 // Get timezone display name 98 let timezoneDisplay = $derived.by(() => { ··· 143 144 <!-- Event Countdown Mode --> 145 {:else if cardData.mode === 'event'} 146 + {#if isEventPast && elapsedDiff !== null} 147 + <!-- Elapsed time since past event --> 148 + <NumberFlowGroup> 149 + <div 150 + class="text-base-900 dark:text-base-100 accent:text-base-900 flex items-baseline gap-4 text-center @sm:gap-6 @md:gap-8" 151 + style="font-variant-numeric: tabular-nums;" 152 + > 153 + {#if elapsedYears > 0} 154 + <div class="flex flex-col items-center"> 155 + <NumberFlow 156 + value={elapsedYears} 157 + trend={1} 158 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 159 + /> 160 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs" 161 + >{elapsedYears === 1 ? 'year' : 'years'}</span 162 + > 163 + </div> 164 + {/if} 165 + {#if elapsedYears > 0 || elapsedDays > 0} 166 + <div class="flex flex-col items-center"> 167 + <NumberFlow 168 + value={elapsedDays} 169 + trend={1} 170 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 171 + /> 172 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs" 173 + >{elapsedDays === 1 ? 'day' : 'days'}</span 174 + > 175 + </div> 176 + {/if} 177 + <div class="flex flex-col items-center"> 178 + <NumberFlow 179 + value={elapsedHours} 180 + trend={1} 181 + format={{ minimumIntegerDigits: 2 }} 182 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 183 + /> 184 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">hrs</span> 185 + </div> 186 + <div class="flex flex-col items-center"> 187 + <NumberFlow 188 + value={elapsedMinutes} 189 + trend={1} 190 + format={{ minimumIntegerDigits: 2 }} 191 + digits={{ 1: { max: 5 } }} 192 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 193 + /> 194 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">min</span> 195 + </div> 196 + <div class="flex flex-col items-center"> 197 + <NumberFlow 198 + value={elapsedSeconds} 199 + trend={1} 200 + format={{ minimumIntegerDigits: 2 }} 201 + digits={{ 1: { max: 5 } }} 202 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 203 + /> 204 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs">sec</span> 205 + </div> 206 + </div> 207 + </NumberFlowGroup> 208 + {:else if eventDiff !== null} 209 + <!-- Countdown to future event --> 210 <NumberFlowGroup> 211 <div 212 class="text-base-900 dark:text-base-100 accent:text-base-900 flex items-baseline gap-4 text-center @sm:gap-6 @md:gap-8" ··· 214 > 215 {#if eventDays > 0} 216 <div class="flex flex-col items-center"> 217 + <NumberFlow 218 + value={eventDays} 219 + trend={-1} 220 + class="text-3xl font-bold @xs:text-4xl @sm:text-5xl @md:text-6xl @lg:text-7xl" 221 + /> 222 + <span class="text-base-500 dark:text-base-400 accent:text-accent-950 text-xs" 223 + >{eventDays === 1 ? 'day' : 'days'}</span 224 > 225 </div> 226 {/if} ··· 255 </div> 256 </div> 257 </NumberFlowGroup> 258 {:else} 259 <div class="text-base-500 text-sm">Set a target date in settings</div> 260 {/if}
+2
src/lib/cards/index.ts
··· 31 import { DrawCardDefinition } from './DrawCard'; 32 import { TimerCardDefinition } from './TimerCard'; 33 import { SpotifyCardDefinition } from './SpotifyCard'; 34 // import { Model3DCardDefinition } from './Model3DCard'; 35 36 export const AllCardDefinitions = [ 37 ImageCardDefinition, 38 VideoCardDefinition, 39 TextCardDefinition,
··· 31 import { DrawCardDefinition } from './DrawCard'; 32 import { TimerCardDefinition } from './TimerCard'; 33 import { SpotifyCardDefinition } from './SpotifyCard'; 34 + import { ButtonCardDefinition } from './ButtonCard'; 35 // import { Model3DCardDefinition } from './Model3DCard'; 36 37 export const AllCardDefinitions = [ 38 + ButtonCardDefinition, 39 ImageCardDefinition, 40 VideoCardDefinition, 41 TextCardDefinition,
+18 -6
src/lib/components/bluesky-post/index.ts
··· 2 import type { PostView } from '@atcute/bluesky/types/app/feed/defs'; 3 import { segmentize, type Facet, type RichtextSegment } from '@atcute/bluesky-richtext-segmenter'; 4 5 function blueskyEmbedTypeToEmbedType(type: string) { 6 switch (type) { 7 case 'app.bsky.embed.external#view': ··· 26 // const reason = data.reason; 27 // const reply = data.reply?.parent; 28 // const replyId = reply?.uri?.split('/').pop(); 29 30 const id = post.uri.split('/').pop(); 31 ··· 87 } as PostEmbed) 88 : undefined, 89 90 - htmlContent: blueskyPostToHTML(post, baseUrl) 91 }; 92 } 93 ··· 110 111 const renderSegment = (segment: RichtextSegment, baseUrl: string) => { 112 const { text, features } = segment; 113 114 if (!features) { 115 - return `<span>${text}</span>`; 116 } 117 118 // segments can have multiple features, use the first one ··· 124 125 switch (feature.$type) { 126 case 'app.bsky.richtext.facet#mention': 127 - return createLink(`${baseUrl}/profile/${feature.did}`, segment.text); 128 case 'app.bsky.richtext.facet#link': 129 - return createLink(feature.uri, segment.text); 130 case 'app.bsky.richtext.facet#tag': 131 - return createLink(`${baseUrl}/hashtag/${feature.tag}`, segment.text); 132 default: 133 - return `<span>${text}</span>`; 134 } 135 }; 136
··· 2 import type { PostView } from '@atcute/bluesky/types/app/feed/defs'; 3 import { segmentize, type Facet, type RichtextSegment } from '@atcute/bluesky-richtext-segmenter'; 4 5 + function escapeHtml(str: string): string { 6 + return str 7 + .replace(/&/g, '&amp;') 8 + .replace(/</g, '&lt;') 9 + .replace(/>/g, '&gt;') 10 + .replace(/"/g, '&quot;') 11 + .replace(/'/g, '&#39;'); 12 + } 13 + 14 function blueskyEmbedTypeToEmbedType(type: string) { 15 switch (type) { 16 case 'app.bsky.embed.external#view': ··· 35 // const reason = data.reason; 36 // const reply = data.reply?.parent; 37 // const replyId = reply?.uri?.split('/').pop(); 38 + console.log(JSON.parse(JSON.stringify(data))); 39 40 const id = post.uri.split('/').pop(); 41 ··· 97 } as PostEmbed) 98 : undefined, 99 100 + htmlContent: blueskyPostToHTML(post, baseUrl), 101 + labels: post.labels ? post.labels.map((label) => label.val) : undefined 102 }; 103 } 104 ··· 121 122 const renderSegment = (segment: RichtextSegment, baseUrl: string) => { 123 const { text, features } = segment; 124 + const escaped = escapeHtml(text); 125 126 if (!features) { 127 + return `<span>${escaped}</span>`; 128 } 129 130 // segments can have multiple features, use the first one ··· 136 137 switch (feature.$type) { 138 case 'app.bsky.richtext.facet#mention': 139 + return createLink(`${baseUrl}/profile/${feature.did}`, escaped); 140 case 'app.bsky.richtext.facet#link': 141 + return createLink(feature.uri, escaped); 142 case 'app.bsky.richtext.facet#tag': 143 + return createLink(`${baseUrl}/hashtag/${feature.tag}`, escaped); 144 default: 145 + return `<span>${escaped}</span>`; 146 } 147 }; 148
+4 -4
src/lib/components/post/Post.svelte
··· 1 <script lang="ts"> 2 import Embed from './embeds/Embed.svelte'; 3 import { cn, Prose } from '@foxui/core'; 4 import type { WithChildren, WithElementRef } from 'bits-ui'; 5 import type { HTMLAttributes } from 'svelte/elements'; ··· 8 import type { Snippet } from 'svelte'; 9 import { numberToHumanReadable } from '..'; 10 import { RelativeTime } from '@foxui/time'; 11 12 let { 13 ref = $bindable(), ··· 175 class="accent:prose-a:text-accent-950 accent:text-base-900 accent:prose-p:text-base-900 accent:prose-a:underline" 176 > 177 {#if data.htmlContent} 178 - {@html data.htmlContent} 179 {:else} 180 {@render children?.()} 181 {/if} 182 </Prose> 183 184 - {#if data.embed} 185 - <Embed embed={data.embed} /> 186 - {/if} 187 188 {#if showReply || showRepost || showLike || showBookmark || customActions} 189 <div
··· 1 <script lang="ts"> 2 import Embed from './embeds/Embed.svelte'; 3 + import { sanitize } from '$lib/sanitize'; 4 import { cn, Prose } from '@foxui/core'; 5 import type { WithChildren, WithElementRef } from 'bits-ui'; 6 import type { HTMLAttributes } from 'svelte/elements'; ··· 9 import type { Snippet } from 'svelte'; 10 import { numberToHumanReadable } from '..'; 11 import { RelativeTime } from '@foxui/time'; 12 + import PostEmbed from './PostEmbed.svelte'; 13 14 let { 15 ref = $bindable(), ··· 177 class="accent:prose-a:text-accent-950 accent:text-base-900 accent:prose-p:text-base-900 accent:prose-a:underline" 178 > 179 {#if data.htmlContent} 180 + {@html sanitize(data.htmlContent, { ADD_ATTR: ['target'] })} 181 {:else} 182 {@render children?.()} 183 {/if} 184 </Prose> 185 186 + <PostEmbed {data} /> 187 188 {#if showReply || showRepost || showLike || showBookmark || customActions} 189 <div
+23
src/lib/components/post/PostEmbed.svelte
···
··· 1 + <script lang="ts"> 2 + import { hasNSFWLabel, type PostData } from '.'; 3 + import Embed from './embeds/Embed.svelte'; 4 + 5 + let { 6 + data 7 + }: { 8 + data: PostData; 9 + } = $props(); 10 + 11 + let showNSFW = $state(false); 12 + </script> 13 + 14 + {#if hasNSFWLabel(data) && !showNSFW} 15 + <button 16 + onclick={() => (showNSFW = true)} 17 + class="border-base-500/20 bg-base-200/50 text-base-600 dark:border-base-400/20 dark:bg-base-800/50 dark:text-base-400 accent:border-accent-900 mt-4 flex h-18 w-full cursor-pointer items-center justify-center rounded-2xl border text-center text-sm" 18 + > 19 + NSFW content, click to show. 20 + </button> 21 + {:else if data.embed} 22 + <Embed embed={data.embed} /> 23 + {/if}
+10
src/lib/components/post/index.ts
··· 70 htmlContent?: string; 71 72 replies?: PostData[]; 73 }; 74 75 export { default as Post } from './Post.svelte';
··· 70 htmlContent?: string; 71 72 replies?: PostData[]; 73 + 74 + labels?: string[]; 75 }; 76 + 77 + export const nsfwLabels = ['porn', 'sexual', 'graphic-media', 'nudity']; 78 + 79 + export function hasNSFWLabel(post: PostData): boolean { 80 + if (!post.labels) return false; 81 + 82 + return post.labels.some((label) => nsfwLabels.includes(label)); 83 + } 84 85 export { default as Post } from './Post.svelte';
+30
src/lib/sanitize.ts
···
··· 1 + import { browser } from '$app/environment'; 2 + 3 + // Lightweight regex-based sanitizer for SSR in Cloudflare Workers 4 + // where DOMPurify is not available. Strips common XSS vectors. 5 + function regexSanitize(html: string): string { 6 + return html 7 + .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script\s*>/gi, '') 8 + .replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe\s*>/gi, '') 9 + .replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object\s*>/gi, '') 10 + .replace(/<embed\b[^>]*\/?>/gi, '') 11 + .replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style\s*>/gi, '') 12 + .replace(/\s+on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, '') 13 + .replace(/href\s*=\s*["']?\s*javascript\s*:/gi, 'href="') 14 + .replace(/src\s*=\s*["']?\s*javascript\s*:/gi, 'src="'); 15 + } 16 + 17 + let _purify: ((html: string, config?: { ADD_ATTR?: string[] }) => string) | null = null; 18 + 19 + if (browser) { 20 + import('dompurify').then((mod) => { 21 + _purify = (html, config) => mod.default.sanitize(html, config) as string; 22 + }); 23 + } 24 + 25 + export function sanitize(dirty: string, config?: { ADD_ATTR?: string[] }): string { 26 + if (_purify) { 27 + return _purify(dirty, config); 28 + } 29 + return regexSanitize(dirty); 30 + }
+8 -4
src/lib/website/Profile.svelte
··· 1 <script lang="ts"> 2 import { marked } from 'marked'; 3 import type { WebsiteData } from '$lib/types'; 4 import { getDescription, getImage, getName, getProfilePosition } from '$lib/helper'; 5 import { page } from '$app/state'; ··· 17 18 const renderer = new marked.Renderer(); 19 renderer.link = ({ href, title, text }) => 20 - `<a target="_blank" href="${href}" title="${title}">${text}</a>`; 21 22 const profileUrl = $derived(`${page.url.origin}/${data.handle}`); 23 const profilePosition = $derived(getProfilePosition(data)); ··· 64 <div 65 class="text-base-600 dark:text-base-400 prose dark:prose-invert prose-a:text-accent-500 prose-a:no-underline" 66 > 67 - {@html marked.parse(getDescription(data), { 68 - renderer 69 - })} 70 </div> 71 </div> 72
··· 1 <script lang="ts"> 2 import { marked } from 'marked'; 3 + import { sanitize } from '$lib/sanitize'; 4 import type { WebsiteData } from '$lib/types'; 5 import { getDescription, getImage, getName, getProfilePosition } from '$lib/helper'; 6 import { page } from '$app/state'; ··· 18 19 const renderer = new marked.Renderer(); 20 renderer.link = ({ href, title, text }) => 21 + `<a target="_blank" href="${href}" title="${title ?? ''}">${text}</a>`; 22 23 const profileUrl = $derived(`${page.url.origin}/${data.handle}`); 24 const profilePosition = $derived(getProfilePosition(data)); ··· 65 <div 66 class="text-base-600 dark:text-base-400 prose dark:prose-invert prose-a:text-accent-500 prose-a:no-underline" 67 > 68 + {@html sanitize( 69 + marked.parse(getDescription(data), { 70 + renderer 71 + }) as string, 72 + { ADD_ATTR: ['target'] } 73 + )} 74 </div> 75 </div> 76
+3 -1
src/lib/website/ThemeScript.svelte
··· 7 baseColor?: string; 8 } = $props(); 9 10 let script = $derived( 11 - `<script>(function(){document.documentElement.classList.add(${JSON.stringify(accentColor)},${JSON.stringify(baseColor)});})();<` + 12 '/script>' 13 ); 14 </script>
··· 7 baseColor?: string; 8 } = $props(); 9 10 + const safeJson = (v: string) => JSON.stringify(v).replace(/</g, '\\u003c'); 11 + 12 let script = $derived( 13 + `<script>(function(){document.documentElement.classList.add(${safeJson(accentColor)},${safeJson(baseColor)});})();<` + 14 '/script>' 15 ); 16 </script>
+11 -2
src/routes/[handle=handle]/og.png/+server.ts
··· 3 import type { Handle } from '@atcute/lexicons'; 4 import { ImageResponse } from '@ethercorps/sveltekit-og'; 5 6 export async function GET({ params, platform }) { 7 const handle = params.handle; 8 ··· 15 const htmlString = ` 16 <div class="flex flex-col p-8 w-full h-full bg-neutral-900"> 17 <div class="flex items-center mb-8 mt-16"> 18 - <img src="${image}" width="128" height="128" class="rounded-full" /> 19 20 - <h1 class="text-neutral-50 text-7xl ml-4">${handle}</h1> 21 </div> 22 23 <p class="mt-8 text-4xl text-neutral-300">Check out my blento</p>
··· 3 import type { Handle } from '@atcute/lexicons'; 4 import { ImageResponse } from '@ethercorps/sveltekit-og'; 5 6 + function escapeHtml(str: string): string { 7 + return str 8 + .replace(/&/g, '&amp;') 9 + .replace(/</g, '&lt;') 10 + .replace(/>/g, '&gt;') 11 + .replace(/"/g, '&quot;') 12 + .replace(/'/g, '&#39;'); 13 + } 14 + 15 export async function GET({ params, platform }) { 16 const handle = params.handle; 17 ··· 24 const htmlString = ` 25 <div class="flex flex-col p-8 w-full h-full bg-neutral-900"> 26 <div class="flex items-center mb-8 mt-16"> 27 + <img src="${escapeHtml(image ?? '')}" width="128" height="128" class="rounded-full" /> 28 29 + <h1 class="text-neutral-50 text-7xl ml-4">${escapeHtml(handle)}</h1> 30 </div> 31 32 <p class="mt-8 text-4xl text-neutral-300">Check out my blento</p>
static/favicon.ico

This is a binary file and will not be displayed.