WIP: My personal website
0

Configure Feed

Select the types of activity you want to include in your feed.

Move the daisyUI template to Sveltekit

Added my picture and pumpkin mode

author
pds.dad
date (Jun 5, 2026, 5:19 PM -0500) commit 803b0fc8 parent cbb1fbe1 change-id trpttztt
+1271 -8
+1
.gitignore
··· 22 22 vite.config.js.timestamp-* 23 23 vite.config.ts.timestamp-* 24 24 template 25 + .playwright-mcp/
+1
.prettierignore
··· 7 7 8 8 # Miscellaneous 9 9 /static/ 10 + template
.tangled/images/wip.jpg

This is a binary file and will not be displayed.

+19 -1
README.md
··· 1 + # My personal website refresh 2 + WIP WIP. Originally from a template cause whose got the time to get fancy with css 3 + 4 + ![wip](.tangled/images/wip.jpg) 5 + 6 + 7 + # TODO ideas 8 + - Switch between pumpkin edit and not pic depending if it's baileytownsend.dev or pds.dad 9 + - Show what I'm currently listening to 10 + - Show my current projects from tangled and github. May do static, may do dynamic. Not sure yet 11 + - show current writings from leaflet. 12 + 13 + - Probably sections 14 + - Current projects 15 + - Current writings 16 + - As seen on (show places I've given talks or workshops) 17 + 18 + 1 19 # sv 2 20 3 21 Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). 4 - 22 + 5 23 ## Creating a project 6 24 7 25 If you're seeing this, you've probably already done this step. Congrats!
+5 -2
eslint.config.js
··· 22 22 // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. 23 23 // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors 24 24 'no-undef': 'off', 25 - quotes: ['error', 'single'], 25 + quotes: ['error', 'single', { avoidEscape: true }], 26 26 semi: ['error', 'always'], 27 - 'object-curly-spacing': ['error', 'always'] 27 + 'object-curly-spacing': ['error', 'always'], 28 + // This is a single-page site that uses in-page hash anchors and a static 29 + // home link for navigation, so resolve() is unnecessary here. 30 + 'svelte/no-navigation-without-resolve': 'off' 28 31 } 29 32 }, 30 33 {
+4
package.json
··· 22 22 "@tailwindcss/typography": "^0.5.19", 23 23 "@tailwindcss/vite": "^4.2.2", 24 24 "@types/node": "^24", 25 + "daisyui": "^5.5.20", 25 26 "eslint": "^10.4.0", 26 27 "eslint-config-prettier": "^10.1.8", 27 28 "eslint-plugin-svelte": "^3.17.0", ··· 35 36 "typescript": "^6.0.2", 36 37 "typescript-eslint": "^8.58.1", 37 38 "vite": "^8.0.7" 39 + }, 40 + "dependencies": { 41 + "@sveltejs/adapter-node": "^5.5.4" 38 42 } 39 43 }
+423
pnpm-lock.yaml
··· 7 7 importers: 8 8 9 9 .: 10 + dependencies: 11 + '@sveltejs/adapter-node': 12 + specifier: ^5.5.4 13 + version: 5.5.4(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0))) 10 14 devDependencies: 11 15 '@eslint/js': 12 16 specifier: ^10.0.1 ··· 32 36 '@types/node': 33 37 specifier: ^24 34 38 version: 24.13.0 39 + daisyui: 40 + specifier: ^5.5.20 41 + version: 5.5.20 35 42 eslint: 36 43 specifier: ^10.4.0 37 44 version: 10.4.1(jiti@2.7.0) ··· 268 275 '@rolldown/pluginutils@1.0.1': 269 276 resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} 270 277 278 + '@rollup/plugin-commonjs@29.0.3': 279 + resolution: {integrity: sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg==} 280 + engines: {node: '>=16.0.0 || 14 >= 14.17'} 281 + peerDependencies: 282 + rollup: ^2.68.0||^3.0.0||^4.0.0 283 + peerDependenciesMeta: 284 + rollup: 285 + optional: true 286 + 287 + '@rollup/plugin-json@6.1.0': 288 + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} 289 + engines: {node: '>=14.0.0'} 290 + peerDependencies: 291 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 292 + peerDependenciesMeta: 293 + rollup: 294 + optional: true 295 + 296 + '@rollup/plugin-node-resolve@16.0.3': 297 + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} 298 + engines: {node: '>=14.0.0'} 299 + peerDependencies: 300 + rollup: ^2.78.0||^3.0.0||^4.0.0 301 + peerDependenciesMeta: 302 + rollup: 303 + optional: true 304 + 305 + '@rollup/pluginutils@5.4.0': 306 + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} 307 + engines: {node: '>=14.0.0'} 308 + peerDependencies: 309 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 310 + peerDependenciesMeta: 311 + rollup: 312 + optional: true 313 + 314 + '@rollup/rollup-android-arm-eabi@4.61.1': 315 + resolution: {integrity: sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==} 316 + cpu: [arm] 317 + os: [android] 318 + 319 + '@rollup/rollup-android-arm64@4.61.1': 320 + resolution: {integrity: sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==} 321 + cpu: [arm64] 322 + os: [android] 323 + 324 + '@rollup/rollup-darwin-arm64@4.61.1': 325 + resolution: {integrity: sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==} 326 + cpu: [arm64] 327 + os: [darwin] 328 + 329 + '@rollup/rollup-darwin-x64@4.61.1': 330 + resolution: {integrity: sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==} 331 + cpu: [x64] 332 + os: [darwin] 333 + 334 + '@rollup/rollup-freebsd-arm64@4.61.1': 335 + resolution: {integrity: sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==} 336 + cpu: [arm64] 337 + os: [freebsd] 338 + 339 + '@rollup/rollup-freebsd-x64@4.61.1': 340 + resolution: {integrity: sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==} 341 + cpu: [x64] 342 + os: [freebsd] 343 + 344 + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': 345 + resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} 346 + cpu: [arm] 347 + os: [linux] 348 + libc: [glibc] 349 + 350 + '@rollup/rollup-linux-arm-musleabihf@4.61.1': 351 + resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} 352 + cpu: [arm] 353 + os: [linux] 354 + libc: [musl] 355 + 356 + '@rollup/rollup-linux-arm64-gnu@4.61.1': 357 + resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} 358 + cpu: [arm64] 359 + os: [linux] 360 + libc: [glibc] 361 + 362 + '@rollup/rollup-linux-arm64-musl@4.61.1': 363 + resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} 364 + cpu: [arm64] 365 + os: [linux] 366 + libc: [musl] 367 + 368 + '@rollup/rollup-linux-loong64-gnu@4.61.1': 369 + resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} 370 + cpu: [loong64] 371 + os: [linux] 372 + libc: [glibc] 373 + 374 + '@rollup/rollup-linux-loong64-musl@4.61.1': 375 + resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} 376 + cpu: [loong64] 377 + os: [linux] 378 + libc: [musl] 379 + 380 + '@rollup/rollup-linux-ppc64-gnu@4.61.1': 381 + resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} 382 + cpu: [ppc64] 383 + os: [linux] 384 + libc: [glibc] 385 + 386 + '@rollup/rollup-linux-ppc64-musl@4.61.1': 387 + resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} 388 + cpu: [ppc64] 389 + os: [linux] 390 + libc: [musl] 391 + 392 + '@rollup/rollup-linux-riscv64-gnu@4.61.1': 393 + resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} 394 + cpu: [riscv64] 395 + os: [linux] 396 + libc: [glibc] 397 + 398 + '@rollup/rollup-linux-riscv64-musl@4.61.1': 399 + resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} 400 + cpu: [riscv64] 401 + os: [linux] 402 + libc: [musl] 403 + 404 + '@rollup/rollup-linux-s390x-gnu@4.61.1': 405 + resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} 406 + cpu: [s390x] 407 + os: [linux] 408 + libc: [glibc] 409 + 410 + '@rollup/rollup-linux-x64-gnu@4.61.1': 411 + resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} 412 + cpu: [x64] 413 + os: [linux] 414 + libc: [glibc] 415 + 416 + '@rollup/rollup-linux-x64-musl@4.61.1': 417 + resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} 418 + cpu: [x64] 419 + os: [linux] 420 + libc: [musl] 421 + 422 + '@rollup/rollup-openbsd-x64@4.61.1': 423 + resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} 424 + cpu: [x64] 425 + os: [openbsd] 426 + 427 + '@rollup/rollup-openharmony-arm64@4.61.1': 428 + resolution: {integrity: sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==} 429 + cpu: [arm64] 430 + os: [openharmony] 431 + 432 + '@rollup/rollup-win32-arm64-msvc@4.61.1': 433 + resolution: {integrity: sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==} 434 + cpu: [arm64] 435 + os: [win32] 436 + 437 + '@rollup/rollup-win32-ia32-msvc@4.61.1': 438 + resolution: {integrity: sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==} 439 + cpu: [ia32] 440 + os: [win32] 441 + 442 + '@rollup/rollup-win32-x64-gnu@4.61.1': 443 + resolution: {integrity: sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==} 444 + cpu: [x64] 445 + os: [win32] 446 + 447 + '@rollup/rollup-win32-x64-msvc@4.61.1': 448 + resolution: {integrity: sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==} 449 + cpu: [x64] 450 + os: [win32] 451 + 271 452 '@standard-schema/spec@1.1.0': 272 453 resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 273 454 ··· 280 461 resolution: {integrity: sha512-dvuPm1E7M9NI/+canIQ6KKQDU2AkEefEZ2Dp7cY6uKoPq9Z/PhOXABe526UdW2mN986gjVkuSLkOYIBnS/M2LQ==} 281 462 peerDependencies: 282 463 '@sveltejs/kit': ^2.0.0 464 + 465 + '@sveltejs/adapter-node@5.5.4': 466 + resolution: {integrity: sha512-45X92CXW+2J8ZUzPv3eLlKWEzINKiiGeFWTjyER4ZN4sGgNoaoeSkCY/QYNxHpPXy71QPsctwccBo9jJs0ySPQ==} 467 + peerDependencies: 468 + '@sveltejs/kit': ^2.4.0 283 469 284 470 '@sveltejs/kit@2.63.0': 285 471 resolution: {integrity: sha512-1DrR7vQ9brXLrNE2sLtFXApwr7AUXPfpbIFYc+CQRf2+iURaZbXGU+7TG/RLr+9fdFkoRdyCAVUOHCChw11LFA==} ··· 430 616 '@types/node@24.13.0': 431 617 resolution: {integrity: sha512-5vtOqGQr4NJKeEzV441FcOi2MeG9UTWq9LqVLGneDdu4vlX17H8kQ2PA2UmNwCUGPVDj4oBjNhS7ReVEIWJJrg==} 432 618 619 + '@types/resolve@1.20.2': 620 + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 621 + 433 622 '@types/trusted-types@2.0.7': 434 623 resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} 435 624 ··· 529 718 resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 530 719 engines: {node: '>=6'} 531 720 721 + commondir@1.0.1: 722 + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 723 + 532 724 cookie@0.6.0: 533 725 resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 534 726 engines: {node: '>= 0.6'} ··· 541 733 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 542 734 engines: {node: '>=4'} 543 735 hasBin: true 736 + 737 + daisyui@5.5.20: 738 + resolution: {integrity: sha512-HemJcjl0Gk9rQ8BcgofN6p+EURrqftQG9wK1Hkxs98i49xe68+QxpNvry+PyxwkIUgrbMpNmZ5ZWjmtffAjfhQ==} 544 739 545 740 debug@4.4.3: 546 741 resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} ··· 568 763 enhanced-resolve@5.22.2: 569 764 resolution: {integrity: sha512-0rxICaFZ7NQho/sHely2bvOPRP0Eu2B0NZ9zM54YvRvWMn7jfz3DmnOZDR9LlXDdDcqntAVc6Hfy4gr/tdH/Ag==} 570 765 engines: {node: '>=10.13.0'} 766 + 767 + es-errors@1.3.0: 768 + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 769 + engines: {node: '>= 0.4'} 571 770 572 771 escape-string-regexp@4.0.0: 573 772 resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} ··· 650 849 resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 651 850 engines: {node: '>=4.0'} 652 851 852 + estree-walker@2.0.2: 853 + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 854 + 653 855 esutils@2.0.3: 654 856 resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 655 857 engines: {node: '>=0.10.0'} ··· 692 894 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 693 895 os: [darwin] 694 896 897 + function-bind@1.1.2: 898 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 899 + 695 900 glob-parent@6.0.2: 696 901 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 697 902 engines: {node: '>=10.13.0'} ··· 707 912 graceful-fs@4.2.11: 708 913 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 709 914 915 + hasown@2.0.4: 916 + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} 917 + engines: {node: '>= 0.4'} 918 + 710 919 ignore@5.3.2: 711 920 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 712 921 engines: {node: '>= 4'} ··· 719 928 resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 720 929 engines: {node: '>=0.8.19'} 721 930 931 + is-core-module@2.16.2: 932 + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} 933 + engines: {node: '>= 0.4'} 934 + 722 935 is-extglob@2.1.1: 723 936 resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 724 937 engines: {node: '>=0.10.0'} ··· 726 939 is-glob@4.0.3: 727 940 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 728 941 engines: {node: '>=0.10.0'} 942 + 943 + is-module@1.0.0: 944 + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 945 + 946 + is-reference@1.2.1: 947 + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 729 948 730 949 is-reference@3.0.3: 731 950 resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} ··· 899 1118 resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 900 1119 engines: {node: '>=8'} 901 1120 1121 + path-parse@1.0.7: 1122 + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1123 + 902 1124 picocolors@1.1.1: 903 1125 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 904 1126 ··· 1020 1242 resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1021 1243 engines: {node: '>= 14.18.0'} 1022 1244 1245 + resolve@1.22.12: 1246 + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} 1247 + engines: {node: '>= 0.4'} 1248 + hasBin: true 1249 + 1023 1250 rolldown@1.0.3: 1024 1251 resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} 1025 1252 engines: {node: ^20.19.0 || >=22.12.0} 1253 + hasBin: true 1254 + 1255 + rollup@4.61.1: 1256 + resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==} 1257 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1026 1258 hasBin: true 1027 1259 1028 1260 sade@1.8.1: ··· 1052 1284 source-map-js@1.2.1: 1053 1285 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1054 1286 engines: {node: '>=0.10.0'} 1287 + 1288 + supports-preserve-symlinks-flag@1.0.0: 1289 + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1290 + engines: {node: '>= 0.4'} 1055 1291 1056 1292 svelte-check@4.6.0: 1057 1293 resolution: {integrity: sha512-KhVnDFDSid57mmZtHz8gfW8AAGylOZ0vPnOIzVmAL+urzwK8sBYXRss953gD8T0OdgAQ11mdWhE6uadmtOz8TQ==} ··· 1343 1579 1344 1580 '@rolldown/pluginutils@1.0.1': {} 1345 1581 1582 + '@rollup/plugin-commonjs@29.0.3(rollup@4.61.1)': 1583 + dependencies: 1584 + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) 1585 + commondir: 1.0.1 1586 + estree-walker: 2.0.2 1587 + fdir: 6.5.0(picomatch@4.0.4) 1588 + is-reference: 1.2.1 1589 + magic-string: 0.30.21 1590 + picomatch: 4.0.4 1591 + optionalDependencies: 1592 + rollup: 4.61.1 1593 + 1594 + '@rollup/plugin-json@6.1.0(rollup@4.61.1)': 1595 + dependencies: 1596 + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) 1597 + optionalDependencies: 1598 + rollup: 4.61.1 1599 + 1600 + '@rollup/plugin-node-resolve@16.0.3(rollup@4.61.1)': 1601 + dependencies: 1602 + '@rollup/pluginutils': 5.4.0(rollup@4.61.1) 1603 + '@types/resolve': 1.20.2 1604 + deepmerge: 4.3.1 1605 + is-module: 1.0.0 1606 + resolve: 1.22.12 1607 + optionalDependencies: 1608 + rollup: 4.61.1 1609 + 1610 + '@rollup/pluginutils@5.4.0(rollup@4.61.1)': 1611 + dependencies: 1612 + '@types/estree': 1.0.9 1613 + estree-walker: 2.0.2 1614 + picomatch: 4.0.4 1615 + optionalDependencies: 1616 + rollup: 4.61.1 1617 + 1618 + '@rollup/rollup-android-arm-eabi@4.61.1': 1619 + optional: true 1620 + 1621 + '@rollup/rollup-android-arm64@4.61.1': 1622 + optional: true 1623 + 1624 + '@rollup/rollup-darwin-arm64@4.61.1': 1625 + optional: true 1626 + 1627 + '@rollup/rollup-darwin-x64@4.61.1': 1628 + optional: true 1629 + 1630 + '@rollup/rollup-freebsd-arm64@4.61.1': 1631 + optional: true 1632 + 1633 + '@rollup/rollup-freebsd-x64@4.61.1': 1634 + optional: true 1635 + 1636 + '@rollup/rollup-linux-arm-gnueabihf@4.61.1': 1637 + optional: true 1638 + 1639 + '@rollup/rollup-linux-arm-musleabihf@4.61.1': 1640 + optional: true 1641 + 1642 + '@rollup/rollup-linux-arm64-gnu@4.61.1': 1643 + optional: true 1644 + 1645 + '@rollup/rollup-linux-arm64-musl@4.61.1': 1646 + optional: true 1647 + 1648 + '@rollup/rollup-linux-loong64-gnu@4.61.1': 1649 + optional: true 1650 + 1651 + '@rollup/rollup-linux-loong64-musl@4.61.1': 1652 + optional: true 1653 + 1654 + '@rollup/rollup-linux-ppc64-gnu@4.61.1': 1655 + optional: true 1656 + 1657 + '@rollup/rollup-linux-ppc64-musl@4.61.1': 1658 + optional: true 1659 + 1660 + '@rollup/rollup-linux-riscv64-gnu@4.61.1': 1661 + optional: true 1662 + 1663 + '@rollup/rollup-linux-riscv64-musl@4.61.1': 1664 + optional: true 1665 + 1666 + '@rollup/rollup-linux-s390x-gnu@4.61.1': 1667 + optional: true 1668 + 1669 + '@rollup/rollup-linux-x64-gnu@4.61.1': 1670 + optional: true 1671 + 1672 + '@rollup/rollup-linux-x64-musl@4.61.1': 1673 + optional: true 1674 + 1675 + '@rollup/rollup-openbsd-x64@4.61.1': 1676 + optional: true 1677 + 1678 + '@rollup/rollup-openharmony-arm64@4.61.1': 1679 + optional: true 1680 + 1681 + '@rollup/rollup-win32-arm64-msvc@4.61.1': 1682 + optional: true 1683 + 1684 + '@rollup/rollup-win32-ia32-msvc@4.61.1': 1685 + optional: true 1686 + 1687 + '@rollup/rollup-win32-x64-gnu@4.61.1': 1688 + optional: true 1689 + 1690 + '@rollup/rollup-win32-x64-msvc@4.61.1': 1691 + optional: true 1692 + 1346 1693 '@standard-schema/spec@1.1.0': {} 1347 1694 1348 1695 '@sveltejs/acorn-typescript@1.0.10(acorn@8.16.0)': ··· 1353 1700 dependencies: 1354 1701 '@sveltejs/kit': 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)) 1355 1702 1703 + '@sveltejs/adapter-node@5.5.4(@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)))': 1704 + dependencies: 1705 + '@rollup/plugin-commonjs': 29.0.3(rollup@4.61.1) 1706 + '@rollup/plugin-json': 6.1.0(rollup@4.61.1) 1707 + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.61.1) 1708 + '@sveltejs/kit': 2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)) 1709 + rollup: 4.61.1 1710 + 1356 1711 '@sveltejs/kit@2.63.0(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.2(@typescript-eslint/types@8.60.1))(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0)))(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3)(vite@8.0.16(@types/node@24.13.0)(jiti@2.7.0))': 1357 1712 dependencies: 1358 1713 '@standard-schema/spec': 1.1.0 ··· 1479 1834 dependencies: 1480 1835 undici-types: 7.18.2 1481 1836 1837 + '@types/resolve@1.20.2': {} 1838 + 1482 1839 '@types/trusted-types@2.0.7': {} 1483 1840 1484 1841 '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.4.1(jiti@2.7.0))(typescript@6.0.3)': ··· 1601 1958 1602 1959 clsx@2.1.1: {} 1603 1960 1961 + commondir@1.0.1: {} 1962 + 1604 1963 cookie@0.6.0: {} 1605 1964 1606 1965 cross-spawn@7.0.6: ··· 1610 1969 which: 2.0.2 1611 1970 1612 1971 cssesc@3.0.0: {} 1972 + 1973 + daisyui@5.5.20: {} 1613 1974 1614 1975 debug@4.4.3: 1615 1976 dependencies: ··· 1627 1988 dependencies: 1628 1989 graceful-fs: 4.2.11 1629 1990 tapable: 2.3.3 1991 + 1992 + es-errors@1.3.0: {} 1630 1993 1631 1994 escape-string-regexp@4.0.0: {} 1632 1995 ··· 1737 2100 1738 2101 estraverse@5.3.0: {} 1739 2102 2103 + estree-walker@2.0.2: {} 2104 + 1740 2105 esutils@2.0.3: {} 1741 2106 1742 2107 fast-deep-equal@3.1.3: {} ··· 1768 2133 fsevents@2.3.3: 1769 2134 optional: true 1770 2135 2136 + function-bind@1.1.2: {} 2137 + 1771 2138 glob-parent@6.0.2: 1772 2139 dependencies: 1773 2140 is-glob: 4.0.3 ··· 1777 2144 globals@17.6.0: {} 1778 2145 1779 2146 graceful-fs@4.2.11: {} 2147 + 2148 + hasown@2.0.4: 2149 + dependencies: 2150 + function-bind: 1.1.2 1780 2151 1781 2152 ignore@5.3.2: {} 1782 2153 ··· 1784 2155 1785 2156 imurmurhash@0.1.4: {} 1786 2157 2158 + is-core-module@2.16.2: 2159 + dependencies: 2160 + hasown: 2.0.4 2161 + 1787 2162 is-extglob@2.1.1: {} 1788 2163 1789 2164 is-glob@4.0.3: 1790 2165 dependencies: 1791 2166 is-extglob: 2.1.1 2167 + 2168 + is-module@1.0.0: {} 2169 + 2170 + is-reference@1.2.1: 2171 + dependencies: 2172 + '@types/estree': 1.0.9 1792 2173 1793 2174 is-reference@3.0.3: 1794 2175 dependencies: ··· 1917 2298 1918 2299 path-key@3.1.1: {} 1919 2300 2301 + path-parse@1.0.7: {} 2302 + 1920 2303 picocolors@1.1.1: {} 1921 2304 1922 2305 picomatch@4.0.4: {} ··· 1971 2354 1972 2355 readdirp@4.1.2: {} 1973 2356 2357 + resolve@1.22.12: 2358 + dependencies: 2359 + es-errors: 1.3.0 2360 + is-core-module: 2.16.2 2361 + path-parse: 1.0.7 2362 + supports-preserve-symlinks-flag: 1.0.0 2363 + 1974 2364 rolldown@1.0.3: 1975 2365 dependencies: 1976 2366 '@oxc-project/types': 0.133.0 ··· 1992 2382 '@rolldown/binding-win32-arm64-msvc': 1.0.3 1993 2383 '@rolldown/binding-win32-x64-msvc': 1.0.3 1994 2384 2385 + rollup@4.61.1: 2386 + dependencies: 2387 + '@types/estree': 1.0.9 2388 + optionalDependencies: 2389 + '@rollup/rollup-android-arm-eabi': 4.61.1 2390 + '@rollup/rollup-android-arm64': 4.61.1 2391 + '@rollup/rollup-darwin-arm64': 4.61.1 2392 + '@rollup/rollup-darwin-x64': 4.61.1 2393 + '@rollup/rollup-freebsd-arm64': 4.61.1 2394 + '@rollup/rollup-freebsd-x64': 4.61.1 2395 + '@rollup/rollup-linux-arm-gnueabihf': 4.61.1 2396 + '@rollup/rollup-linux-arm-musleabihf': 4.61.1 2397 + '@rollup/rollup-linux-arm64-gnu': 4.61.1 2398 + '@rollup/rollup-linux-arm64-musl': 4.61.1 2399 + '@rollup/rollup-linux-loong64-gnu': 4.61.1 2400 + '@rollup/rollup-linux-loong64-musl': 4.61.1 2401 + '@rollup/rollup-linux-ppc64-gnu': 4.61.1 2402 + '@rollup/rollup-linux-ppc64-musl': 4.61.1 2403 + '@rollup/rollup-linux-riscv64-gnu': 4.61.1 2404 + '@rollup/rollup-linux-riscv64-musl': 4.61.1 2405 + '@rollup/rollup-linux-s390x-gnu': 4.61.1 2406 + '@rollup/rollup-linux-x64-gnu': 4.61.1 2407 + '@rollup/rollup-linux-x64-musl': 4.61.1 2408 + '@rollup/rollup-openbsd-x64': 4.61.1 2409 + '@rollup/rollup-openharmony-arm64': 4.61.1 2410 + '@rollup/rollup-win32-arm64-msvc': 4.61.1 2411 + '@rollup/rollup-win32-ia32-msvc': 4.61.1 2412 + '@rollup/rollup-win32-x64-gnu': 4.61.1 2413 + '@rollup/rollup-win32-x64-msvc': 4.61.1 2414 + fsevents: 2.3.3 2415 + 1995 2416 sade@1.8.1: 1996 2417 dependencies: 1997 2418 mri: 1.2.0 ··· 2013 2434 totalist: 3.0.1 2014 2435 2015 2436 source-map-js@1.2.1: {} 2437 + 2438 + supports-preserve-symlinks-flag@1.0.0: {} 2016 2439 2017 2440 svelte-check@4.6.0(picomatch@4.0.4)(svelte@5.56.2(@typescript-eslint/types@8.60.1))(typescript@6.0.3): 2018 2441 dependencies:
+14 -1
src/app.html
··· 1 1 <!doctype html> 2 - <html lang="en"> 2 + <html lang="en" class="scroll-p-32 scroll-smooth"> 3 3 <head> 4 4 <meta charset="utf-8" /> 5 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 6 <meta name="text-scale" content="scale" /> 7 + <script> 8 + // Apply the saved (or system) theme before paint to avoid a flash of the wrong theme. 9 + (() => { 10 + try { 11 + const saved = localStorage.getItem('theme'); 12 + const theme = 13 + saved ?? (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); 14 + document.documentElement.setAttribute('data-theme', theme); 15 + } catch { 16 + /* localStorage may be unavailable */ 17 + } 18 + })(); 19 + </script> 7 20 %sveltekit.head% 8 21 </head> 9 22 <body data-sveltekit-preload-data="hover">
+37
src/lib/actions/reveal.ts
··· 1 + import type { Action } from 'svelte/action'; 2 + 3 + interface RevealOptions { 4 + /** Fraction of the element that must be visible before revealing (0–1). */ 5 + amount?: number; 6 + } 7 + 8 + /** 9 + * Reveal-on-scroll action. Adds the `reveal` class immediately so the element 10 + * starts hidden, then adds `is-visible` once it scrolls into view (fires once). 11 + * Mirrors the template's Framer Motion `whileInView={{ once: true, amount }}`. 12 + */ 13 + export const reveal: Action<HTMLElement, RevealOptions | undefined> = (node, options) => { 14 + const amount = options?.amount ?? 0.25; 15 + 16 + node.classList.add('reveal'); 17 + 18 + const observer = new IntersectionObserver( 19 + (entries) => { 20 + for (const entry of entries) { 21 + if (entry.isIntersecting) { 22 + node.classList.add('is-visible'); 23 + observer.unobserve(node); 24 + } 25 + } 26 + }, 27 + { threshold: amount } 28 + ); 29 + 30 + observer.observe(node); 31 + 32 + return { 33 + destroy() { 34 + observer.disconnect(); 35 + } 36 + }; 37 + };
src/lib/assets/favicon.ico

This is a binary file and will not be displayed.

src/lib/assets/me.webp

This is a binary file and will not be displayed.

src/lib/assets/me_pumpkin.webp

This is a binary file and will not be displayed.

+208
src/lib/components/Contact.svelte
··· 1 + <script lang="ts"> 2 + import { reveal } from '$lib/actions/reveal'; 3 + </script> 4 + 5 + <section id="contactus" class="mt-20" use:reveal> 6 + <div class="flex w-full flex-col justify-center"> 7 + <h1 class="text-center font-urbanist text-2xl font-semibold md:text-5xl">Get in touch</h1> 8 + <span class="text-md mt-2 px-2 text-center font-urbanist md:mt-4 md:px-5 md:text-xl"> 9 + Contact us now and scale your business 10 + </span> 11 + </div> 12 + <div class="container mx-auto px-6 py-10"> 13 + <div class="lg:-mx-6 lg:flex lg:items-center"> 14 + <div class="lg:mx-0 lg:mt-0 lg:flex lg:w-1/2 lg:flex-col lg:items-center"> 15 + <div class="mt-6 space-y-8 md:mt-8"> 16 + <p class="-mx-2 flex items-start"> 17 + <svg 18 + xmlns="http://www.w3.org/2000/svg" 19 + class="mx-2 h-6 w-6" 20 + fill="none" 21 + viewBox="0 0 24 24" 22 + stroke="currentColor" 23 + stroke-width="2" 24 + > 25 + <path 26 + stroke-linecap="round" 27 + stroke-linejoin="round" 28 + d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" 29 + /> 30 + <path 31 + stroke-linecap="round" 32 + stroke-linejoin="round" 33 + d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" 34 + /> 35 + </svg> 36 + <span class="mx-2 w-72 truncate font-urbanist text-base-content">Company Location</span> 37 + </p> 38 + 39 + <p class="-mx-2 flex items-start"> 40 + <svg 41 + xmlns="http://www.w3.org/2000/svg" 42 + class="mx-2 h-6 w-6" 43 + fill="none" 44 + viewBox="0 0 24 24" 45 + stroke="currentColor" 46 + stroke-width="2" 47 + > 48 + <path 49 + stroke-linecap="round" 50 + stroke-linejoin="round" 51 + d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" 52 + /> 53 + </svg> 54 + <span class="mx-2 w-72 truncate font-urbanist text-base-content">+1 (555) 234-5678</span 55 + > 56 + </p> 57 + 58 + <p class="-mx-2 flex items-start"> 59 + <svg 60 + xmlns="http://www.w3.org/2000/svg" 61 + class="mx-2 h-6 w-6" 62 + fill="none" 63 + viewBox="0 0 24 24" 64 + stroke="currentColor" 65 + stroke-width="2" 66 + > 67 + <path 68 + stroke-linecap="round" 69 + stroke-linejoin="round" 70 + d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" 71 + /> 72 + </svg> 73 + <span class="mx-2 w-72 truncate font-urbanist text-base-content">abc@example.com</span> 74 + </p> 75 + </div> 76 + 77 + <div class="mt-6 w-80 md:mt-8"> 78 + <h3>Follow us</h3> 79 + 80 + <div class="-mx-1.5 mt-4 flex"> 81 + <a 82 + class="btn mx-1.5 rounded-full bg-base-100" 83 + href="https://www.twitter.com" 84 + aria-label="twitter" 85 + > 86 + <svg 87 + class="h-10 w-10 fill-current" 88 + viewBox="0 0 24 24" 89 + fill="none" 90 + xmlns="http://www.w3.org/2000/svg" 91 + > 92 + <path 93 + d="M18.6668 6.67334C18.0002 7.00001 17.3468 7.13268 16.6668 7.33334C15.9195 6.49001 14.8115 6.44334 13.7468 6.84201C12.6822 7.24068 11.9848 8.21534 12.0002 9.33334V10C9.83683 10.0553 7.91016 9.07001 6.66683 7.33334C6.66683 7.33334 3.87883 12.2887 9.3335 14.6667C8.0855 15.498 6.84083 16.0587 5.3335 16C7.53883 17.202 9.94216 17.6153 12.0228 17.0113C14.4095 16.318 16.3708 14.5293 17.1235 11.85C17.348 11.0351 17.4595 10.1932 17.4548 9.34801C17.4535 9.18201 18.4615 7.50001 18.6668 6.67268V6.67334Z" 94 + /> 95 + </svg> 96 + </a> 97 + 98 + <a 99 + class="btn mx-1.5 rounded-full bg-base-100" 100 + href="https://www.linkedin.com" 101 + aria-label="linkedin" 102 + > 103 + <svg 104 + class="h-8 w-8" 105 + viewBox="0 0 24 24" 106 + fill="none" 107 + xmlns="http://www.w3.org/2000/svg" 108 + > 109 + <path 110 + d="M15.2 8.80005C16.4731 8.80005 17.694 9.30576 18.5941 10.2059C19.4943 11.1061 20 12.327 20 13.6V19.2H16.8V13.6C16.8 13.1757 16.6315 12.7687 16.3314 12.4687C16.0313 12.1686 15.6244 12 15.2 12C14.7757 12 14.3687 12.1686 14.0687 12.4687C13.7686 12.7687 13.6 13.1757 13.6 13.6V19.2H10.4V13.6C10.4 12.327 10.9057 11.1061 11.8059 10.2059C12.7061 9.30576 13.927 8.80005 15.2 8.80005Z" 111 + fill="currentColor" 112 + /> 113 + <path d="M7.2 9.6001H4V19.2001H7.2V9.6001Z" fill="currentColor" /> 114 + <path 115 + d="M5.6 7.2C6.48366 7.2 7.2 6.48366 7.2 5.6C7.2 4.71634 6.48366 4 5.6 4C4.71634 4 4 4.71634 4 5.6C4 6.48366 4.71634 7.2 5.6 7.2Z" 116 + fill="currentColor" 117 + /> 118 + </svg> 119 + </a> 120 + 121 + <a 122 + class="btn mx-1.5 rounded-full bg-base-100" 123 + href="https://www.facebook.com" 124 + aria-label="facebook" 125 + > 126 + <svg 127 + class="h-8 w-8" 128 + viewBox="0 0 24 24" 129 + fill="none" 130 + xmlns="http://www.w3.org/2000/svg" 131 + > 132 + <path 133 + d="M7 10.2222V13.7778H9.66667V20H13.2222V13.7778H15.8889L16.7778 10.2222H13.2222V8.44444C13.2222 8.2087 13.3159 7.9826 13.4826 7.81591C13.6493 7.64921 13.8754 7.55556 14.1111 7.55556H16.7778V4H14.1111C12.9324 4 11.8019 4.46825 10.9684 5.30175C10.1349 6.13524 9.66667 7.2657 9.66667 8.44444V10.2222H7Z" 134 + fill="currentColor" 135 + /> 136 + </svg> 137 + </a> 138 + 139 + <a 140 + class="btn mx-1.5 rounded-full bg-base-100" 141 + href="https://www.instagram.com" 142 + aria-label="instagram" 143 + > 144 + <svg 145 + class="h-8 w-8" 146 + viewBox="0 0 24 24" 147 + fill="none" 148 + xmlns="http://www.w3.org/2000/svg" 149 + > 150 + <path 151 + d="M11.9294 7.72275C9.65868 7.72275 7.82715 9.55428 7.82715 11.825C7.82715 14.0956 9.65868 15.9271 11.9294 15.9271C14.2 15.9271 16.0316 14.0956 16.0316 11.825C16.0316 9.55428 14.2 7.72275 11.9294 7.72275ZM11.9294 14.4919C10.462 14.4919 9.26239 13.2959 9.26239 11.825C9.26239 10.354 10.4584 9.15799 11.9294 9.15799C13.4003 9.15799 14.5963 10.354 14.5963 11.825C14.5963 13.2959 13.3967 14.4919 11.9294 14.4919ZM17.1562 7.55495C17.1562 8.08692 16.7277 8.51178 16.1994 8.51178C15.6674 8.51178 15.2425 8.08335 15.2425 7.55495C15.2425 7.02656 15.671 6.59813 16.1994 6.59813C16.7277 6.59813 17.1562 7.02656 17.1562 7.55495ZM19.8731 8.52606C19.8124 7.24434 19.5197 6.10901 18.5807 5.17361C17.6453 4.23821 16.51 3.94545 15.2282 3.88118C13.9073 3.80621 9.94787 3.80621 8.62689 3.88118C7.34874 3.94188 6.21341 4.23464 5.27444 5.17004C4.33547 6.10544 4.04628 7.24077 3.98201 8.52249C3.90704 9.84347 3.90704 13.8029 3.98201 15.1238C4.04271 16.4056 4.33547 17.5409 5.27444 18.4763C6.21341 19.4117 7.34517 19.7045 8.62689 19.7687C9.94787 19.8437 13.9073 19.8437 15.2282 19.7687C16.51 19.708 17.6453 19.4153 18.5807 18.4763C19.5161 17.5409 19.8089 16.4056 19.8731 15.1238C19.9481 13.8029 19.9481 9.84704 19.8731 8.52606ZM18.1665 16.5412C17.8881 17.241 17.349 17.7801 16.6456 18.0621C15.5924 18.4799 13.0932 18.3835 11.9294 18.3835C10.7655 18.3835 8.26272 18.4763 7.21307 18.0621C6.51331 17.7837 5.9742 17.2446 5.69215 16.5412C5.27444 15.488 5.37083 12.9888 5.37083 11.825C5.37083 10.6611 5.27801 8.15832 5.69215 7.10867C5.97063 6.40891 6.50974 5.8698 7.21307 5.58775C8.26629 5.17004 10.7655 5.26643 11.9294 5.26643C13.0932 5.26643 15.596 5.17361 16.6456 5.58775C17.3454 5.86623 17.8845 6.40534 18.1665 7.10867C18.5843 8.16189 18.4879 10.6611 18.4879 11.825C18.4879 12.9888 18.5843 15.4916 18.1665 16.5412Z" 152 + fill="currentColor" 153 + /> 154 + </svg> 155 + </a> 156 + </div> 157 + </div> 158 + </div> 159 + 160 + <div class="card mt-8 lg:mx-6 lg:w-1/2"> 161 + <div 162 + class="mx-auto card-body w-full overflow-hidden rounded-lg px-8 py-10 shadow-xl outline outline-base-content/5 lg:max-w-xl" 163 + > 164 + <h1 class="card-title">What do you want to ask</h1> 165 + 166 + <form class="mt-6"> 167 + <div class="flex-1"> 168 + <label for="name" class="mb-2 block text-sm">Full Name</label> 169 + <input 170 + id="name" 171 + autocomplete="name" 172 + type="text" 173 + placeholder="Your Name" 174 + class="input-bordered input w-full" 175 + /> 176 + </div> 177 + 178 + <div class="mt-6 flex-1"> 179 + <label for="email" class="mb-2 block text-sm">Email address</label> 180 + <input 181 + id="email" 182 + autocomplete="email" 183 + type="email" 184 + placeholder="abcd@example.com" 185 + class="input-bordered input w-full" 186 + /> 187 + </div> 188 + 189 + <div class="mt-6 w-full"> 190 + <label for="message" class="mb-2 block text-sm">Message</label> 191 + <textarea id="message" class="textarea-bordered textarea w-full" placeholder="Message" 192 + ></textarea> 193 + </div> 194 + 195 + <button 196 + class="btn mt-6 w-full transform px-6 py-3 text-sm font-medium capitalize duration-300 btn-neutral" 197 + > 198 + get in touch 199 + </button> 200 + </form> 201 + </div> 202 + </div> 203 + </div> 204 + </div> 205 + <div class="flex items-center justify-center py-10 font-urbanist text-sm lg:text-lg"> 206 + <h1>© 2024 Digital Agency. All rights reserved.</h1> 207 + </div> 208 + </section>
+36
src/lib/components/Hero.svelte
··· 1 + <script lang="ts"> 2 + import { reveal } from '$lib/actions/reveal'; 3 + import me from '$lib/assets/me.webp'; 4 + import mePumpkin from '$lib/assets/me_pumpkin.webp'; 5 + 6 + let { pumpkin = false }: { pumpkin?: boolean } = $props(); 7 + </script> 8 + 9 + <div id="home" class="hero flex justify-center py-10" use:reveal> 10 + <div class="hero-content flex-col lg:flex-row-reverse"> 11 + <img 12 + src={pumpkin ? mePumpkin : me} 13 + alt="" 14 + class="max-w-xs rounded-t-[14rem] rounded-b-box shadow-2xl outline outline-base-content/5 md:max-w-md" 15 + /> 16 + <div class="text-center lg:text-start"> 17 + <span class="badge badge-outline badge-lg">Award winning digital agency</span> 18 + <h1 class="font-urbanist text-3xl font-black uppercase md:text-7xl"> 19 + Digital marketing solutions 20 + <span class="text-base-content/30"> for ambitious brands</span> 21 + </h1> 22 + <p class="py-6 font-urbanist lg:max-w-lg"> 23 + SuperCharge Your Brand Performance With Performance Based and Specialized Digital Marketing 24 + & Development Solutions. 25 + </p> 26 + <div class="flex gap-2 max-lg:justify-center"> 27 + <a href="#contactus" class="btn rounded-full font-urbanist shadow-md btn-neutral md:btn-lg"> 28 + Get Started 29 + </a> 30 + <a href="/" class="btn rounded-full font-urbanist font-light btn-ghost md:btn-lg"> 31 + Read success stories 32 + </a> 33 + </div> 34 + </div> 35 + </div> 36 + </div>
+19
src/lib/components/LogoClouds.svelte
··· 1 + <script lang="ts"> 2 + import { reveal } from '$lib/actions/reveal'; 3 + </script> 4 + 5 + <div class="flex w-full items-center justify-center py-10" use:reveal> 6 + <div> 7 + <h2 8 + class="mb-12 text-center font-urbanist text-lg leading-8 font-semibold text-base-content/60" 9 + > 10 + Trusted by the world's most Popular Brands 11 + </h2> 12 + <div class="flex flex-wrap justify-center gap-10 xl:gap-32"> 13 + <img class="w-32 grayscale" src="/images/logo/google.svg" alt="Google" /> 14 + <img class="w-32 grayscale" src="/images/logo/microsoft.svg" alt="Microsoft" /> 15 + <img class="w-32 grayscale" src="/images/logo/spotify.svg" alt="Spotify" /> 16 + <img class="w-32 grayscale" src="/images/logo/netflix.svg" alt="Netflix" /> 17 + </div> 18 + </div> 19 + </div>
+113
src/lib/components/NavBar.svelte
··· 1 + <script lang="ts"> 2 + import { onMount } from 'svelte'; 3 + import { replaceState } from '$app/navigation'; 4 + import ThemeToggle from './ThemeToggle.svelte'; 5 + 6 + const navigation = [ 7 + { name: 'Home', href: '#home' }, 8 + { name: 'Services', href: '#services' }, 9 + { name: 'Testimonial', href: '#testimonial' }, 10 + { name: 'Team', href: '#team' }, 11 + { name: 'Contact Us', href: '#contactus' } 12 + ]; 13 + 14 + let active = $state(navigation[0].href); 15 + 16 + onMount(() => { 17 + const sections = navigation 18 + .map((item) => document.getElementById(item.href.slice(1))) 19 + .filter((el): el is HTMLElement => el !== null); 20 + 21 + // Track which sections currently cross the activation band so we can 22 + // always pick the topmost one even when several overlap it. 23 + const intersecting = new Set<string>(); 24 + 25 + const updateActive = () => { 26 + const next = navigation.find((item) => intersecting.has(item.href)); 27 + if (!next || next.href === active) return; 28 + active = next.href; 29 + // Use SvelteKit's replaceState (not the native history.replaceState): 30 + // it updates the URL without scrolling *and* preserves the router's 31 + // internal history.state. Calling native history.replaceState(null, …) 32 + // here wipes SvelteKit's `sveltekit:history`/`sveltekit:navigation` 33 + // state, which corrupts the router's scroll handling and makes anchor 34 + // links intermittently fail to scroll. 35 + replaceState(next.href, {}); 36 + }; 37 + 38 + const observer = new IntersectionObserver( 39 + (entries) => { 40 + for (const entry of entries) { 41 + const hash = `#${entry.target.id}`; 42 + if (entry.isIntersecting) intersecting.add(hash); 43 + else intersecting.delete(hash); 44 + } 45 + updateActive(); 46 + }, 47 + // Thin band ~45% down the viewport: a section becomes active as it 48 + // crosses that line. 49 + { rootMargin: '-45% 0px -50% 0px', threshold: 0 } 50 + ); 51 + 52 + sections.forEach((section) => observer.observe(section)); 53 + return () => observer.disconnect(); 54 + }); 55 + </script> 56 + 57 + <div class="sticky top-0 z-50 flex justify-center py-4"> 58 + <div 59 + class="navbar max-w-xs rounded-full bg-base-100/90 py-0 shadow-2xl outline outline-base-content/5 backdrop-blur md:max-w-4xl" 60 + > 61 + <div class="navbar-start"> 62 + <div class="dropdown"> 63 + <div tabindex="0" role="button" class="btn btn-circle btn-ghost lg:hidden"> 64 + <svg 65 + xmlns="http://www.w3.org/2000/svg" 66 + class="h-5 w-5" 67 + fill="none" 68 + viewBox="0 0 24 24" 69 + stroke="currentColor" 70 + > 71 + <path 72 + stroke-linecap="round" 73 + stroke-linejoin="round" 74 + stroke-width="2" 75 + d="M4 6h16M4 12h8m-8 6h16" 76 + /> 77 + </svg> 78 + </div> 79 + <ul 80 + class="dropdown-content menu z-[1] mt-3 w-52 gap-2 menu-md rounded-box bg-base-100 p-2 shadow" 81 + > 82 + {#each navigation as item (item.name)} 83 + <li> 84 + <a href={item.href} class="font-urbanist">{item.name}</a> 85 + </li> 86 + {/each} 87 + </ul> 88 + </div> 89 + <a href="/" class="btn rounded-full font-urbanist text-lg font-semibold btn-ghost"> 90 + Digital Agency 91 + </a> 92 + </div> 93 + <div class="ml-10 navbar-center hidden lg:flex"> 94 + {#each navigation as item (item.name)} 95 + <nav class="menu menu-horizontal px-1"> 96 + <a 97 + href={item.href} 98 + class="btn rounded-full font-urbanist text-sm font-light btn-ghost {active === item.href 99 + ? 'bg-base-300' 100 + : ''}" 101 + onclick={() => (active = item.href)} 102 + > 103 + {item.name} 104 + </a> 105 + </nav> 106 + {/each} 107 + </div> 108 + 109 + <div class="navbar-end h-10 scale-75"> 110 + <ThemeToggle /> 111 + </div> 112 + </div> 113 + </div>
+64
src/lib/components/Services.svelte
··· 1 + <script lang="ts"> 2 + import { reveal } from '$lib/actions/reveal'; 3 + 4 + const services = [ 5 + { 6 + name: 'Digital Marketing', 7 + icon: '/images/icons/digitalmarketing.png', 8 + description: 9 + "Unlock the full potential of your online presence with our comprehensive digital marketing solutions. In today's hyper-connected world, standing out in the digital landscape is essential for success." 10 + }, 11 + { 12 + name: 'Website Development', 13 + icon: '/images/icons/webdevelopment.png', 14 + description: 15 + "Embark on a digital journey with a captivating online presence crafted by our expert website development team. In today's digital era, your website serves as the cornerstone of your brand." 16 + }, 17 + { 18 + name: 'Social Media Management', 19 + icon: '/images/icons/socialmedia.png', 20 + description: 21 + "Elevate your brand's online presence and engage with your audience like never before with our expert social media management services. In today's fast-paced digital landscape." 22 + }, 23 + { 24 + name: 'App Development', 25 + icon: '/images/icons/appdevelopment.png', 26 + description: 27 + "Empower your business and connect with your audience on-the-go with our custom app development services. In today's mobile-centric world, having a tailored mobile application is essential." 28 + }, 29 + { 30 + name: 'Video Editing', 31 + icon: '/images/icons/videoediting.png', 32 + description: 33 + "Transform your raw footage into captivating visual stories with our professional video editing services. In today's digital landscape, video content reigns supreme, captivating audiences." 34 + }, 35 + { 36 + name: 'Consulting', 37 + icon: '/images/icons/consulting.png', 38 + description: 39 + "Empower your business with expert guidance and strategic insights from our seasoned consulting team. In today's fast-paced and ever-changing business landscape, navigating challenges and seizing opportunities." 40 + } 41 + ]; 42 + </script> 43 + 44 + <div id="services" class="mt-10 flex flex-col items-center justify-center md:mt-20" use:reveal> 45 + <div class="flex flex-col items-center justify-center"> 46 + <h1 class="text-center font-urbanist text-2xl font-semibold md:text-5xl">Our Services</h1> 47 + <span class="text-md mt-2 px-2 text-center font-urbanist md:mt-4 md:px-5 md:text-xl"> 48 + Uncover new paths, explore opportunities and chart your success with us. 49 + </span> 50 + </div> 51 + <div class="container mt-10 grid gap-10 p-4 md:grid-cols-2 xl:grid-cols-3"> 52 + {#each services as item (item.name)} 53 + <div class="card max-w-2xl shadow-sm transition duration-300 hover:-translate-y-1"> 54 + <div class="card-body"> 55 + <div class="h-16 w-16 rounded-full bg-gradient-to-t from-base-300/20 to-base-content/10"> 56 + <img class="p-4" src={item.icon} alt={item.name} /> 57 + </div> 58 + <h2 class="card-title font-urbanist text-3xl font-black">{item.name}</h2> 59 + <p class="text-md font-urbanist font-medium opacity-60">{item.description}</p> 60 + </div> 61 + </div> 62 + {/each} 63 + </div> 64 + </div>
+82
src/lib/components/Team.svelte
··· 1 + <script lang="ts"> 2 + import { reveal } from '$lib/actions/reveal'; 3 + 4 + const team = [ 5 + { 6 + name: 'Jack', 7 + profile: 8 + 'https://images.unsplash.com/photo-1566492031773-4f4e44671857?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80', 9 + position: 'Founder & CEO' 10 + }, 11 + { 12 + name: 'John', 13 + profile: 14 + 'https://images.unsplash.com/photo-1463453091185-61582044d556?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80', 15 + position: 'CoFounder & CTO' 16 + }, 17 + { 18 + name: 'Emily', 19 + profile: 20 + 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80', 21 + position: 'Head of Growth' 22 + }, 23 + { 24 + name: 'Sam', 25 + profile: 26 + 'https://images.unsplash.com/photo-1615109398623-88346a601842?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80', 27 + position: 'App Developer' 28 + }, 29 + { 30 + name: 'Antonio', 31 + profile: 32 + 'https://images.unsplash.com/photo-1600486913747-55e5470d6f40?ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80', 33 + position: 'Web Developer' 34 + }, 35 + { 36 + name: 'Mark', 37 + profile: 38 + 'https://images.unsplash.com/photo-1567784177951-6fa58317e16b?ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80', 39 + position: 'Video Editor' 40 + }, 41 + { 42 + name: 'Chris', 43 + profile: 44 + 'https://images.unsplash.com/photo-1544723795-3fb6469f5b39?q=80&w=256&h=256&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D', 45 + position: 'Web Developer' 46 + }, 47 + { 48 + name: 'Christopher', 49 + profile: 50 + 'https://images.unsplash.com/photo-1568602471122-7832951cc4c5?q=80&w=256&h=256&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D', 51 + position: 'Video Editor' 52 + }, 53 + { 54 + name: 'Albert', 55 + profile: 56 + 'https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=256&h=256&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D', 57 + position: 'App Developer' 58 + } 59 + ]; 60 + </script> 61 + 62 + <div id="team" class="flex flex-col items-center justify-center" use:reveal> 63 + <div class="flex flex-col items-center justify-center"> 64 + <h1 class="text-center font-urbanist text-2xl font-semibold md:text-5xl">Our Team</h1> 65 + <span class="text-md mt-4 px-2 text-center font-urbanist md:mt-4 md:px-5 md:text-xl"> 66 + our passionate team collaborates seamlessly to create solutions. 67 + </span> 68 + </div> 69 + <div class="mt-10 grid gap-8 md:grid-cols-2 xl:grid-cols-3"> 70 + {#each team as item (item.name)} 71 + <div class="card w-80 border border-base-content/10 shadow-sm lg:w-96"> 72 + <figure class="pt-10"> 73 + <img src={item.profile} alt={item.name} class="h-44 w-44 rounded-full" /> 74 + </figure> 75 + <div class="card-body items-center text-center"> 76 + <h2 class="card-title font-urbanist font-bold">{item.name}</h2> 77 + <h2 class="font-urbanist font-semibold opacity-70">{item.position}</h2> 78 + </div> 79 + </div> 80 + {/each} 81 + </div> 82 + </div>
+116
src/lib/components/Testimonial.svelte
··· 1 + <script lang="ts"> 2 + import { onMount } from 'svelte'; 3 + import { reveal } from '$lib/actions/reveal'; 4 + 5 + const testimonials = [ 6 + { 7 + name: 'Peter', 8 + position: 'Lead Developer', 9 + quote: 10 + 'I really like this marketing agency. They are very professional and know how to get the job done. I would recommend them to anyone.', 11 + image: 12 + 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80' 13 + }, 14 + { 15 + name: 'David', 16 + position: 'Marketing Manager', 17 + quote: 18 + 'Wonderful team, great service and always available to answer any queries. I always recommend them to my friends.', 19 + image: 20 + 'https://images.unsplash.com/photo-1566492031773-4f4e44671857?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80' 21 + }, 22 + { 23 + name: 'Marc', 24 + position: 'Human Resources', 25 + quote: 'The best way to market your business. Impressive results.', 26 + image: 27 + 'https://images.unsplash.com/photo-1463453091185-61582044d556?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80' 28 + }, 29 + { 30 + name: 'Lisa', 31 + position: 'Accounting Manager', 32 + quote: 33 + 'First I was not sure about them but now I am a fan. My website is ranking on top of google.', 34 + image: 35 + 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80' 36 + } 37 + ]; 38 + 39 + let track = $state<HTMLDivElement>(); 40 + let active = $state(0); 41 + 42 + function goTo(index: number) { 43 + if (!track) return; 44 + // Scroll the carousel's own horizontal axis only. `scrollIntoView` would 45 + // walk up to every scrollable ancestor — including the window — and yank 46 + // the whole page's vertical scroll to bring this section into view, which 47 + // hijacks manual scrolling and nav-link smooth scrolls every time the 48 + // carousel auto-advances. 49 + track.scrollTo({ left: index * track.clientWidth, behavior: 'smooth' }); 50 + active = index; 51 + } 52 + 53 + // Track which slide is centered as the user scrolls/swipes. 54 + function onScroll() { 55 + if (!track) return; 56 + active = Math.round(track.scrollLeft / track.clientWidth); 57 + } 58 + 59 + onMount(() => { 60 + const id = setInterval(() => { 61 + goTo((active + 1) % testimonials.length); 62 + }, 5000); 63 + return () => clearInterval(id); 64 + }); 65 + </script> 66 + 67 + <div id="testimonial" class="my-20 flex flex-col items-center justify-center md:my-32" use:reveal> 68 + <div class="flex flex-col items-center justify-center"> 69 + <h1 class="text-center font-urbanist text-2xl font-semibold md:text-5xl">Testimonials</h1> 70 + <span class="text-md mt-2 px-2 font-urbanist md:mt-4 md:px-5 md:text-xl"> 71 + What Our Clients Says About Us 72 + </span> 73 + </div> 74 + 75 + <div class="w-full max-w-7xl py-10"> 76 + <div 77 + bind:this={track} 78 + onscroll={onScroll} 79 + class="carousel h-96 w-full rounded-xl border border-base-content/10" 80 + > 81 + {#each testimonials as item (item.name)} 82 + <div class="carousel-item w-full"> 83 + <div class="flex h-full w-full items-center justify-center"> 84 + <figure class="mx-10 mt-10"> 85 + <blockquote 86 + class="text-center font-urbanist leading-8 font-bold text-base-content lg:text-3xl" 87 + > 88 + <p>"{item.quote}"</p> 89 + </blockquote> 90 + <div class="mt-10 flex flex-col items-center"> 91 + <img class="mx-auto h-14 w-14 rounded-full" src={item.image} alt={item.name} /> 92 + <div class="mt-4 flex justify-center gap-2 lg:tracking-widest"> 93 + <div>{item.name}</div> 94 + <div class="text-base-content/50">{item.position}</div> 95 + </div> 96 + </div> 97 + </figure> 98 + </div> 99 + </div> 100 + {/each} 101 + </div> 102 + 103 + <div class="mt-6 flex w-full justify-center gap-2"> 104 + {#each testimonials as item, index (index)} 105 + <button 106 + type="button" 107 + aria-label={`Go to testimonial from ${item.name}`} 108 + onclick={() => goTo(index)} 109 + class="h-3 w-3 rounded-full transition-colors {active === index 110 + ? 'bg-base-content' 111 + : 'bg-base-content/30'}" 112 + ></button> 113 + {/each} 114 + </div> 115 + </div> 116 + </div>
+38
src/lib/components/ThemeToggle.svelte
··· 1 + <script lang="ts"> 2 + import { onMount } from 'svelte'; 3 + 4 + let isDark = $state(false); 5 + 6 + onMount(() => { 7 + isDark = document.documentElement.getAttribute('data-theme') === 'dark'; 8 + }); 9 + 10 + function toggle() { 11 + isDark = !isDark; 12 + const theme = isDark ? 'dark' : 'light'; 13 + document.documentElement.setAttribute('data-theme', theme); 14 + try { 15 + localStorage.setItem('theme', theme); 16 + } catch { 17 + /* localStorage may be unavailable */ 18 + } 19 + } 20 + </script> 21 + 22 + <label class="btn swap btn-circle swap-rotate btn-ghost"> 23 + <input type="checkbox" checked={isDark} onchange={toggle} aria-label="Toggle dark mode" /> 24 + 25 + <!-- sun icon (shown in light mode) --> 26 + <svg class="swap-off h-6 w-6 fill-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 27 + <path 28 + d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z" 29 + /> 30 + </svg> 31 + 32 + <!-- moon icon (shown in dark mode) --> 33 + <svg class="swap-on h-6 w-6 fill-current" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> 34 + <path 35 + d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z" 36 + /> 37 + </svg> 38 + </label>
+1 -1
src/routes/+layout.svelte
··· 1 1 <script lang="ts"> 2 2 import './layout.css'; 3 - import favicon from '$lib/assets/favicon.svg'; 3 + import favicon from '$lib/assets/favicon.ico'; 4 4 5 5 let { children } = $props(); 6 6 </script>
+9
src/routes/+page.server.ts
··· 1 + import type { PageServerLoad } from './$types'; 2 + 3 + export const load: PageServerLoad = ({ request }) => { 4 + const host = request.headers.get('host') ?? ''; 5 + console.log(host); 6 + const pumpkin = host.includes('pds.dad'); 7 + 8 + return { pumpkin }; 9 + };
+31 -2
src/routes/+page.svelte
··· 1 - <h1>Welcome to SvelteKit</h1> 2 - <p>Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the documentation</p> 1 + <script lang="ts"> 2 + import NavBar from '$lib/components/NavBar.svelte'; 3 + import Hero from '$lib/components/Hero.svelte'; 4 + import LogoClouds from '$lib/components/LogoClouds.svelte'; 5 + import Services from '$lib/components/Services.svelte'; 6 + import Testimonial from '$lib/components/Testimonial.svelte'; 7 + import Team from '$lib/components/Team.svelte'; 8 + import Contact from '$lib/components/Contact.svelte'; 9 + import type { PageProps } from './$types'; 10 + 11 + let { data }: PageProps = $props(); 12 + const { pumpkin } = data; 13 + </script> 14 + 15 + <svelte:head> 16 + <title>Bailey Townsend | Software Developer</title> 17 + <meta 18 + name="description" 19 + content="Award winning digital agency — digital marketing solutions for ambitious brands." 20 + /> 21 + </svelte:head> 22 + 23 + <div class="p-2 md:px-10"> 24 + <NavBar /> 25 + <Hero {pumpkin} /> 26 + <LogoClouds /> 27 + <Services /> 28 + <Testimonial /> 29 + <Team /> 30 + <Contact /> 31 + </div>
+34
src/routes/layout.css
··· 1 + @import url('https://fonts.googleapis.com/css2?family=Urbanist:ital,wght@0,100..900;1,100..900&display=swap'); 1 2 @import 'tailwindcss'; 2 3 @plugin '@tailwindcss/forms'; 3 4 @plugin '@tailwindcss/typography'; 5 + @plugin 'daisyui' { 6 + themes: 7 + light --default, 8 + dark --prefersdark; 9 + } 10 + 11 + @theme { 12 + --font-urbanist: 'Urbanist', sans-serif; 13 + } 14 + 15 + /* Scroll-reveal: elements start hidden and animate in when scrolled into view. 16 + Driven by the `use:reveal` action, which adds `.is-visible`. */ 17 + .reveal { 18 + opacity: 0; 19 + transform: translateY(1.5rem); 20 + transition: 21 + opacity 0.7s ease-out, 22 + transform 0.7s ease-out; 23 + will-change: opacity, transform; 24 + } 25 + 26 + .reveal.is-visible { 27 + opacity: 1; 28 + transform: none; 29 + } 30 + 31 + @media (prefers-reduced-motion: reduce) { 32 + .reveal { 33 + opacity: 1; 34 + transform: none; 35 + transition: none; 36 + } 37 + }
static/images/icons/appdevelopment.png

This is a binary file and will not be displayed.

static/images/icons/consulting.png

This is a binary file and will not be displayed.

static/images/icons/digitalmarketing.png

This is a binary file and will not be displayed.

static/images/icons/socialmedia.png

This is a binary file and will not be displayed.

static/images/icons/videoediting.png

This is a binary file and will not be displayed.

static/images/icons/webdevelopment.png

This is a binary file and will not be displayed.

+2
static/images/logo/google.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 272 92" width="272" height="92"><path fill="#EA4335" d="M115.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18C71.25 34.32 81.24 25 93.5 25s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44S80.99 39.2 80.99 47.18c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#FBBC05" d="M163.75 47.18c0 12.77-9.99 22.18-22.25 22.18s-22.25-9.41-22.25-22.18c0-12.85 9.99-22.18 22.25-22.18s22.25 9.32 22.25 22.18zm-9.74 0c0-7.98-5.79-13.44-12.51-13.44s-12.51 5.46-12.51 13.44c0 7.9 5.79 13.44 12.51 13.44s12.51-5.55 12.51-13.44z"/><path fill="#4285F4" d="M209.75 26.34v39.82c0 16.38-9.66 23.07-21.08 23.07-10.75 0-17.22-7.19-19.66-13.07l8.48-3.53c1.51 3.61 5.21 7.87 11.17 7.87 7.31 0 11.84-4.51 11.84-13v-3.19h-.34c-2.18 2.69-6.38 5.04-11.68 5.04-11.09 0-21.25-9.66-21.25-22.09 0-12.52 10.16-22.26 21.25-22.26 5.29 0 9.49 2.35 11.68 4.96h.34v-3.61h9.25zm-8.56 20.92c0-7.81-5.21-13.52-11.84-13.52-6.72 0-12.35 5.71-12.35 13.52 0 7.73 5.63 13.36 12.35 13.36 6.63 0 11.84-5.63 11.84-13.36z"/><path fill="#34A853" d="M225 3v65h-9.5V3h9.5z"/><path fill="#EA4335" d="M262.02 54.48l7.56 5.04c-2.44 3.61-8.32 9.83-18.48 9.83-12.6 0-22.01-9.74-22.01-22.18 0-13.19 9.49-22.18 20.92-22.18 11.51 0 17.14 9.16 18.98 14.11l1.01 2.52-29.65 12.28c2.27 4.45 5.8 6.72 10.75 6.72 4.96 0 8.4-2.44 10.92-6.14zm-23.27-7.98l19.82-8.23c-1.09-2.77-4.37-4.7-8.23-4.7-4.95 0-11.84 4.37-11.59 12.93z"/><path fill="#4285F4" d="M35.29 41.41V32H67c.31 1.64.47 3.58.47 5.68 0 7.06-1.93 15.79-8.15 22.01-6.05 6.3-13.78 9.66-24.02 9.66C16.32 69.35.36 53.89.36 34.91.36 15.93 16.32.47 35.3.47c10.5 0 17.98 4.12 23.6 9.49l-6.64 6.64c-4.03-3.78-9.49-6.72-16.97-6.72-13.86 0-24.7 11.17-24.7 25.03 0 13.86 10.84 25.03 24.7 25.03 8.99 0 14.11-3.61 17.39-6.89 2.66-2.66 4.41-6.46 5.1-11.65l-22.49.01z"/></svg>
+8
static/images/logo/microsoft.svg
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 337.6 72"> 3 + <path fill="#737373" d="M140.4,14.4v43.2h-7.5V23.7h-0.1l-13.4,33.9h-5l-13.7-33.9h-0.1v33.9h-6.9V14.4h10.8l12.4,32h0.2l13.1-32H140.4 z M146.6,17.7c0-1.2,0.4-2.2,1.3-3c0.9-0.8,1.9-1.2,3.1-1.2c1.3,0,2.4,0.4,3.2,1.2s1.3,1.8,1.3,3c0,1.2-0.4,2.2-1.3,3 c-0.9,0.8-1.9,1.2-3.2,1.2s-2.3-0.4-3.1-1.2C147.1,19.8,146.6,18.8,146.6,17.7z M154.7,26.6v31h-7.3v-31H154.7z M176.8,52.3 c1.1,0,2.3-0.2,3.6-0.8c1.3-0.5,2.5-1.2,3.6-2v6.8c-1.2,0.7-2.5,1.2-4,1.5c-1.5,0.3-3.1,0.5-4.9,0.5c-4.6,0-8.3-1.4-11.1-4.3 c-2.9-2.9-4.3-6.6-4.3-11c0-5,1.5-9.1,4.4-12.3c2.9-3.2,7-4.8,12.4-4.8c1.4,0,2.8,0.2,4.1,0.5c1.4,0.3,2.5,0.8,3.3,1.2v7 c-1.1-0.8-2.3-1.5-3.4-1.9c-1.2-0.4-2.4-0.7-3.6-0.7c-2.9,0-5.2,0.9-7,2.8s-2.6,4.4-2.6,7.6c0,3.1,0.9,5.6,2.6,7.3 C171.6,51.4,173.9,52.3,176.8,52.3z M204.7,26.1c0.6,0,1.1,0,1.6,0.1s0.9,0.2,1.2,0.3v7.4c-0.4-0.3-0.9-0.6-1.7-0.8 s-1.6-0.4-2.7-0.4c-1.8,0-3.3,0.8-4.5,2.3s-1.9,3.8-1.9,7v15.6h-7.3v-31h7.3v4.9h0.1c0.7-1.7,1.7-3,3-4 C201.2,26.6,202.8,26.1,204.7,26.1z M207.9,42.6c0-5.1,1.5-9.2,4.3-12.2c2.9-3,6.9-4.5,12-4.5c4.8,0,8.6,1.4,11.3,4.3 s4.1,6.8,4.1,11.7c0,5-1.5,9-4.3,12c-2.9,3-6.8,4.5-11.8,4.5c-4.8,0-8.6-1.4-11.4-4.2C209.3,51.3,207.9,47.4,207.9,42.6z M215.5,42.3c0,3.2,0.7,5.7,2.2,7.4s3.6,2.6,6.3,2.6c2.6,0,4.7-0.8,6.1-2.6c1.4-1.7,2.1-4.2,2.1-7.6c0-3.3-0.7-5.8-2.1-7.6 c-1.4-1.7-3.5-2.6-6-2.6c-2.7,0-4.7,0.9-6.2,2.7C216.2,36.5,215.5,39,215.5,42.3z M250.5,34.8c0,1,0.3,1.9,1,2.5 c0.7,0.6,2.1,1.3,4.4,2.2c2.9,1.2,5,2.5,6.1,3.9c1.2,1.5,1.8,3.2,1.8,5.3c0,2.9-1.1,5.2-3.4,7c-2.2,1.8-5.3,2.6-9.1,2.6 c-1.3,0-2.7-0.2-4.3-0.5c-1.6-0.3-2.9-0.7-4-1.2v-7.2c1.3,0.9,2.8,1.7,4.3,2.2c1.5,0.5,2.9,0.8,4.2,0.8c1.6,0,2.9-0.2,3.6-0.7 c0.8-0.5,1.2-1.2,1.2-2.3c0-1-0.4-1.8-1.2-2.6c-0.8-0.7-2.4-1.5-4.6-2.4c-2.7-1.1-4.6-2.4-5.7-3.8s-1.7-3.2-1.7-5.4 c0-2.8,1.1-5.1,3.3-6.9c2.2-1.8,5.1-2.7,8.6-2.7c1.1,0,2.3,0.1,3.6,0.4s2.5,0.6,3.4,0.9V34c-1-0.6-2.1-1.2-3.4-1.7 c-1.3-0.5-2.6-0.7-3.8-0.7c-1.4,0-2.5,0.3-3.2,0.8C250.9,33.1,250.5,33.8,250.5,34.8z M266.9,42.6c0-5.1,1.5-9.2,4.3-12.2 c2.9-3,6.9-4.5,12-4.5c4.8,0,8.6,1.4,11.3,4.3s4.1,6.8,4.1,11.7c0,5-1.5,9-4.3,12c-2.9,3-6.8,4.5-11.8,4.5c-4.8,0-8.6-1.4-11.4-4.2 C268.4,51.3,266.9,47.4,266.9,42.6z M274.5,42.3c0,3.2,0.7,5.7,2.2,7.4s3.6,2.6,6.3,2.6c2.6,0,4.7-0.8,6.1-2.6 c1.4-1.7,2.1-4.2,2.1-7.6c0-3.3-0.7-5.8-2.1-7.6c-1.4-1.7-3.5-2.6-6-2.6c-2.7,0-4.7,0.9-6.2,2.7C275.3,36.5,274.5,39,274.5,42.3z M322.9,32.6h-10.9v25h-7.4v-25h-5.2v-6h5.2v-4.3c0-3.2,1.1-5.9,3.2-8s4.8-3.1,8.1-3.1c0.9,0,1.7,0.1,2.4,0.1s1.3,0.2,1.8,0.4v6.3 c-0.2-0.1-0.7-0.3-1.3-0.5c-0.6-0.2-1.3-0.3-2.1-0.3c-1.5,0-2.7,0.5-3.5,1.4c-0.8,0.9-1.2,2.4-1.2,4.2v3.7h10.9v-7l7.3-2.2v9.2h7.4 v6h-7.4v14.5c0,1.9,0.4,3.2,1,4c0.7,0.8,1.8,1.2,3.3,1.2c0.4,0,0.9-0.1,1.5-0.3c0.6-0.2,1.1-0.4,1.5-0.7v6c-0.5,0.3-1.2,0.5-2.3,0.7 c-1.1,0.2-2.1,0.3-3.2,0.3c-3.1,0-5.4-0.8-6.9-2.4c-1.5-1.6-2.3-4.1-2.3-7.4L322.9,32.6L322.9,32.6z"/> 4 + <rect fill="#F25022" width="34.2" height="34.2"/> 5 + <rect x="37.8" fill="#7FBA00" width="34.2" height="34.2"/> 6 + <rect y="37.8" fill="#00A4EF" width="34.2" height="34.2"/> 7 + <rect x="37.8" y="37.8" fill="#FFB900" width="34.2" height="34.2"/> 8 + </svg>
+1
static/images/logo/netflix.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="1024" height="276.742" viewBox="0 0 1024 276.742"><path d="M140.803 258.904c-15.404 2.705-31.079 3.516-47.294 5.676l-49.458-144.856v151.073c-15.404 1.621-29.457 3.783-44.051 5.945v-276.742h41.08l56.212 157.021v-157.021h43.511v258.904zm85.131-157.558c16.757 0 42.431-.811 57.835-.811v43.24c-19.189 0-41.619 0-57.835.811v64.322c25.405-1.621 50.809-3.785 76.482-4.596v41.617l-119.724 9.461v-255.39h119.724v43.241h-76.482v58.105zm237.284-58.104h-44.862v198.908c-14.594 0-29.188 0-43.239.539v-199.447h-44.862v-43.242h132.965l-.002 43.242zm70.266 55.132h59.187v43.24h-59.187v98.104h-42.433v-239.718h120.808v43.241h-78.375v55.133zm148.641 103.507c24.594.539 49.456 2.434 73.51 3.783v42.701c-38.646-2.434-77.293-4.863-116.75-5.676v-242.689h43.24v201.881zm109.994 49.457c13.783.812 28.377 1.623 42.43 3.242v-254.58h-42.43v251.338zm231.881-251.338l-54.863 131.615 54.863 145.127c-16.217-2.162-32.432-5.135-48.648-7.838l-31.078-79.994-31.617 73.51c-15.678-2.705-30.812-3.516-46.484-5.678l55.672-126.75-50.269-129.992h46.482l28.377 72.699 30.27-72.699h47.295z" fill="#d81f26"/></svg>
+4
static/images/logo/spotify.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <svg xmlns="http://www.w3.org/2000/svg" height="168px" width="559px" version="1.1" viewBox="0 0 559 168"> 3 + <path fill="#1ED760" d="m83.996 0.277c-46.249 0-83.743 37.493-83.743 83.742 0 46.251 37.494 83.741 83.743 83.741 46.254 0 83.744-37.49 83.744-83.741 0-46.246-37.49-83.738-83.745-83.738l0.001-0.004zm38.404 120.78c-1.5 2.46-4.72 3.24-7.18 1.73-19.662-12.01-44.414-14.73-73.564-8.07-2.809 0.64-5.609-1.12-6.249-3.93-0.643-2.81 1.11-5.61 3.926-6.25 31.9-7.288 59.263-4.15 81.337 9.34 2.46 1.51 3.24 4.72 1.73 7.18zm10.25-22.802c-1.89 3.072-5.91 4.042-8.98 2.152-22.51-13.836-56.823-17.843-83.448-9.761-3.453 1.043-7.1-0.903-8.148-4.35-1.04-3.453 0.907-7.093 4.354-8.143 30.413-9.228 68.222-4.758 94.072 11.127 3.07 1.89 4.04 5.91 2.15 8.976v-0.001zm0.88-23.744c-26.99-16.031-71.52-17.505-97.289-9.684-4.138 1.255-8.514-1.081-9.768-5.219-1.254-4.14 1.08-8.513 5.221-9.771 29.581-8.98 78.756-7.245 109.83 11.202 3.73 2.209 4.95 7.016 2.74 10.733-2.2 3.722-7.02 4.949-10.73 2.739zm94.56 3.072c-14.46-3.448-17.03-5.868-17.03-10.953 0-4.804 4.52-8.037 11.25-8.037 6.52 0 12.98 2.455 19.76 7.509 0.2 0.153 0.46 0.214 0.71 0.174 0.26-0.038 0.48-0.177 0.63-0.386l7.06-9.952c0.29-0.41 0.21-0.975-0.18-1.288-8.07-6.473-17.15-9.62-27.77-9.62-15.61 0-26.52 9.369-26.52 22.774 0 14.375 9.41 19.465 25.67 23.394 13.83 3.187 16.17 5.857 16.17 10.629 0 5.29-4.72 8.58-12.32 8.58-8.44 0-15.33-2.85-23.03-9.51-0.19-0.17-0.45-0.24-0.69-0.23-0.26 0.02-0.49 0.14-0.65 0.33l-7.92 9.42c-0.33 0.4-0.29 0.98 0.09 1.32 8.96 8 19.98 12.22 31.88 12.22 16.82 0 27.69-9.19 27.69-23.42 0.03-12.007-7.16-18.657-24.77-22.941l-0.03-0.013zm62.86-14.26c-7.29 0-13.27 2.872-18.21 8.757v-6.624c0-0.523-0.42-0.949-0.94-0.949h-12.95c-0.52 0-0.94 0.426-0.94 0.949v73.601c0 0.52 0.42 0.95 0.94 0.95h12.95c0.52 0 0.94-0.43 0.94-0.95v-23.23c4.94 5.53 10.92 8.24 18.21 8.24 13.55 0 27.27-10.43 27.27-30.369 0.02-19.943-13.7-30.376-27.26-30.376l-0.01 0.001zm12.21 30.375c0 10.149-6.25 17.239-15.21 17.239-8.85 0-15.53-7.41-15.53-17.239 0-9.83 6.68-17.238 15.53-17.238 8.81-0.001 15.21 7.247 15.21 17.237v0.001zm50.21-30.375c-17.45 0-31.12 13.436-31.12 30.592 0 16.972 13.58 30.262 30.91 30.262 17.51 0 31.22-13.39 31.22-30.479 0-17.031-13.62-30.373-31.01-30.373v-0.002zm0 47.714c-9.28 0-16.28-7.46-16.28-17.344 0-9.929 6.76-17.134 16.07-17.134 9.34 0 16.38 7.457 16.38 17.351 0 9.927-6.8 17.127-16.17 17.127zm68.27-46.53h-14.25v-14.566c0-0.522-0.42-0.948-0.94-0.948h-12.95c-0.52 0-0.95 0.426-0.95 0.948v14.566h-6.22c-0.52 0-0.94 0.426-0.94 0.949v11.127c0 0.522 0.42 0.949 0.94 0.949h6.22v28.795c0 11.63 5.79 17.53 17.22 17.53 4.64 0 8.49-0.96 12.12-3.02 0.3-0.16 0.48-0.48 0.48-0.82v-10.6c0-0.32-0.17-0.63-0.45-0.8-0.28-0.18-0.63-0.19-0.92-0.04-2.49 1.25-4.9 1.83-7.6 1.83-4.15 0-6.01-1.89-6.01-6.11v-26.76h14.25c0.52 0 0.94-0.426 0.94-0.949v-11.126c0.02-0.523-0.4-0.949-0.93-0.949l-0.01-0.006zm49.64 0.057v-1.789c0-5.263 2.02-7.61 6.54-7.61 2.7 0 4.87 0.536 7.3 1.346 0.3 0.094 0.61 0.047 0.85-0.132 0.25-0.179 0.39-0.466 0.39-0.77v-10.91c0-0.417-0.26-0.786-0.67-0.909-2.56-0.763-5.84-1.546-10.76-1.546-11.95 0-18.28 6.734-18.28 19.467v2.74h-6.22c-0.52 0-0.95 0.426-0.95 0.948v11.184c0 0.522 0.43 0.949 0.95 0.949h6.22v44.405c0 0.53 0.43 0.95 0.95 0.95h12.94c0.53 0 0.95-0.42 0.95-0.95v-44.402h12.09l18.52 44.402c-2.1 4.66-4.17 5.59-6.99 5.59-2.28 0-4.69-0.68-7.14-2.03-0.23-0.12-0.51-0.14-0.75-0.07-0.25 0.09-0.46 0.27-0.56 0.51l-4.39 9.63c-0.21 0.46-0.03 0.99 0.41 1.23 4.58 2.48 8.71 3.54 13.82 3.54 9.56 0 14.85-4.46 19.5-16.44l22.46-58.037c0.12-0.292 0.08-0.622-0.1-0.881-0.17-0.257-0.46-0.412-0.77-0.412h-13.48c-0.41 0-0.77 0.257-0.9 0.636l-13.81 39.434-15.12-39.46c-0.14-0.367-0.49-0.61-0.88-0.61h-22.12v-0.003zm-28.78-0.057h-12.95c-0.52 0-0.95 0.426-0.95 0.949v56.481c0 0.53 0.43 0.95 0.95 0.95h12.95c0.52 0 0.95-0.42 0.95-0.95v-56.477c0-0.523-0.42-0.949-0.95-0.949v-0.004zm-6.4-25.719c-5.13 0-9.29 4.152-9.29 9.281 0 5.132 4.16 9.289 9.29 9.289s9.28-4.157 9.28-9.289c0-5.128-4.16-9.281-9.28-9.281zm113.42 43.88c-5.12 0-9.11-4.115-9.11-9.112s4.04-9.159 9.16-9.159 9.11 4.114 9.11 9.107c0 4.997-4.04 9.164-9.16 9.164zm0.05-17.365c-4.67 0-8.2 3.71-8.2 8.253 0 4.541 3.51 8.201 8.15 8.201 4.67 0 8.2-3.707 8.2-8.253 0-4.541-3.51-8.201-8.15-8.201zm2.02 9.138l2.58 3.608h-2.18l-2.32-3.31h-1.99v3.31h-1.82v-9.564h4.26c2.23 0 3.69 1.137 3.69 3.051 0.01 1.568-0.9 2.526-2.21 2.905h-0.01zm-1.54-4.315h-2.37v3.025h2.37c1.18 0 1.89-0.579 1.89-1.514 0-0.984-0.71-1.511-1.89-1.511z"/> 4 + </svg>
+1 -1
svelte.config.js
··· 1 - import adapter from '@sveltejs/adapter-auto'; 1 + import adapter from '@sveltejs/adapter-node'; 2 2 3 3 /** @type {import('@sveltejs/kit').Config} */ 4 4 const config = {