diff --git a/package-lock.json b/package-lock.json index 7ba0f00..6659f94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,6 +122,7 @@ "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.6.0.tgz", "integrity": "sha512-iuFKDm8XPzNxPfRjhyU5/xKZmcRDzSuEghXDHHk4MjBV/wFL34GmYVBZnn9wmuoLBeS1qAw9ceMdaeJBPcB1QQ==", "license": "MIT", + "peer": true, "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", @@ -139,6 +140,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -151,6 +153,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "license": "MIT", + "peer": true, "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-util": "^1.13.0", @@ -184,6 +187,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.4.0.tgz", "integrity": "sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA==", "license": "MIT", + "peer": true, "dependencies": { "@azure/abort-controller": "^2.1.2" }, @@ -200,6 +204,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", "license": "MIT", + "peer": true, "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.2.0", @@ -215,6 +220,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -246,6 +252,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -258,6 +265,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "license": "MIT", + "peer": true, "dependencies": { "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", @@ -295,6 +303,7 @@ "resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz", "integrity": "sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==", "license": "MIT", + "peer": true, "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.3.0", @@ -314,6 +323,7 @@ "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.10.0.tgz", "integrity": "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==", "license": "MIT", + "peer": true, "dependencies": { "@azure-rest/core-client": "^2.3.3", "@azure/abort-controller": "^2.1.2", @@ -337,6 +347,7 @@ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", "license": "MIT", + "peer": true, "dependencies": { "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" @@ -350,6 +361,7 @@ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.6.3.tgz", "integrity": "sha512-sTjMtUm+bJpENU/1WlRzHEsgEHppZDZ1EtNyaOODg/sQBtMxxJzGB+MOCM+T2Q5Qe1fKBrdxUmjyRxm0r7Ez9w==", "license": "MIT", + "peer": true, "dependencies": { "@azure/msal-common": "16.4.1" }, @@ -362,6 +374,7 @@ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.4.1.tgz", "integrity": "sha512-Bl8f+w37xkXsYh7QRkAKCFGYtWMYuOVO7Lv+BxILrvGz3HbIEF22Pt0ugyj0QPOl6NLrHcnNUQ9yeew98P/5iw==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -371,6 +384,7 @@ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.2.tgz", "integrity": "sha512-DoeSJ9U5KPAIZoHsPywvfEj2MhBniQe0+FSpjLUTdWoIkI999GB5USkW6nNEHnIaLVxROHXvprWA1KzdS1VQ4A==", "license": "MIT", + "peer": true, "dependencies": { "@azure/msal-common": "16.4.1", "jsonwebtoken": "^9.0.0", @@ -1461,7 +1475,8 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.7.0.tgz", "integrity": "sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/@js-temporal/polyfill": { "version": "0.5.1", @@ -1789,7 +1804,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -2235,7 +2249,8 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz", "integrity": "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/bootstrap": { "version": "5.2.10", @@ -2312,7 +2327,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -2323,7 +2337,6 @@ "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "pg-protocol": "*", @@ -2335,6 +2348,7 @@ "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.23.tgz", "integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==", "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*" } @@ -2350,6 +2364,7 @@ "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz", "integrity": "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==", "license": "MIT", + "peer": true, "dependencies": { "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", @@ -2370,6 +2385,7 @@ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "license": "MIT", + "peer": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -2394,6 +2410,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", + "peer": true, "engines": { "node": ">= 14" } @@ -2527,7 +2544,6 @@ "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.1.tgz", "integrity": "sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==", "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.6", @@ -2669,13 +2685,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/bl": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.6.tgz", "integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==", "license": "MIT", + "peer": true, "dependencies": { "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", @@ -2749,6 +2767,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -2758,13 +2777,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "license": "MIT", + "peer": true, "dependencies": { "run-applescript": "^7.0.0" }, @@ -3140,6 +3161,7 @@ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", + "peer": true, "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" @@ -3156,6 +3178,7 @@ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -3168,6 +3191,7 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4020,6 +4044,7 @@ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "safe-buffer": "^5.0.1" } @@ -4190,6 +4215,7 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -4205,6 +4231,7 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.x" } @@ -4723,6 +4750,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -4736,6 +4764,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "4" @@ -4749,6 +4778,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4778,7 +4808,8 @@ "url": "https://feross.org/support" } ], - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/immutable": { "version": "5.1.5", @@ -4916,7 +4947,8 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/js-yaml": { "version": "4.1.1", @@ -4942,6 +4974,7 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", + "peer": true, "dependencies": { "jws": "^4.0.1", "lodash.includes": "^4.3.0", @@ -4964,6 +4997,7 @@ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", + "peer": true, "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -4975,6 +5009,7 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", + "peer": true, "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4993,43 +5028,50 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/loglevel": { "version": "1.9.2", @@ -5941,6 +5983,7 @@ "resolved": "https://registry.npmjs.org/mssql/-/mssql-11.0.1.tgz", "integrity": "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w==", "license": "MIT", + "peer": true, "dependencies": { "@tediousjs/connection-string": "^0.5.0", "commander": "^11.0.0", @@ -5961,6 +6004,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -5973,6 +6017,7 @@ "resolved": "https://registry.npmjs.org/tedious/-/tedious-18.6.2.tgz", "integrity": "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg==", "license": "MIT", + "peer": true, "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", @@ -6026,7 +6071,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/neotraverse": { "version": "0.6.18", @@ -6141,6 +6187,7 @@ "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "license": "MIT", + "peer": true, "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", @@ -6238,7 +6285,6 @@ "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", "license": "MIT", - "peer": true, "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", @@ -6446,6 +6492,7 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6.0" } @@ -6509,6 +6556,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", + "peer": true, "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -6774,7 +6822,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/rollup": { "version": "4.60.1", @@ -6825,6 +6874,7 @@ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -6850,20 +6900,21 @@ "url": "https://feross.org/support" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/sass": { "version": "1.99.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.1.5", @@ -7049,7 +7100,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/standardwebhooks": { "version": "1.0.0", @@ -7087,6 +7139,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -7180,6 +7233,7 @@ "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -7189,6 +7243,7 @@ "resolved": "https://registry.npmjs.org/tedious/-/tedious-19.2.1.tgz", "integrity": "sha512-pk1Q16Yl62iocuQB+RWbg6rFUFkIyzqOFQ6NfysCltRvQqKwfurgj8v/f2X+CKvDhSL4IJ0cCOfCHDg9PWEEYA==", "license": "MIT", + "peer": true, "dependencies": { "@azure/core-auth": "^1.7.2", "@azure/identity": "^4.2.1", @@ -7297,7 +7352,6 @@ "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" @@ -7329,7 +7383,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7670,6 +7723,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", + "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -8322,6 +8376,7 @@ "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", "license": "MIT", + "peer": true, "dependencies": { "is-wsl": "^3.1.0" }, @@ -8400,7 +8455,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/assets/css/main.scss b/src/assets/css/main.scss index a8720fb..531986a 100644 --- a/src/assets/css/main.scss +++ b/src/assets/css/main.scss @@ -32,45 +32,23 @@ $container-max-widths: ( :root { --total: 11; --radius: 40px; - --purple: hsl(262, 47%, 63%); - --purple-dark: hsl(262, 47%, 45%); - --purple-light: hsl(262, 80%, 82%); + --snow: hsl(13, 60%, 97%); + --lilac: hsl(262, 47%, 63%); + --purple: hsl(262, 47%, 45%); + --mauve: hsl(262, 80%, 82%); + --orchid: hsl(291, 47%, 60%); + --ice: hsl(160, 24%, 85%); --hero-bg: hsl(258, 30%, 10%); - --aqua: hsl(173, 55%, 74%); - --honeydew: hsl(149, 64%, 92%); - --sand: hsl(45, 41%, 84%); - --pink: hsl(354, 65%, 59%); + --edit: hsl(45, 100%, 71%); + --gold: hsl(45, 94%, 21%); + --delete: hsl(354, 71%, 63%); + --dark-red: hsl(354, 61%, 21%); } html { scroll-behavior: smooth; } -/* -------------------------------------------------- - View Transitions --------------------------------------------------- */ -@view-transition { - navigation: auto; -} - -::view-transition-group(card-image) { - animation-duration: 300ms; - animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -} - -::view-transition-old(card-image), -::view-transition-new(card-image) { - width: 100%; - height: 100%; - object-fit: cover; -} - -/* Optional: fade everything else */ -::view-transition-old(root), -::view-transition-new(root) { - animation-duration: 150ms; -} - /* -------------------------------------------------- Layout -------------------------------------------------- */ @@ -92,31 +70,56 @@ body { } /* -------------------------------------------------- - Energy Wheel + Typography -------------------------------------------------- */ -.energy-wheel { - position: relative; - width: calc(var(--radius) * 2); - height: calc(var(--radius) * 2); - margin: 5px 0 10px; +.copy-small { + font-size: 0.75rem; + opacity: 0.87; + + @media (min-width: 768px) { font-size: 0.85rem; } + @media (min-width: 1400px) { font-size: 1rem; } } -.energy-wheel-item { - position: absolute; - width: 25px; - height: 25px; - top: 50%; - left: 50%; - --angle: calc(360deg / var(--total) * var(--i)); - transform: rotate(var(--angle)) translateX(var(--radius)) rotate(calc(-1 * var(--angle))); +.eyebrow { + font-size: 0.8rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; +} - &:first-of-type { - z-index: 100; - } +.fs-7 { font-size: 0.9rem !important; } +.py-6 { padding-top: 5rem; padding-bottom: 5rem; } +.hover-white:hover { color: #fff !important; } + +$colors: mauve, lilac, "purple", "orchid", "snow"; +@each $c in $colors { + .text-#{$c} { color: var(--#{$c}); } +} + +.text-gradient { + background: linear-gradient( + 90deg, + var(--mauve), + var(--lilac), + var(--purple), + var(--snow), + var(--orchid), + var(--ice) + ); + background-size: 300% 300%; + -webkit-background-clip: text; + background-clip: text; + color: transparent; + animation: gradientShift 12s ease-in-out infinite; +} + +@keyframes gradientShift { + 0%, 100% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } } /* -------------------------------------------------- - Navbar & Icons + Navbar -------------------------------------------------- */ .navbar { background-color: rgb(126, 87, 194) !important; @@ -124,6 +127,10 @@ body { z-index: 1030; } +.navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'%3e%3cpath fill='%23FFFAFA' d='M68.1 149.7C68.1 132 82.4 117.7 100.1 117.7C136.4 117.7 172.5 118.9 207.9 120.2C319.4 125.6 429.1 119.8 540.8 119.4C558.5 119.4 572.8 133.7 572.8 151.4C572.8 169.1 558.5 183.4 540.8 183.4C503.3 183.4 465.7 184.2 427.7 185C319 189.4 208.4 183.2 100.1 181.7C82.4 181.7 68.1 167.4 68.1 149.7zM552 348C479.7 341.2 405.9 353.8 333 353.2C254.4 353.3 174.2 342.4 96.9 347.5C79.3 348.7 64 335.3 62.9 317.7C61.8 300.1 75.1 284.8 92.7 283.7C173.8 278.2 253.1 289.1 333 289.2C408 289.4 482.4 276.8 558 284.2C575.6 285.9 588.5 301.5 586.8 319.1C585.1 336.7 569.6 349.6 552 348zM465.5 506.2C414 506.6 162.5 506.4 106.4 506.5C64.7 506.3 64.4 442.7 106.4 442.5C211 442.7 438.9 442.4 540.4 442C558.1 442 572.4 456.3 572.4 474C567.3 525.1 500.2 500.5 465.4 506.2z'/%3e%3c/svg%3e"); +} + .sticky-top { position: sticky; top: 0; @@ -144,107 +151,26 @@ body { } } -/* -------------------------------------------------- - Typography --------------------------------------------------- */ -.copy-small { - font-size: 0.75rem; - opacity: 0.87; +.navbar .logo-svg > svg { + width: 8rem; + transition: width 0.3s ease; + animation: logo-shrink linear both; + animation-timeline: scroll(); + animation-range: 0px 100px; - @media (min-width: 768px) { - font-size: 0.85rem; + @media (max-width: 1024px) { width: 20vw; } +} + +@keyframes logo-shrink { + to { + width: 5rem; + @media (max-width: 1024px) { width: 10vw; } } - @media (min-width: 1400px) { - font-size: 1rem; - } -} - -/* -------------------------------------------------- - Modal & Cards --------------------------------------------------- */ -.modal-xl { - @media (min-width: 768px) { - max-width: 95vw; - } - @media (min-width: 1400px) { - max-width: 85vw; - } - @media (min-width: 1921px) { - max-width: 75vw; - } -} - -.cl-modalBackdrop { - background-color: rgba(1, 11, 18, 0.8); -} - -.image-grow { - transition: box-shadow 350ms ease, transform 350ms ease; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.24); - - &:hover, - &:focus { - box-shadow: 0 8px 10px rgba(0, 0, 0, 0.2); - transform: translateY(-0.9rem) scale(1.02); - } -} - -.col:has(.image-grow:hover) .inventory-button { - opacity: 0.20; - transition: opacity 350ms ease; -} - -.inventory-button { - // add transition to existing rule - transition: opacity 350ms ease; -} - -.card-modal { - background-color: rgba(1, 11, 18, 0.8); - cursor: default; -} - -.pokedex-page { - position: relative; - top: 50px; - z-index: 99; - - @media (min-width: 768px) { - top: 100px !important; - } -} - -.modal-nav-btn { - position: fixed; - top: 50%; - transform: translateY(-50%); - z-index: 1060; /* above modal backdrop (1050) */ - background: rgba(255,255,255,0.1); - border: 1px solid rgba(255,255,255,0.2); - color: white; - border-radius: 50%; - width: 48px; - height: 48px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: background 0.2s; - backdrop-filter: blur(4px); -} -.modal-nav-btn:hover { background: rgba(255,255,255,0.25); } -.modal-nav-btn.d-none { display: none !important; } -.modal-nav-prev { left: 12px; } -.modal-nav-next { right: 12px; } - -@media (max-width: 768px) { - .modal-nav-btn { display: none !important; } /* use swipe on mobile */ } /* -------------------------------------------------- Navigation Tabs & Tier Colors -------------------------------------------------- */ - .nav-link { font-weight: 600; color: rgba(255, 255, 255, 0.67); @@ -272,11 +198,11 @@ body { } $tiers: ( - nm: hsla(88, 50%, 67%, 1), - lp: hsla(66, 70%, 68%, 1), - mp: hsla(54, 100%, 73%, 1), - hp: hsla(46, 100%, 65%, 1), - dmg: hsla(36, 100%, 65%, 1), + nm: hsla(88, 50%, 67%, 1), + lp: hsla(66, 70%, 68%, 1), + mp: hsla(54, 100%, 73%, 1), + hp: hsla(46, 100%, 65%, 1), + dmg: hsla(36, 100%, 65%, 1), vendor: hsla(262, 47%, 63%, 1) ); @@ -285,9 +211,7 @@ $tiers: ( border-bottom: 3px solid $color; &:hover, - &:focus { - background-color: rgba($color, 0.67); - } + &:focus { background-color: rgba($color, 0.67); } &.active { background-color: $color; @@ -295,275 +219,14 @@ $tiers: ( } } - /* price-row alert left borders */ .nav-#{$name} div.alert { border-left: 3px solid $color; } } -// ── Inventory form condition buttons ────────────────────────────────────── -// Reuses $tiers map so colors stay in sync with nav tabs and price-row - -$cond-text: ( - nm: hsla(88, 50%, 67%, 1), - lp: hsla(66, 70%, 68%, 1), - mp: hsla(54, 100%, 73%, 1), - hp: hsla(46, 100%, 65%, 1), - dmg: hsla(36, 100%, 65%, 1), -); - -@each $name, $color in $tiers { - @if map-has-key($cond-text, $name) { - .btn-check:checked + .btn-cond-#{$name} { - background-color: $color; - border-color: $color; - color: rgba(0, 0, 0, 0.94); - } - - .btn-cond-#{$name} { - border-color: rgba($color, 0.4); - color: var(--bs-body-color); - background: transparent; - font-weight: 600; - transition: background-color 0.1s, border-color 0.1s; - } - - .btn-check:not(:checked) + .btn-cond-#{$name}:hover { - background-color: rgba($color, 0.67); - border-color: transparent; - } - } - } - -/* -------------------------------------------------- - Misc UI --------------------------------------------------- */ - -.dark-callout { - @media (min-width: 768px) { - background-color: rgba(44, 48, 59, 1); - } -} - -.price-area { - max-height: 75px; -} - -.card-image { - aspect-ratio: 23 / 32; - object-fit: cover; - z-index: 1; - cursor: pointer; -} - -/* Icon Sizes */ -.small-icon svg { max-height: 16px; width: 100%; margin-top: -0.25rem; } -.medium-icon svg { max-height: 32px; width: 100%; margin-left: -0.25rem; } - -/* Masked Image */ -.masked-image { - z-index: 1; - opacity: 1; - filter: brightness(0); -} - -/* Decorative Background */ -.starburst, -.whos-that-pokemon { - mix-blend-mode: lighten; - opacity: 0.1; - object-fit: cover; -} - -.whos-that-pokemon { - aspect-ratio: 1 / 1; -} - -/* SVG Generic Sizes */ -.energy-icon svg, -.rarity-icon-large svg, -.set-icon svg, -.edition-icon svg { - width: 2rem; - z-index: 999; - @media (min-width: 1024px) { - width: 2.5rem; - } -} - -.logo-svg > svg { - width: 10rem; - transition: width 0.3s ease; - animation: logo-shrink linear both; - animation-timeline: scroll(); - animation-range: 0px 100px; - - @media (max-width: 1024px) { - width: 20vw; - } -} - -@keyframes logo-shrink { - to { - width: 5rem; - - @media (max-width: 1024px) { - width: 10vw; - } - } -} - -.rarity-icon-large svg, -.set-icon svg { - margin-bottom: -0.25rem; -} - -.filter-icon svg, -.search-button { - width: 1.5rem; - fill: rgba(255,255,255,0.87); - stroke: rgba(255,255,255,0.87); -} - -/* Form states */ -.form-check-input:checked { - background-color: var(--bs-success); - border-color: var(--bs-success-border-subtle); -} - -.form-check-input:focus { - border-color: var(--bs-success); - box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); -} - -/* Back to Top */ -#btn-back-to-top { - position: fixed; - bottom: 5vh; - right: 5vw; - display: none; - z-index: 2; -} - -.top-icon svg { - width: 2rem; - height: 2rem; - fill: var(--bs-light-bg-subtle); - stroke: var(--bs-light-bg-subtle); -} - -#btn-back-to-top:hover .top-icon svg { - fill: var(--bs-light-border-subtle); - stroke: var(--bs-light-border-subtle); -} - -.delete-svg { - width: 1.25rem; - height: 1.25rem; - fill: var(--bs-danger); - stroke: var(--bs-danger); -} - -.edit-svg { - width: 1.25rem; - height: 1.25rem; - fill: var(--bs-warning); - stroke: var(--bs-warning); -} - -.btn:hover .delete-svg { - fill: var(--bs-danger-border-subtle); - stroke: var(--bs-danger-border-subtle); -} - -.btn:hover .edit-svg { - fill: var(--bs-warning-border-subtle); - stroke: var(--bs-warning-border-subtle); -} - -.shadow-filter { - filter: - drop-shadow(0 5px 5px rgba(0, 0, 0, 0.3)) - drop-shadow(0 4px 6px rgba(0, 0, 0, 0.2)); -} - -.tooltip.volatility-popover .tooltip-inner { - background: #1d1f21; - color: #e9ecef; - padding: 0.9rem 1rem; - border-radius: 0.6rem; - text-align: left; - max-width: 260px; - border: 1px solid rgba(255, 255, 255, 0.08); -} - -.tooltip.volatility-popover .tooltip-arrow::before { - border-top-color: #1d1f21 !important; -} - -/* -------------------------------------------------- - Pricing --------------------------------------------------- */ - -.price-row { - position: relative; - z-index: 2; - margin-top: -1.25rem; - border-radius: 0.33rem; - background: linear-gradient( - 90deg, - map-get($tiers, nm) 21%, - map-get($tiers, lp) 42%, - map-get($tiers, mp) 63%, - map-get($tiers, hp) 74%, - map-get($tiers, dmg) 85% - ); -} - -.inventory-button, .btn-vendor { - background-color: hsl(262, 47%, 63%); - color: #fff; -} - -.inventory-button { - margin-bottom: -2.25rem; - margin-right: -0.25rem; - z-index: 2; -} - -.inventory-button:hover, .btn-vendor:hover { - background-color: hsl(262, 47%, 55%); - color: #fff; -} - -.fs-7 { - font-size: 0.9rem !important; -} - -/* Price Label */ -.price-label { - font-size: 0.69rem; - font-weight: 600; - color: rgba(0, 0, 0, 0.87); - background-color: hsl(88, 50%, 67%); - border-radius: 0.33rem 0 0 0.33rem; - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.35); - - @media (min-width: 768px) { font-size: 0.72rem; } - @media (min-width: 996px) { font-size: 0.75rem; } - @media (min-width: 1200px) { font-size: 0.8rem; } - @media (min-width: 1600px) { font-size: 1rem; } - - &:nth-of-type(2) { background-color: hsl(66, 70%, 68%); } - &:nth-of-type(3) { background-color: hsl(54, 100%, 73%); } - &:nth-of-type(4) { background-color: hsl(46, 100%, 65%); } - &:last-of-type { background-color: hsl(36, 100%, 65%); border-radius: 0.33rem; } -} - /* -------------------------------------------------- Search -------------------------------------------------- */ - @media (max-width: 768px) { .search-box, .search-button { @@ -573,54 +236,7 @@ $cond-text: ( .search-container { @media (max-width: 768px) { - width: 100%; - } -} - -::placeholder { - color: rgba(255, 255, 255, 0.7) !important; - opacity: 1 !important; - font-size: 1rem; - line-height: 2rem; -} - -.search-input { - color: rgba(255,255,255,.94); - border: 1px solid rgba(94, 53, 177, 1); -} - -.form-control:focus { - border-color: rgb(179, 157, 219); - outline: 0; - box-shadow: 0 0 0 0.15rem rgb(179, 157, 219, .67); -} - -/* Sticky Search Bar */ -.search-bar { - position: fixed; - bottom: 0; - width: 100%; - height: 48px; - z-index: 1030; - transform: rotate(180deg); - - @media (min-width: 768px) { - position: sticky; - top: 0; - min-width: 45vw; - max-width: 45vw; - transform: rotate(0); - } -} - -.facet-list { - max-height: 185px; - overflow-y: auto; -} - -.search-container { - @media (max-width: 768px) { - margin-top: 0.25rem; + margin-top: 0.25rem; width: 100%; animation: search-inline-mobile linear both; animation-timeline: scroll(); @@ -629,14 +245,8 @@ $cond-text: ( } @keyframes search-inline-mobile { - from { - width: 100%; - } - to { - margin-top: 0 !important; - width: auto; - flex: 1; - } + from { width: 100%; } + to { margin-top: 0 !important; width: auto; flex: 1; } } .navbar .container { @@ -662,9 +272,456 @@ $cond-text: ( } } +.search-bar { + position: fixed; + bottom: 0; + width: 100%; + height: 48px; + z-index: 1030; + transform: rotate(180deg); + + @media (min-width: 768px) { + position: sticky; + top: 0; + min-width: 45vw; + max-width: 45vw; + transform: rotate(0); + } +} + +.search-input { + color: rgba(255, 255, 255, .94); + border: 1px solid rgba(94, 53, 177, 1); +} + +::placeholder { + color: rgba(255, 255, 255, 0.7) !important; + opacity: 1 !important; + font-size: 1rem; + line-height: 2rem; +} + +.form-control:focus { + border-color: rgb(179, 157, 219); + outline: 0; + box-shadow: 0 0 0 0.15rem rgb(179, 157, 219, .67); +} + +.facet-list { + max-height: 185px; + overflow-y: auto; +} + /* -------------------------------------------------- - Circles + Buttons -------------------------------------------------- */ +.btn-purple { + background-color: var(--lilac); + border-color: var(--purple); + color: #fff; + &:hover { background-color: var(--purple); color: var(--snow); } +} + +.btn-purple-secondary { + background-color: transparent; + border-color: var(--lilac); + color: var(--mauve); + + &:hover { + background-color: hsla(262, 47%, 63%, 0.15); + border-color: var(--mauve); + color: var(--mauve); + } +} + +.btn-edit { + background-color: var(--edit); + border-color: var(--edit); + color: #fff; + + > span, + > svg.nav-icon { + fill: var(--gold); + stroke: var(--gold); + color: var(--gold); + } + + &:hover { + background-color: var(--gold); + border-color: var(--gold); + color: #fff; + + > span, + > svg.nav-icon { + fill: var(--edit); + stroke: var(--edit); + } + } +} + +.btn-delete { + background-color: var(--delete); + border-color: var(--delete); + color: #fff; + + &:hover { + background-color: var(--dark-red); + border-color: var(--dark-red); + color: #fff; + } +} + +.btn-outline-success svg.nav-icon { + fill: var(--bs-success); + stroke: var(--bs-success); +} + +.btn.btn-outline-success:hover, +.btn.btn-outline-success:hover svg.nav-icon { + fill: var(--bs-success-border-subtle); + stroke: var(--bs-success-border-subtle); +} + +// ── Inventory form condition buttons ────────────────────────────────────── +$cond-text: ( + nm: hsla(88, 50%, 67%, 1), + lp: hsla(66, 70%, 68%, 1), + mp: hsla(54, 100%, 73%, 1), + hp: hsla(46, 100%, 65%, 1), + dmg: hsla(36, 100%, 65%, 1), +); + +@each $name, $color in $tiers { + @if map-has-key($cond-text, $name) { + .btn-cond-#{$name} { + border-color: rgba($color, 0.4); + color: var(--bs-body-color); + background: transparent; + font-weight: 600; + transition: background-color 0.1s, border-color 0.1s; + + &:hover { background-color: rgba($color, 0.67); border-color: transparent; } + } + + .btn-check:checked + .btn-cond-#{$name} { + background-color: $color; + border-color: $color; + color: rgba(0, 0, 0, 0.94); + } + } +} + +/* -------------------------------------------------- + Forms +-------------------------------------------------- */ +.form-check-input { + &:checked { + background-color: var(--bs-success); + border-color: var(--bs-success-border-subtle); + } + + &:focus { + border-color: var(--bs-success); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); + } +} + +/* -------------------------------------------------- + Pricing +-------------------------------------------------- */ +.price-row { + position: relative; + z-index: 2; + margin-top: -1.25rem; + border-radius: 0.33rem; + background: linear-gradient( + 90deg, + map-get($tiers, nm) 21%, + map-get($tiers, lp) 42%, + map-get($tiers, mp) 63%, + map-get($tiers, hp) 74%, + map-get($tiers, dmg) 85% + ); +} + +.edit-bar { + position: relative; + z-index: 2; + padding: 0.5rem; + margin-top: -1.25rem !important; + border-radius: 0.33rem; + background: var(--bs-border-color); +} + +.price-label { + font-size: 0.69rem; + font-weight: 600; + color: rgba(0, 0, 0, 0.87); + background-color: hsl(88, 50%, 67%); + border-radius: 0.33rem 0 0 0.33rem; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.35); + + @media (min-width: 768px) { font-size: 0.72rem; } + @media (min-width: 996px) { font-size: 0.75rem; } + @media (min-width: 1200px) { font-size: 0.8rem; } + @media (min-width: 1600px) { font-size: 1rem; } + + &:nth-of-type(2) { background-color: hsl(66, 70%, 68%); } + &:nth-of-type(3) { background-color: hsl(54, 100%, 73%); } + &:nth-of-type(4) { background-color: hsl(46, 100%, 65%); } + &:last-of-type { background-color: hsl(36, 100%, 65%); border-radius: 0.33rem; } +} + +.price-area { max-height: 75px; } + +.inventory-button, +.btn-vendor { + background-color: hsl(262, 47%, 63%); + color: #fff; + + &:hover { + background-color: hsl(262, 47%, 55%); + color: #fff; + } +} + +.inventory-button { + margin-bottom: -2.25rem; + margin-right: -0.25rem; + z-index: 2; + transition: opacity 350ms ease; +} + +/* -------------------------------------------------- + Cards & Modal +-------------------------------------------------- */ +.card-image { + aspect-ratio: 23 / 32; + object-fit: cover; + z-index: 1; + cursor: pointer; +} + +.image-grow { + transition: box-shadow 350ms ease, transform 350ms ease; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.24); + + &:hover, + &:focus { + box-shadow: 0 8px 10px rgba(0, 0, 0, 0.2); + transform: translateY(-0.9rem) scale(1.02); + } +} + +.col:has(.image-grow:hover) .inventory-button { + opacity: 0.20; + transition: opacity 350ms ease; +} + +.modal-xl { + @media (min-width: 768px) { max-width: 95vw; } + @media (min-width: 1400px) { max-width: 85vw; } + @media (min-width: 1921px) { max-width: 75vw; } +} + +.cl-modalBackdrop { + background-color: rgba(1, 11, 18, 0.8); +} + +.card-modal { + background-color: rgba(1, 11, 18, 0.8); + cursor: default; +} + +.pokedex-page { + position: relative; + top: 50px; + z-index: 99; + + @media (min-width: 768px) { top: 100px !important; } +} + +.modal-nav-btn { + position: fixed; + top: 50%; + transform: translateY(-50%); + z-index: 1060; + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + color: white; + border-radius: 50%; + width: 48px; + height: 48px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: background 0.2s; + backdrop-filter: blur(4px); + + &:hover { background: rgba(255, 255, 255, 0.25); } + &.d-none { display: none !important; } +} + +.modal-nav-prev { left: 12px; } +.modal-nav-next { right: 12px; } + +@media (max-width: 768px) { + .modal-nav-btn { display: none !important; } +} + +.card-nav-prev, +.card-nav-next { + transition: all 0.2s ease-in-out; + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 36px; + padding: 0.375rem 0.5rem; + will-change: opacity; + + &:hover:not(:disabled) { + background-color: var(--bs-secondary); + border-color: var(--bs-secondary); + color: white; + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + + &:active:not(:disabled) { transform: translateY(0); } + &:disabled { cursor: not-allowed; } + + @media (max-width: 768px) { + min-width: 40px; + padding: 0.5rem; + } +} + +/* -------------------------------------------------- + SVG Icons +-------------------------------------------------- */ +.small-icon svg { max-height: 16px; width: 100%; margin-top: -0.25rem; } +.medium-icon svg { max-height: 32px; width: 100%; margin-left: -0.25rem; } + +.energy-icon svg, +.rarity-icon-large svg, +.set-icon svg, +.edition-icon svg { + width: 2rem; + z-index: 999; + @media (min-width: 1024px) { width: 2.5rem; } +} + +.rarity-icon-large svg, +.set-icon svg { + margin-bottom: -0.25rem; +} + +.filter-icon svg, +.search-button { + width: 1.5rem; + fill: rgba(255, 255, 255, 0.87); + stroke: rgba(255, 255, 255, 0.87); +} + +.delete-svg { + width: 1.25rem; + height: 1.25rem; + fill: var(--dark-red); + stroke: var(--dark-red); + filter: url(#shadow); +} + +.edit-svg { + width: 1.25rem; + height: 1.25rem; + fill: var(--gold); + stroke: var(--gold); + filter: url(#shadow); +} + +.btn:hover .delete-svg { + fill: var(--delete); + stroke: var(--delete); +} + +.btn:hover .edit-svg { + fill: var(--edit); + stroke: var(--edit); +} + +.shadow-filter { + filter: + drop-shadow(0 5px 5px rgba(0, 0, 0, 0.3)) + drop-shadow(0 4px 6px rgba(0, 0, 0, 0.2)); +} + +.top-icon svg { + width: 2rem; + height: 2rem; + fill: var(--bs-light-bg-subtle); + stroke: var(--bs-light-bg-subtle); +} + +#btn-back-to-top:hover .top-icon svg { + fill: var(--bs-light-border-subtle); + stroke: var(--bs-light-border-subtle); +} + +/* -------------------------------------------------- + Back to Top +-------------------------------------------------- */ +#btn-back-to-top { + position: fixed; + bottom: 5vh; + right: 5vw; + display: none; + z-index: 2; +} + +/* -------------------------------------------------- + Tooltips +-------------------------------------------------- */ +.tooltip.volatility-popover { + .tooltip-inner { + background: #1d1f21; + color: #e9ecef; + padding: 0.9rem 1rem; + border-radius: 0.6rem; + text-align: left; + max-width: 260px; + border: 1px solid rgba(255, 255, 255, 0.08); + } + + .tooltip-arrow::before { + border-top-color: #1d1f21 !important; + } +} + +/* -------------------------------------------------- + Decorative / Misc +-------------------------------------------------- */ +.dark-callout { + @media (min-width: 768px) { + background-color: rgba(44, 48, 59, 1); + } +} + +.masked-image { + z-index: 1; + opacity: 1; + filter: brightness(0); + animation: pokemon-pulse 2s ease-in-out infinite; +} + +.starburst, +.whos-that-pokemon { + mix-blend-mode: lighten; + opacity: 0.1; + object-fit: cover; +} + +.whos-that-pokemon { aspect-ratio: 1 / 1; } %circle-base { width: 1rem; @@ -691,126 +748,406 @@ $cond-text: ( } /* -------------------------------------------------- - Buttons + Hero -------------------------------------------------- */ +.hero { background-color: var(--hero-bg); } -.btn-warning > span, -.btn-warning > svg.nav-icon { - fill: var(--bs-warning-border-subtle); - stroke: var(--bs-warning-border-subtle); - color: var(--bs-warning-border-subtle); +.hero-bg { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 60% 50% at 80% 50%, hsla(262, 70%, 40%, 0.25) 0%, transparent 70%), + radial-gradient(ellipse 40% 60% at 20% 80%, hsla(190, 70%, 30%, 0.15) 0%, transparent 70%); + pointer-events: none; } -.btn.btn-warning:hover > span, -.btn.btn-warning:hover > svg.nav-icon { - fill: var(--bs-warning-bg-subtle); - stroke: var(--bs-warning-bg-subtle); +.hero-wrapper { isolation: isolate; } + +.hero-cards-mockup { + position: relative; + height: 340px; } -.btn-outline-success svg.nav-icon { - fill: var(--bs-success); - stroke: var(--bs-success); +.mockup-card { + position: absolute; + width: 225px; + aspect-ratio: 23 / 32; + overflow: hidden; + border: 1px solid hsla(262, 50%, 50%, 0.3); } -.btn.btn-outline-success:hover, -.btn.btn-outline-success:hover svg.nav-icon { - fill: var(--bs-success-border-subtle); - stroke: var(--bs-success-border-subtle); +.mockup-card--1 { left: 20%; top: 2.5%; transform: rotate(-8deg); } +.mockup-card--2 { left: 40%; top: 7%; transform: rotate(2deg); z-index: 1; } +.mockup-card--3 { left: 60%; top: 0; transform: rotate(10deg); } + +.price-chip { + position: absolute; + bottom: 2.5%; + padding: 0.35rem 0.75rem; + border-radius: 2rem; + font-size: 0.8rem; + z-index: 2; +} + +.price-chip--nm { left: 30%; background: hsl(88, 50%, 67%); color: rgba(0, 0, 0, .87); } +.price-chip--lp { left: 64%; background: hsl(66, 70%, 68%); color: rgba(0, 0, 0, .87); } + +.stats-bar { background-color: hsla(262, 20%, 12%, 0.6); } + +/* -------------------------------------------------- + Feature Cards +-------------------------------------------------- */ +.feature-card { + background-color: hsla(262, 20%, 12%, 0.6); + border: 1px solid hsla(262, 30%, 40%, 0.2); + transition: border-color 0.2s, transform 0.2s; + + &:hover { + border-color: hsla(262, 50%, 60%, 0.5); + transform: translateY(-2px); + } +} + +.feature-icon { + color: var(--mauve); + width: 2.5rem; + height: 2.5rem; + display: flex; + align-items: center; } /* -------------------------------------------------- - Card Modal Navigation + Premium Section -------------------------------------------------- */ +.premium-section { + background-color: hsla(258, 30%, 8%, 0.8); + overflow-x: clip; +} -.card-nav-prev, -.card-nav-next { - transition: all 0.2s ease-in-out; +.premium-item { + background-color: hsla(262, 20%, 14%, 0.8); + border: 1px solid hsla(262, 30%, 35%, 0.2); + transition: border-color 0.2s; + + &:hover { border-color: hsla(262, 50%, 60%, 0.4); } +} + +.badge-coming { + display: inline-block; + flex-shrink: 0; + padding: 0.2rem 0.55rem; + border-radius: 2rem; + font-size: 0.65rem; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; + background: hsla(262, 60%, 60%, 0.2); + color: var(--mauve); + border: 1px solid hsla(262, 50%, 60%, 0.3); + margin-top: 0.1rem; +} + +.compare-icon { font-size: 2.5rem; line-height: 1; } + +.cta-section { + background: linear-gradient(180deg, transparent, hsla(262, 30%, 10%, 0.8)); +} + +footer .logo-svg > svg { width: var(--logo-width, 8rem); } + +/* -------------------------------------------------- + Energy Wheel +-------------------------------------------------- */ +.energy-wheel { + position: relative; + width: calc(var(--radius) * 2); + height: calc(var(--radius) * 2); + margin: 5px 0 10px; +} + +.energy-wheel-item { + position: absolute; + width: 25px; + height: 25px; + top: 50%; + left: 50%; + --angle: calc(360deg / var(--total) * var(--i)); + transform: rotate(var(--angle)) translateX(var(--radius)) rotate(calc(-1 * var(--angle))); + + &:first-of-type { z-index: 100; } +} + +/* -------------------------------------------------- + Inventory Grid & List +-------------------------------------------------- */ +#gridView { row-gap: 1.5rem; } + +.inv-grid-card { + position: relative; + height: 100%; + display: flex; + flex-direction: column; +} + +.inv-grid-media { cursor: pointer; } + +.inv-grid-body { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 1rem; + padding: .85rem .15rem 0; +} + +.inv-grid-main { + min-width: 0; + flex: 1; +} + +.inv-grid-title { + font-size: 1.9rem; + line-height: 1.05; + font-weight: 500; + margin-bottom: .4rem; + color: var(--bs-emphasis-color); +} + +.inv-grid-meta { display: flex; flex-direction: column; gap: .2rem; } + +.inv-grid-submeta { + display: flex; + flex-wrap: wrap; + gap: .35rem; + font-size: .9rem; + color: var(--snow); +} + +.inv-grid-price { + min-width: 112px; + text-align: right; + flex-shrink: 0; + color: #f3f3f3 !important; +} + +.inv-grid-trend, +.inv-list-price-line { + display: flex; + align-items: center; + justify-content: flex-end; + gap: .35rem; + font-weight: 700; + line-height: 1.1; +} + +.inv-grid-value, +.inv-list-price { + font-size: 1.15rem; + color: #111; +} + +.inv-grid-trend, +.inv-list-price-line { + &.up .inv-grid-arrow { color: #2e7d32; } + &.down { color: #c62828; } +} + +.inv-grid-delta, +.inv-list-delta { + text-align: right; + &.up { color: #2e7d32; } + &.down { color: #c62828; } +} + +.inv-grid-qty, +.inv-list-qty { + margin-top: .35rem; + font-size: .9rem; + color: #1ea7a1; +} + +.inv-grid-cart, +.inv-list-cart { + position: absolute; + right: .35rem; + bottom: .1rem; + width: 2.15rem; + height: 2.15rem; + border-radius: 999px; + border: 1px solid #4cb7b3; + background: transparent; + color: #38a9a5; display: inline-flex; align-items: center; justify-content: center; - min-width: 36px; - padding: 0.375rem 0.5rem; - will-change: opacity; + transition: .15s ease; - &:hover:not(:disabled) { - background-color: var(--bs-secondary); - border-color: var(--bs-secondary); - color: white; - transform: translateY(-1px); - box-shadow: 0 2px 4px rgba(0,0,0,0.1); - } - - &:active:not(:disabled) { transform: translateY(0); } - &:disabled { cursor: not-allowed; } + &:hover { background: rgba(76, 183, 179, .08); color: #2a9a96; } } +#tableView { background: transparent; } + +.inv-list-wrap { border-radius: 0; overflow: visible; } + +.inv-list-table { + --bs-table-bg: transparent; + --bs-table-hover-bg: transparent; + --bs-table-color: inherit; + margin: 0; + + tbody, + tr, + td { border: 0 !important; background: transparent !important; } +} + +.inv-list-row + .inv-list-row .inv-list-cardcell { + border-top: 1px solid rgba(0, 0, 0, .08) !important; +} + +.inv-list-cardcell { padding: 0; } + +.inv-list-card { + position: relative; + display: flex; + align-items: center; + gap: 1rem; + min-height: 116px; + padding: .8rem 4.5rem .8rem .35rem; + background: #f3f3f3; + border: 1px solid rgba(0, 0, 0, .08); + border-radius: .35rem; +} + +.inv-list-thumb { + width: 70px; + flex: 0 0 70px; + cursor: pointer; + + img { width: 100%; display: block; border-radius: .25rem; } +} + +.inv-list-info { min-width: 0; flex: 1; } + +.inv-list-name { + font-size: 1.1rem; + font-weight: 700; + color: #111827; + margin-bottom: .35rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: none; + + &:hover { text-decoration: underline; } +} + +.inv-list-meta { display: flex; flex-direction: column; gap: .1rem; font-size: .95rem; color: #4b5563; } + +.inv-list-setlink { color: #5b6f8f; text-decoration: underline; text-underline-offset: 2px; } + +.inv-list-condition { + margin-top: .35rem; + display: flex; + flex-wrap: wrap; + gap: .35rem; + font-size: .95rem; + color: #2b7a78; +} + +.inv-list-right { margin-left: auto; min-width: 140px; text-align: right; padding-right: 1rem; } + @media (max-width: 768px) { - .card-nav-prev, - .card-nav-next { - min-width: 40px; - padding: 0.5rem; - } + .inv-grid-body { flex-direction: column; gap: .5rem; } + .inv-grid-price { min-width: 0; text-align: left; } + .inv-grid-trend { justify-content: flex-start; } + .inv-list-card { align-items: flex-start; padding-right: 3.75rem; } + .inv-list-right { min-width: 0; padding-right: .25rem; } } /* -------------------------------------------------- - Swipe Animation + Pokémon / Interactive -------------------------------------------------- */ +.pokemon-transition { transition: opacity 0.4s ease; } + +.pokemon-clickable { + cursor: pointer; + + &:focus-visible { + outline: 3px solid #ffc107; + outline-offset: 4px; + border-radius: 4px; + } +} + +@keyframes pokemon-pulse { + 0%, 100% { filter: brightness(0) drop-shadow(0 0 6px var(--bs-info-border-subtle)); } + 50% { filter: brightness(0) drop-shadow(0 0 18px var(--bs-info)); } +} + +.view-toggle-btn { + text-decoration: none; + color: var(--bs-secondary-color) !important; + + &.active, + &:hover { color: var(--bs-body-color) !important; } + + &.active svg, + &:hover svg { color: var(--bs-body-color); } +} + +#catalogList .list-group-item.active { + background-color: rgba(186, 104, 200, .5) !important; + color: var(--snow) !important; +} + +/* -------------------------------------------------- + View Transitions +-------------------------------------------------- */ +@view-transition { + navigation: auto; +} + +::view-transition-group(card-image) { + animation-duration: 300ms; + animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +::view-transition-old(card-image), +::view-transition-new(card-image) { + width: 100%; + height: 100%; + object-fit: cover; +} + +::view-transition-old(root), +::view-transition-new(root) { + animation-duration: 150ms; +} -/* Smooth the hero image morph */ ::view-transition-group(card-hero) { animation-duration: 350ms; animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } -/* Fade the old image out quickly so it doesn't ghost */ -::view-transition-old(card-hero) { - display: none; -} +::view-transition-old(card-hero) { display: none; } -/* Fade the new image in after it's in position */ ::view-transition-new(card-hero) { animation-duration: 350ms; animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } -/* Suppress the default full-page crossfade so only the card morphs */ ::view-transition-old(root), -::view-transition-new(root) { - animation: none; -} +::view-transition-new(root) { animation: none; } -/* Sliding out (old content) */ -::view-transition-old(.modal-content) { - animation: slide-out 200ms ease-in forwards; -} +::view-transition-old(.modal-content) { animation: slide-out 200ms ease-in forwards; } +::view-transition-new(.modal-content) { animation: slide-in 200ms ease-out forwards; } -/* Sliding in (new content) */ -::view-transition-new(.modal-content) { - animation: slide-in 200ms ease-out forwards; -} +#cardModal[data-nav-direction="next"]::view-transition-old(.modal-content) { animation: slide-out-left 200ms ease-in forwards; } +#cardModal[data-nav-direction="next"]::view-transition-new(.modal-content) { animation: slide-in-right 200ms ease-out forwards; } +#cardModal[data-nav-direction="prev"]::view-transition-old(.modal-content) { animation: slide-out-right 200ms ease-in forwards; } +#cardModal[data-nav-direction="prev"]::view-transition-new(.modal-content) { animation: slide-in-left 200ms ease-out forwards; } -/* Direction-aware — set via dataset.navDirection */ -#cardModal[data-nav-direction="next"]::view-transition-old(.modal-content) { - animation: slide-out-left 200ms ease-in forwards; -} -#cardModal[data-nav-direction="next"]::view-transition-new(.modal-content) { - animation: slide-in-right 200ms ease-out forwards; -} -#cardModal[data-nav-direction="prev"]::view-transition-old(.modal-content) { - animation: slide-out-right 200ms ease-in forwards; -} -#cardModal[data-nav-direction="prev"]::view-transition-new(.modal-content) { - animation: slide-in-left 200ms ease-out forwards; -} - -/* The silhouette fades out while the colour image blooms in */ - -::view-transition-old(pokemon-reveal) { - animation: 300ms ease-in both fade-to-white; -} -::view-transition-new(pokemon-reveal) { - animation: 500ms ease-out both bloom-in; -} +::view-transition-old(pokemon-reveal) { animation: 300ms ease-in both fade-to-white; } +::view-transition-new(pokemon-reveal) { animation: 500ms ease-out both bloom-in; } @keyframes fade-to-white { to { opacity: 0; filter: brightness(3); } @@ -821,165 +1158,6 @@ $cond-text: ( to { opacity: 1; filter: brightness(1) saturate(1); transform: scale(1); } } - /* ── Utilities ── */ -$colors: purple-light, "aqua", "honeydew", "cyan", "pink", "sand"; - -@each $c in $colors { - .text-#{$c} { - color: var(--#{$c}); - } -} - - .btn-purple { - background-color: var(--purple); - border-color: var(--purple-dark); - color: #fff; - &:hover { background-color: var(--purple-dark); border-color: var(--purple-dark); color: #fff; } - } - - .btn-purple-secondary { - background-color: transparent; - border-color: var(--purple); - color: var(--purple-light); - &:hover { - background-color: hsla(262, 47%, 63%, 0.15); - border-color: var(--purple-light); - color: var(--purple-light); - } -} - - .text-gradient { - background: linear-gradient( - 90deg, - var(--purple-light), - var(--aqua), - var(--honeydew), - var(--purple), - var(--pink), - ); - background-size: 300% 300%; - -webkit-background-clip: text; - background-clip: text; - color: transparent; - animation: gradientShift 12s ease-in-out infinite; - } - - @keyframes gradientShift { - 0% { background-position: 0% 50%; } - 50% { background-position: 100% 50%; } - 100% { background-position: 0% 50%; } - } - .eyebrow { - font-size: 0.8rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; - } - .py-6 { padding-top: 5rem; padding-bottom: 5rem; } - .hover-white:hover { color: #fff !important; } - - /* ── Hero ── */ - .hero { - background-color: var(--hero-bg); - } - .hero-bg { - position: absolute; - inset: 0; - background: - radial-gradient(ellipse 60% 50% at 80% 50%, hsla(262, 70%, 40%, 0.25) 0%, transparent 70%), - radial-gradient(ellipse 40% 60% at 20% 80%, hsla(190, 70%, 30%, 0.15) 0%, transparent 70%); - pointer-events: none; - } - - - - /* ── Hero card mockup ── */ - .hero-cards-mockup { - position: relative; - height: 340px; - } - .mockup-card { - position: absolute; - width: 225px; - aspect-ratio: 23 / 32; - overflow: hidden; /* clips the img to the card shape */ - border: 1px solid hsla(262, 50%, 50%, 0.3); - } - .mockup-card--1 { left: 20%; top: 2.5%; transform: rotate(-8deg); } - .mockup-card--2 { left: 40%; top: 7%; transform: rotate(2deg); z-index: 1; } - .mockup-card--3 { left: 60%; top: 0; transform: rotate(10deg); } - .price-chip { - position: absolute; - bottom: 2.5%; - padding: 0.35rem 0.75rem; - border-radius: 2rem; - font-size: 0.8rem; - z-index: 2; - } - .price-chip--nm { left: 30%; background: hsl(88, 50%, 67%); color: rgba(0,0,0,.87); } - .price-chip--lp { left: 64%; background: hsl(66, 70%, 68%); color: rgba(0,0,0,.87); } - - /* ── Stats bar ── */ - .stats-bar { background-color: hsla(262, 20%, 12%, 0.6); } - - /* ── Feature cards ── */ - .feature-card { - background-color: hsla(262, 20%, 12%, 0.6); - border: 1px solid hsla(262, 30%, 40%, 0.2); - transition: border-color 0.2s, transform 0.2s; - &:hover { border-color: hsla(262, 50%, 60%, 0.5); transform: translateY(-2px); } - } - .feature-icon { - color: var(--purple-light); - width: 2.5rem; - height: 2.5rem; - display: flex; - align-items: center; - } - - /* ── Premium section ── */ - .premium-section { - background-color: hsla(258, 30%, 8%, 0.8); - overflow-x: clip; - } - - .premium-item { - background-color: hsla(262, 20%, 14%, 0.8); - border: 1px solid hsla(262, 30%, 35%, 0.2); - transition: border-color 0.2s; - &:hover { border-color: hsla(262, 50%, 60%, 0.4); } - } - - .badge-coming { - display: inline-block; - flex-shrink: 0; - padding: 0.2rem 0.55rem; - border-radius: 2rem; - font-size: 0.65rem; - font-weight: 700; - letter-spacing: 0.06em; - text-transform: uppercase; - background: hsla(262, 60%, 60%, 0.2); - color: var(--purple-light); - border: 1px solid hsla(262, 50%, 60%, 0.3); - margin-top: 0.1rem; - } - - /* ── Compare ── */ - .compare-icon { font-size: 2.5rem; line-height: 1; } - - /* ── CTA ── */ - .cta-section { - background: linear-gradient(180deg, transparent, hsla(262, 30%, 10%, 0.8)); - } - - /* ── Logo size override for footer ── */ - footer .logo-svg > svg { width: var(--logo-width, 8rem); } - -.hero-wrapper { - isolation: isolate; -} - /* -------------------------------------------------- Input Fix (Safari) diff --git a/src/components/Hero.astro b/src/components/Hero.astro index f9fdd3b..7d6d935 100644 --- a/src/components/Hero.astro +++ b/src/components/Hero.astro @@ -9,7 +9,7 @@ import type { sign } from 'node:crypto'
-
+

Pokémon Card Price Aggregator

The home of
@@ -39,13 +39,13 @@ import type { sign } from 'node:crypto'

-
\ No newline at end of file +
+ + \ No newline at end of file diff --git a/src/pages/404.astro b/src/pages/404.astro index a059fcc..d8d8fd0 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -19,7 +19,7 @@ const pokemon = pokedexList.find(p => p["#"] === randomNumber); const pokemonName = pokemon?.Name || "Unknown Pokémon"; --- -
+

404 - Page Not Found

@@ -79,32 +79,6 @@ const pokemonName = pokemon?.Name || "Unknown Pokémon";