diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d25799b --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +dist +.DS_Store +*.log +.vite diff --git a/index.html b/index.html index b190227..2283358 100644 --- a/index.html +++ b/index.html @@ -3,2597 +3,12 @@ -Deepstock — Survival Preparedness Advisor +Deepstock — Survival Preparedness Advisor - - - - - - - -
- - -
-

Deepstock

-

Preparedness, refined.

- -
- - -
-
-
📦 Supply Shock
-
🌾 Food Crisis
-
📈 Hyperinflation
-
🏦 Bank Crisis
-
⚡ Power Outage
-
💧 Water Failure
-
⚠️ Partial Collapse
-
🪖 War / Conflict
-
💀 Total Collapse
- - - - - - - - - - -
-
- - - - - -
-
- - -
-
🔒 Exclusive — DACH Region Priority Access
-
Secure your high-grade animal protein source
-
You indicated that your protein supply may not be secure in a crisis. We have identified an exclusive, verified source of high-grade animal protein — available with priority access for Deepstock members in Germany, Austria, and Switzerland.
- → Secure My Protein Source Now -
- - -
-
- 🧠 -
Your Personal Analysis
-
AI Generated
-
-
-
-
-
-
Generating your personalised analysis...
-
Takes up to 10 seconds
-
- -
- - -
- - -
- -
Personal Details
-
Enter your details and we'll email your complete survival plan immediately — including all recommendations below.
- -
- - - - - - - - - - - - - - - - - -
-
-
- - -
-
- - -
-
-
- - -
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
- - -
Helps us personalise your food recommendations.
-
- - -
-
- - -
🔒 Your data is never sold. Unsubscribe anytime. GDPR compliant.
-
- - -
-
-
- - - - -
-
-
-
⏱ Your Action Timeline
-
-
- - -
- - -
-

Why Deepstock?

-

Built by preparedness researchers and city-dwelling practitioners. Every recommendation is sourced, tested, and city-apartment-compatible.

-

* This site uses affiliate links. When you purchase through our links, we may earn a commission at no extra cost to you. This helps keep the platform free.

-
- -
- - - +
+ + diff --git a/index.original.html b/index.original.html new file mode 100644 index 0000000..8310169 --- /dev/null +++ b/index.original.html @@ -0,0 +1,3075 @@ + + + + + +Deepstock — Survival Preparedness Advisor + + + + + + + + + + + + + +
+ + +
+

Deepstock

+

Preparedness, refined.

+ +
+ + +
+
+
📦 Supply Shock
+
🌾 Food Crisis
+
📈 Hyperinflation
+
🏦 Bank Crisis
+
⚡ Power Outage
+
💧 Water Failure
+
⚠️ Partial Collapse
+
🪖 War / Conflict
+
💀 Total Collapse
+ + + + + + + + + + +
+
+ + + + + +
+
+ + +
+
🔒 Exclusive — DACH Region Priority Access
+
Secure your high-grade animal protein source
+
You indicated that your protein supply may not be secure in a crisis. We have identified an exclusive, verified source of high-grade animal protein — available with priority access for Deepstock members in Germany, Austria, and Switzerland.
+ → Secure My Protein Source Now +
+ + +
+
+ 🧠 +
Your Personal Analysis
+
AI Generated
+
+
+
+
+
+
Generating your personalised analysis...
+
Takes up to 10 seconds
+
+ +
+ + +
+ + +
+ +
Personal Details
+
Enter your details and we'll email your complete survival plan immediately — including all recommendations below.
+ +
+ + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
Helps us personalise your food recommendations.
+
+ + +
+
+ + +
🔒 Your data is never sold. Unsubscribe anytime. GDPR compliant.
+
+ + +
+
+
+ + + + +
+
+
+
⏱ Your Action Timeline
+
+
+ + +
+ + +
+

Why Deepstock?

+

Built by preparedness researchers and city-dwelling practitioners. Every recommendation is sourced, tested, and city-apartment-compatible.

+

* This site uses affiliate links. When you purchase through our links, we may earn a commission at no extra cost to you. This helps keep the platform free.

+
+ +
+ + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e55384b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1327 @@ +{ + "name": "kammergut", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "kammergut", + "version": "0.1.0", + "dependencies": { + "vue": "3.5.13" + }, + "devDependencies": { + "@vitejs/plugin-vue": "5.2.1", + "vite": "6.4.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz", + "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz", + "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz", + "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz", + "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz", + "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz", + "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz", + "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz", + "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz", + "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz", + "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz", + "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz", + "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz", + "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz", + "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz", + "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz", + "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz", + "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz", + "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz", + "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz", + "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz", + "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz", + "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz", + "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz", + "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz", + "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz", + "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.3", + "@rollup/rollup-android-arm64": "4.60.3", + "@rollup/rollup-darwin-arm64": "4.60.3", + "@rollup/rollup-darwin-x64": "4.60.3", + "@rollup/rollup-freebsd-arm64": "4.60.3", + "@rollup/rollup-freebsd-x64": "4.60.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", + "@rollup/rollup-linux-arm-musleabihf": "4.60.3", + "@rollup/rollup-linux-arm64-gnu": "4.60.3", + "@rollup/rollup-linux-arm64-musl": "4.60.3", + "@rollup/rollup-linux-loong64-gnu": "4.60.3", + "@rollup/rollup-linux-loong64-musl": "4.60.3", + "@rollup/rollup-linux-ppc64-gnu": "4.60.3", + "@rollup/rollup-linux-ppc64-musl": "4.60.3", + "@rollup/rollup-linux-riscv64-gnu": "4.60.3", + "@rollup/rollup-linux-riscv64-musl": "4.60.3", + "@rollup/rollup-linux-s390x-gnu": "4.60.3", + "@rollup/rollup-linux-x64-gnu": "4.60.3", + "@rollup/rollup-linux-x64-musl": "4.60.3", + "@rollup/rollup-openbsd-x64": "4.60.3", + "@rollup/rollup-openharmony-arm64": "4.60.3", + "@rollup/rollup-win32-arm64-msvc": "4.60.3", + "@rollup/rollup-win32-ia32-msvc": "4.60.3", + "@rollup/rollup-win32-x64-gnu": "4.60.3", + "@rollup/rollup-win32-x64-msvc": "4.60.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f07f49e --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "kammergut", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "3.5.13" + }, + "devDependencies": { + "@vitejs/plugin-vue": "5.2.1", + "vite": "6.4.2" + } +} diff --git a/public/images/bg-1.jpg b/public/images/bg-1.jpg new file mode 100644 index 0000000..bc00fe9 Binary files /dev/null and b/public/images/bg-1.jpg differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..aa3cc75 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,1754 @@ + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..fdbdce5 --- /dev/null +++ b/src/main.js @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import App from './App.vue' +import './styles.css' + +createApp(App).mount('#app') diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..b8e84aa --- /dev/null +++ b/src/styles.css @@ -0,0 +1,1193 @@ +:root { + --black: #FAFAFA; + --deep: #F2F2F0; + --panel: #FAFAFA; + --card: #FAFAFA; + --border: #E4E4E0; + --muted: #C8C8C4; + --text-dim: #8A8A84; + --text: #5A5A54; + --bright: #3A3A34; + --white: #1A1A18; + --red: #5A9A78; + --red-dim: #E8F2EC; + --orange: #4A8A68; + --orange-dim: #E8F2EC; + --yellow: #5A9A78; + --green: #5A9A78; + --green-dim: #E8F2EC; + --green-bright: #4A8A68; + --teal: #5A9090; + --accent: #5A9A78; + --accent-dim: #E8F2EC; + --font-display: 'DM Serif Display', serif; + --font-body: 'Barlow', sans-serif; + --font-mono: 'Space Mono', monospace; + --radius: 10px; + --radius-lg: 16px; + --trans: all 0.25s cubic-bezier(0.4,0,0.2,1); +} +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } +html { scroll-behavior: smooth; -webkit-tap-highlight-color: transparent; + -webkit-overflow-scrolling: touch; } +body { background: #FAFAFA; color: var(--text); font-family: var(--font-body); font-size: 16px; line-height: 1.6; height: 100vh; overflow: hidden; } + +/* ── HEADER ── */ +.site-header { + position: fixed; top: 0; left: 0; right: 0; z-index: 100; + background: rgba(250,250,250,0.92); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-bottom: 1px solid var(--border); + padding: 0 24px; + height: 60px; + display: flex; align-items: center; justify-content: space-between; +} +@media (min-width: 768px) { + .site-header { padding: 0 28px; } +} +.logo { + font-family: var(--font-display); + font-weight: 400; + font-size: 20px; + letter-spacing: 0.02em; + color: var(--white); +} +.logo .b { color: var(--red); } +.header-right { display: flex; align-items: center; gap: 12px; } +.lang-toggle { + display: flex; + background: var(--panel); + border: 1px solid var(--border); + border-radius: 0; + overflow: hidden; +} +.lang-btn { + padding: 5px 12px; + border: none; + background: none; + font-family: var(--font-mono); + font-size: 11px; + font-weight: 700; + letter-spacing: 0.1em; + color: var(--text-dim); + cursor: pointer; + transition: var(--trans); +} +.lang-btn.active { background: var(--red); color: #FFFFFF; } + +/* ── APP ── */ +.app { padding-top: 0; height: 100vh; display: flex; flex-direction: column; overflow: hidden; } + +/* ── HERO ── */ +.hero { + position: relative; + /* asymmetric vertical padding shifts the centered content past the fixed header + and compensates for the scenario-strip below — net effect: visually centered on the viewport */ + padding: 100px 16px 24px; + text-align: center; + background: url('/images/bg-1.jpg') center/cover no-repeat; + overflow: hidden; + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.hero-eyebrow { + position: relative; z-index: 1; + font-family: var(--font-body); + font-size: 11px; + letter-spacing: 0.3em; + text-transform: uppercase; + color: #0a0a0a; + margin-bottom: 12px; + animation: fadeUp 1s ease both; + font-weight: 400; +} +.hero h1 { + position: relative; z-index: 1; + font-family: var(--font-display); + font-weight: 400; + /* Mobile (default): fill viewport minus 16px gutters each side. + Divisor 5 ≈ measured ratio of "Deepstock" rendered width to font-size + in DM Serif Display at 0.05em tracking. Tweak if the text overflows + or under-fills its container. */ + /* Divisor 7 leaves enough horizontal room for the wider "Kammergut" + wordmark without overflow at the mobile/tablet breakpoint + transition (~704px was clipping at /6). */ + font-size: calc((100vw - 48px) / 7); + line-height: 1; + letter-spacing: 0.05em; + color: #1A1A18; + margin-bottom: 40px; + animation: fadeUp 1s 0.15s ease both; +} +/* Mobile — soften the bg image to 50% by overlaying the body fill */ +@media (max-width: 767px) { + .hero { + background: linear-gradient(rgba(250,250,250,0.5), rgba(250,250,250,0.5)), url('/images/bg-1.jpg') center/cover no-repeat; + } +} +/* Tablet — 32px gutters each side */ +@media (min-width: 768px) { + .hero h1 { font-size: calc((100vw - 64px) / 7); } +} +@media (min-width: 900px) { + .hero h1 { font-size: clamp(120px, 14vw, 176px); } +} +.hero h1 .b { color: #5A9A78; } + +/* Trademark mark — only auto-attached to the small header logo. The + hero H1 uses an explicit sibling .brand-tm span instead, since CSS + filters on the H1 (paint-3d) would otherwise pull ™ into the gloss. */ +.logo[data-i18n="brand"]::after { + content: "™"; + font-size: 0.4em; + vertical-align: super; + letter-spacing: 0; +} + +/* Hero brand line — flex wrapper so ™ can sit next to the painted H1 + without being inside the H1's filter scope. The wrapper takes over + the H1's bottom margin and entrance animation so the line moves + together. */ +.hero .brand-line { + display: inline-block; + white-space: nowrap; + position: relative; z-index: 1; + margin: 0 auto 40px; + animation: fadeUp 1s 0.15s ease both; +} +.hero .brand-line h1.paint-3d { + display: inline-block; + vertical-align: top; + margin-bottom: 0; + animation: none; +} +.brand-tm { + display: inline-block; + vertical-align: super; + font-family: var(--font-display); + font-weight: 400; + /* 1/5 of H1 size to match the small superscript scale used elsewhere */ + font-size: calc((100vw - 32px) / 25); + line-height: 1; + color: #1A1A18; + letter-spacing: 0; + margin-left: 0.05em; +} +@media (min-width: 768px) { + .brand-tm { font-size: calc((100vw - 64px) / 25); } +} +@media (min-width: 900px) { + .brand-tm { font-size: clamp(24px, 2.8vw, 35px); } +} + +/* Glossy 3D paint effect on the brand title */ +.hero h1.paint-3d { + filter: url(#paintGloss); + -webkit-filter: url(#paintGloss); + /* subtle vertical sheen — top catches light, bottom sinks back into the paint */ + background: linear-gradient(180deg, #2a2a26 0%, #1A1A18 45%, #060604 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + color: transparent; + padding: 0.12em 0.08em 0.2em; + transition: filter 0.6s ease; +} +.hero h1.paint-3d:hover { + filter: url(#paintGlossHover); + -webkit-filter: url(#paintGlossHover); +} +@media (prefers-reduced-motion: reduce) { + .hero h1.paint-3d { transition: none; } +} +.hero-sub { + position: relative; z-index: 1; + font-family: var(--font-body); + font-size: 13px; + letter-spacing: 0.3em; + text-transform: uppercase; + font-weight: 400; + color: #0a0a0a; + max-width: 520px; + margin: 0 auto 40px; + line-height: 1.6; + animation: fadeUp 1s 0.3s ease both; +} +.cta-btn { + display: inline-flex; + align-items: center; + gap: 10px; + font-family: var(--font-body); + font-weight: 400; + font-size: 13px; + letter-spacing: 0.2em; + text-transform: uppercase; + padding: 18px 48px; + border-radius: 0; + cursor: pointer; + transition: color 0.3s ease, var(--trans); + animation: fadeUp 1s 0.45s ease both; + /* Lift above .hero::after radial fade so the button isn't washed out */ + z-index: 2; +} +.cta-btn span { position: relative; } + +/* ── EMAIL CAPTURE ── */ +.email-section { + background: var(--panel); + border-bottom: 1px solid var(--border); + padding: 28px 24px; +} +.email-inner { + max-width: 540px; + margin: 0 auto; +} +.email-label { + font-family: var(--font-mono); + font-size: 10px; + letter-spacing: 0.2em; + text-transform: uppercase; + color: var(--red); + margin-bottom: 8px; +} +.email-title { + font-family: var(--font-display); + font-weight: 800; + font-size: 20px; + color: var(--white); + margin-bottom: 6px; +} +.email-sub { + font-size: 13px; + color: var(--text-dim); + margin-bottom: 16px; + line-height: 1.6; +} +.email-form { + display: flex; + gap: 10px; + flex-wrap: wrap; +} +.email-input { + flex: 1; + min-width: 200px; + padding: 13px 16px; + background: var(--card); + border: 1.5px solid var(--border); + border-radius: var(--radius); + color: var(--white); + font-family: var(--font-body); + font-size: 15px; + outline: none; + transition: var(--trans); +} +.email-input:focus { border-color: var(--red); } +.email-input::placeholder { color: var(--muted); } +.email-submit { + padding: 13px 24px; + background: var(--red); + border: none; + border-radius: var(--radius); + color: #0C0C0E; + font-family: var(--font-body); + font-weight: 600; + font-size: 14px; + letter-spacing: 0.1em; + text-transform: uppercase; + cursor: pointer; + transition: var(--trans); + white-space: nowrap; +} +.email-submit:hover { background: #7AB498; } +.email-success { + display: none; + padding: 14px 20px; + background: var(--green-dim); + border: 1px solid var(--green); + border-radius: var(--radius); + color: var(--green-bright); + font-size: 14px; + font-weight: 600; + margin-top: 10px; +} +.email-success.show { display: block; } +.email-note { + font-size: 11px; + color: var(--muted); + margin-top: 10px; +} + +/* ── SCENARIO STRIP ── */ +.scenario-strip { + display: flex; + overflow-x: auto; + gap: 12px; + padding: 20px 24px; + background: var(--panel); + border-bottom: 1px solid var(--border); + -webkit-overflow-scrolling: touch; + scrollbar-width: none; +} +.scenario-strip::-webkit-scrollbar { display: none; } +.scenario-pill { + flex-shrink: 0; + display: flex; + align-items: center; + gap: 8px; + padding: 10px 18px; + border-radius: 40px; + border: 1px solid rgba(255,255,255,0.06); + font-family: var(--font-body); + font-weight: 500; + font-size: 13px; + letter-spacing: 0.03em; + white-space: nowrap; + color: var(--text-dim); + background: rgba(255,255,255,0.02); +} +.pill-1 { border-color: rgba(90,154,120,0.2); color: var(--red); } +.pill-2 { border-color: rgba(90,154,120,0.15); color: var(--text); } +.pill-3 { border-color: rgba(90,154,120,0.15); color: var(--text); } +.pill-4 { border-color: rgba(106,170,138,0.2); color: var(--green); } +.pill-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; opacity: 0.6; } + +/* ── QUESTIONNAIRE ── */ +.quiz-section { + width: 100%; + min-height: 100vh; + display: flex; + flex-direction: column; +} +.quiz-section.hidden { display: none !important; } +.quiz-progress-bar { + position: fixed; + top: 0; + left: 0; right: 0; + background: rgba(250,250,250,0.92); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-bottom: 1px solid var(--border); + /* Match .site-header dimensions: 60px tall, 24px mobile / 28px desktop padding */ + height: 60px; + padding: 0 24px; + z-index: 110; +} +@media (min-width: 768px) { + .quiz-progress-bar { padding: 0 28px; } +} +body.quiz-active .site-header { display: none; } +.quiz-progress-bar .progress-wrap { max-width: 540px; margin: 0 auto; } +.quiz-progress-bar .progress-header { margin-bottom: 6px; } +.quiz-content { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + padding: 80px 24px 110px; + width: 100%; +} +.quiz-content #question-container { + width: 100%; + max-width: 540px; + margin: 0 auto; +} +.quiz-footer { + position: fixed; + bottom: 0; + left: 0; right: 0; + background: rgba(250,250,250,0.92); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border-top: 1px solid var(--border); + padding: 14px 24px max(14px, env(safe-area-inset-bottom)); + z-index: 90; +} +.quiz-footer .q-nav { max-width: 540px; margin: 0 auto; } +.quiz-footer:empty { display: none; } +.progress-wrap { margin-bottom: 0; } +.progress-header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px; } +.progress-label { font-family: var(--font-mono); font-size: 11px; color: var(--text-dim); letter-spacing: 0.1em; text-transform: uppercase; } +.progress-count { font-family: var(--font-mono); font-size: 13px; color: var(--bright); } +.progress-bar { height: 3px; background: var(--muted); border-radius: 99px; overflow: hidden; } +.progress-fill { height: 100%; background: var(--red); border-radius: 99px; transition: width 0.5s cubic-bezier(0.4,0,0.2,1); } + +.question-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + padding: 28px 24px; + animation: fadeUp 0.35s ease both; +} +.q-step { font-family: var(--font-mono); font-size: 10px; color: var(--red); letter-spacing: 0.15em; text-transform: uppercase; margin-bottom: 12px; } +.q-text { font-family: var(--font-display); font-weight: 400; font-size: 24px; color: var(--white); line-height: 1.3; margin-bottom: 8px; } +.q-sub { font-size: 13px; color: var(--text-dim); line-height: 1.6; margin-bottom: 24px; } +.q-options { display: flex; flex-direction: column; gap: 10px; } +.q-opt { + display: flex; align-items: center; gap: 14px; + padding: 14px 16px; + background: var(--panel); + border: 1.5px solid var(--border); + border-radius: var(--radius); + cursor: pointer; + transition: var(--trans); + -webkit-tap-highlight-color: transparent; + -webkit-overflow-scrolling: touch; +} +.q-opt:hover { border-color: rgba(255,255,255,0.08); background: var(--deep); } +.q-opt.selected { border-color: var(--red); background: rgba(90,154,120,0.06); } +.q-opt.selected .opt-radio { border-color: var(--red); } +.q-opt.selected .opt-radio::after { display: block; } +.opt-radio { + width: 18px; height: 18px; border-radius: 50%; + border: 1.5px solid var(--muted); + flex-shrink: 0; position: relative; transition: var(--trans); +} +.opt-radio::after { + content: ''; display: none; + position: absolute; top: 50%; left: 50%; + transform: translate(-50%,-50%); + width: 8px; height: 8px; + background: var(--red); border-radius: 50%; +} +.opt-label { font-size: 15px; color: var(--bright); line-height: 1.4; } +.opt-sub { font-size: 12px; color: var(--text-dim); margin-top: 2px; } +.q-opt.multi .opt-radio { border-radius: 4px; } +.q-opt.multi.selected .opt-radio { border-color: var(--red); background: var(--red); border-radius: 4px; } +.q-opt.multi.selected .opt-radio::after { + display: block; content: '✓'; color: white; font-size: 11px; font-weight: bold; + background: none; width: auto; height: auto; top: 50%; left: 50%; + transform: translate(-50%,-55%); border-radius: 0; +} +.slider-wrap { padding: 8px 0; } +.slider-labels { display: flex; justify-content: space-between; margin-bottom: 12px; } +.slider-labels span { font-size: 12px; color: var(--text-dim); font-family: var(--font-mono); } +input[type=range] { width: 100%; -webkit-appearance: none; appearance: none; height: 4px; background: var(--muted); border-radius: 99px; outline: none; cursor: pointer; } +input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: var(--red); cursor: pointer; box-shadow: 0 2px 16px rgba(90,154,120,0.3); } +.slider-val { text-align: center; font-family: var(--font-display); font-weight: 800; font-size: 32px; color: var(--white); margin-top: 16px; } +.slider-val span { font-size: 18px; color: var(--text-dim); margin-left: 4px; } + +.q-nav { display: flex; gap: 12px; } +.btn-back { flex: 1; height: 52px; background: var(--panel); border: 1px solid var(--border); border-radius: 0; color: var(--text-dim); font-family: var(--font-body); font-weight: 600; font-size: 14px; letter-spacing: 0.1em; text-transform: uppercase; cursor: pointer; transition: var(--trans); display: flex; align-items: center; justify-content: center; } +.btn-back:hover { border-color: var(--muted); color: var(--text); } +.btn-next { flex: 1; height: 52px; background: var(--red); border: none; border-radius: 0; color: #FFFFFF; font-family: var(--font-body); font-weight: 600; font-size: 14px; letter-spacing: 0.1em; text-transform: uppercase; cursor: pointer; transition: var(--trans); box-shadow: 0 2px 20px rgba(90,154,120,0.15); } +.btn-next:hover { background: #C8A870; } +.btn-next:disabled { background: var(--muted); box-shadow: none; cursor: not-allowed; color: var(--deep); } + +/* ── RESULTS ── */ +.results-section { padding: 24px 20px 80px; max-width: 600px; margin: 0 auto; width: 100%; display: none; } +.results-section.active { display: block; } +.risk-banner { padding: 24px; border-radius: var(--radius-lg); margin-bottom: 24px; text-align: center; animation: fadeUp 0.4s ease both; } +.risk-level { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; margin-bottom: 8px; opacity: 0.8; } +.risk-title { font-family: var(--font-display); font-weight: 900; font-size: 36px; letter-spacing: -0.01em; line-height: 1; margin-bottom: 8px; } +.risk-desc { font-size: 14px; opacity: 0.85; line-height: 1.6; } +.risk-critical { background: var(--red-dim); border: 1px solid rgba(90,154,120,0.35); color: var(--white); } +.risk-high { background: var(--orange-dim); border: 1px solid rgba(74,138,104,0.35); color: var(--white); } +.risk-medium { background: var(--accent-dim); border: 1px solid rgba(90,154,120,0.25); color: var(--white); } +.risk-low { background: var(--green-dim); border: 1px solid rgba(90,154,120,0.35); color: var(--white); } + +.scenario-tabs { display: flex; gap: 0; background: var(--panel); border: 1px solid var(--border); border-radius: 0; padding: 4px; margin-bottom: 24px; overflow: hidden; animation: fadeUp 0.4s 0.1s ease both; } +.s-tab { flex: 1; padding: 10px 6px; border: none; background: none; border-radius: 0; font-family: var(--font-display); font-weight: 700; font-size: 12px; letter-spacing: 0.04em; color: var(--text-dim); cursor: pointer; transition: var(--trans); text-align: center; line-height: 1.3; } +.s-tab.active-s1 { background: rgba(90,154,120,0.1); color: var(--red); } +.s-tab.active-s2 { background: rgba(184,152,106,0.1); color: var(--orange); } +.s-tab.active-s3 { background: rgba(90,154,120,0.08); color: var(--yellow); } +.s-tab.active-s4 { background: rgba(106,170,138,0.1); color: var(--green-bright); } + +.rec-cards { animation: fadeUp 0.4s 0.15s ease both; } +.rec-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); margin-bottom: 16px; overflow: hidden; } +.rec-header { padding: 16px 20px; display: flex; align-items: center; gap: 12px; border-bottom: 1px solid var(--border); } +.rec-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; } +.rec-cat { font-family: var(--font-mono); font-size: 10px; color: var(--text-dim); letter-spacing: 0.12em; text-transform: uppercase; } +.rec-title { font-family: var(--font-display); font-weight: 400; font-size: 18px; color: var(--white); line-height: 1.2; } +.priority-badge { margin-left: auto; padding: 4px 10px; border-radius: 99px; font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; font-weight: 700; flex-shrink: 0; } +.p-critical { background: rgba(90,154,120,0.08); color: var(--red); border: 1px solid rgba(90,154,120,0.2); } +.p-high { background: rgba(184,152,106,0.08); color: var(--orange); border: 1px solid rgba(184,152,106,0.2); } +.p-medium { background: rgba(90,154,120,0.06); color: var(--yellow); border: 1px solid rgba(90,154,120,0.15); } + +.rec-body { padding: 16px 20px; } +.rec-items { display: flex; flex-direction: column; gap: 12px; } +.rec-item { display: flex; flex-direction: column; gap: 8px; padding-bottom: 12px; border-bottom: 1px solid var(--border); } +.rec-item:last-child { border-bottom: none; padding-bottom: 0; } +.item-name { font-weight: 600; font-size: 15px; color: var(--bright); } +.item-why { font-size: 13px; color: var(--text-dim); line-height: 1.55; } +.item-cost { font-family: var(--font-mono); font-size: 13px; color: var(--green-bright); } +.affiliate-btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; background: var(--accent-dim); border: 1px solid var(--accent); border-radius: 0; color: #88BBFF; font-size: 12px; font-weight: 600; text-decoration: none; cursor: pointer; transition: var(--trans); width: fit-content; } +.affiliate-btn:hover { background: rgba(74,143,224,0.2); } + +.budget-meter { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 20px; animation: fadeUp 0.4s 0.2s ease both; } +.bm-title { font-family: var(--font-display); font-weight: 700; font-size: 16px; color: var(--white); margin-bottom: 16px; } +.budget-cats { display: flex; flex-direction: column; gap: 10px; } +.bcat { display: flex; align-items: center; gap: 10px; } +.bcat-label { font-size: 13px; color: var(--text-dim); width: 100px; flex-shrink: 0; } +.bcat-bar-wrap { flex: 1; height: 6px; background: var(--muted); border-radius: 99px; overflow: hidden; } +.bcat-bar { height: 100%; border-radius: 99px; transition: width 0.8s cubic-bezier(0.4,0,0.2,1); } +.bcat-cost { font-family: var(--font-mono); font-size: 12px; color: var(--bright); width: 60px; text-align: right; flex-shrink: 0; } + +.timeline { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 20px; animation: fadeUp 0.4s 0.25s ease both; } +.tl-title { font-family: var(--font-display); font-weight: 700; font-size: 16px; color: var(--white); margin-bottom: 16px; } +.tl-items { display: flex; flex-direction: column; gap: 0; } +.tl-item { display: flex; gap: 16px; padding-bottom: 16px; position: relative; } +.tl-item:last-child { padding-bottom: 0; } +.tl-item:not(:last-child)::before { content: ''; position: absolute; left: 15px; top: 32px; bottom: 0; width: 2px; background: var(--border); } +.tl-dot { width: 32px; height: 32px; border-radius: 50%; background: var(--panel); border: 2px solid; display: flex; align-items: center; justify-content: center; font-size: 14px; flex-shrink: 0; position: relative; z-index: 1; } +.tl-when { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 4px; } +.tl-action { font-size: 14px; color: var(--bright); line-height: 1.5; } +.tl-cost { font-family: var(--font-mono); font-size: 12px; color: var(--green-bright); margin-top: 4px; } + +/* Results email capture */ +.results-email { + background: linear-gradient(135deg, var(--red-dim), #141210); + border: 1px solid rgba(90,154,120,0.2); + border-radius: var(--radius-lg); + padding: 24px; + margin-bottom: 20px; + animation: fadeUp 0.4s 0.3s ease both; +} +.results-email .email-label { color: var(--red); } +.results-email .email-title { font-size: 18px; } + +.restart-btn { width: 100%; padding: 16px; background: var(--panel); border: 1px solid var(--border); border-radius: 0; color: var(--text-dim); font-family: var(--font-display); font-weight: 700; font-size: 16px; letter-spacing: 0.06em; text-transform: uppercase; cursor: pointer; transition: var(--trans); margin-top: 8px; } +.restart-btn:hover { border-color: var(--muted); color: var(--text); } + +/* ── ABOUT ── */ +.about-section { background: var(--deep); border-top: 1px solid rgba(255,255,255,0.04); padding: 56px 24px; text-align: center; } +.about-section h2 { font-family: var(--font-display); font-weight: 400; font-size: 26px; color: var(--white); margin-bottom: 14px; } +.about-section p { font-size: 14px; color: var(--text-dim); max-width: 380px; margin: 0 auto 20px; line-height: 1.8; font-weight: 300; } +.affiliate-note { font-family: var(--font-mono); font-size: 10px; color: var(--muted); letter-spacing: 0.08em; line-height: 1.8; } + +@keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } +.hidden { display: none !important; } + +/* ── SINGLE FOLD: hide non-essential sections on load ── + (header stays visible with a transparent background on the homepage) */ +.site-header { background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; border-bottom: none; } +.scenario-strip, +.email-section, +.about-section { display: none !important; } +/* Language switcher — wears the white-paint look (#F0F0F0 fill, soft + light-grey ambient shadow + faint top highlight to match the H1 + white paint). Inner buttons stay transparent so the fill reads as + one unit. */ +.lang-toggle { + background: #F0F0F0 !important; + border: 1px solid rgba(0,0,0,0.06) !important; + border-radius: 4px; + box-shadow: 0 3px 5px rgba(0,0,0,0.07), inset 0 1px 0 rgba(255,255,255,0.6); + overflow: hidden; +} +.lang-btn { background: transparent !important; color: var(--text-dim); } +.lang-btn.active { background: transparent !important; color: var(--red); } + +/* ── CAPTURE FORM ── */ +/* Capture form container — wears the same white-paint look as the inner + selectors, but a touch whiter (#FAFAFA vs #F0F0F0) so it reads as the + outer container while keeping the H1's dy=7 / blur≈10 / 0.12 alpha drop + and faint inset top highlight for the gloss feel. */ +.capture-form-wrap{background:#FAFAFA;border:1px solid rgba(0,0,0,0.06);border-radius:var(--radius-lg);padding:28px 24px;margin-bottom:20px;animation:fadeUp 0.4s 0.3s ease both;box-shadow:0 7px 10.6px rgba(0,0,0,0.12), inset 0 1px 0 rgba(255,255,255,0.7);} + +/* Country/region indicator hidden — not needed in this build. */ +#region-indicator { display: none !important; } + +/* ── Paint variants (ported from paint.html for in-page experimentation) ── */ +body.paint-green .hero h1.paint-3d { + background: #2a3010; + -webkit-background-clip: text; + background-clip: text; +} +body.paint-green .cta-btn::before { + background: #2a3010; +} +body.paint-white .hero h1.paint-3d { + filter: url(#paintGlossWhite); + -webkit-filter: url(#paintGlossWhite); + background: #F0F0F0; + -webkit-background-clip: text; + background-clip: text; +} +body.paint-white .hero h1.paint-3d:hover { + filter: url(#paintGlossWhiteHover); + -webkit-filter: url(#paintGlossWhiteHover); +} +body.paint-white .cta-btn { color: #1A1A18; } +body.paint-white .cta-btn:hover { color: #060604; } +body.paint-white .cta-btn::before { + background: #F0F0F0; + filter: url(#paintGlossWhiteBtn); + -webkit-filter: url(#paintGlossWhiteBtn); +} + +/* Paint picker UI — top-right swatches */ +.paint-picker { display: flex; gap: 8px; align-items: center; } +.paint-swatch { + width: 28px; height: 28px; + border-radius: 50%; + border: 1px solid var(--border); + cursor: pointer; + padding: 0; + transition: transform 0.15s ease; +} +.paint-swatch:hover { transform: scale(1.08); } +.paint-swatch.swatch-dark { background: linear-gradient(180deg, #2a2a26, #060604); } +.paint-swatch.swatch-green { background: #2a3010; } +.paint-swatch.swatch-white { background: linear-gradient(180deg, #FFFFFF, #DDDDDD); } +.paint-swatch.active { + outline: 2px solid var(--red); + outline-offset: 2px; +} + +/* Modifier toggle ⚙ — wears the same white-paint look as the lang-toggle */ +.mod-open-btn { + background: #F0F0F0; + border: 1px solid rgba(0,0,0,0.06); + border-radius: 4px; + box-shadow: 0 7px 10.6px rgba(0,0,0,0.12), inset 0 1px 0 rgba(255,255,255,0.7); + width: 28px; height: 28px; + cursor: pointer; + font-size: 14px; + line-height: 1; + padding: 0; + color: var(--text-dim); + transition: var(--trans); +} +.mod-open-btn:hover { color: var(--text); } + +/* Quiz progress bar — flex row with logo (left), progress (center), lang (right). + Logo matches the site-header .logo: same 20px DM Serif Display. */ +.quiz-progress-bar { display: flex; align-items: center; gap: 16px; } +@media (min-width: 768px) { + .quiz-progress-bar { gap: 32px; } +} +.quiz-progress-bar .qpb-logo { + font-family: var(--font-display); + font-weight: 400; + font-size: 20px; + letter-spacing: 0.02em; + color: var(--white); + white-space: nowrap; + text-decoration: none; +} +.quiz-progress-bar .progress-wrap { flex: 1; max-width: none; margin: 0; } +.quiz-progress-bar .lang-toggle { flex-shrink: 0; } +@media (max-width: 767px) { + .quiz-progress-bar .lang-toggle { display: none; } +} + +/* Active language button — bolded red so the current selection stands + out against the white-paint container fill. */ +.lang-btn.active { font-weight: 800 !important; color: var(--red) !important; } + +/* Outer question-card wears the glossy white-paint look at #FAFAFA — + a touch whiter than the inner .q-opt (#F0F0F0) so it reads as the + surrounding container while keeping the same drop-shadow + inset + top highlight as .capture-form-wrap. */ +.question-card { + background: #FAFAFA !important; + border: 1px solid rgba(0,0,0,0.06) !important; + box-shadow: 0 7px 10.6px rgba(0,0,0,0.12), inset 0 1px 0 rgba(255,255,255,0.7); +} + +/* Inner selection options wear the white-paint look: #F0F0F0 fill, + soft light-grey ambient shadow + faint inset top highlight. + Shadow kept lighter than the outer .question-card so the depth + reads as outer-elevated > inner-resting. */ +.q-opt { + background: #F0F0F0 !important; + border: 1px solid rgba(0,0,0,0.06) !important; + box-shadow: 0 3px 6px rgba(0,0,0,0.06), inset 0 1px 0 rgba(255,255,255,0.7); +} +.q-opt:hover { border-color: rgba(0,0,0,0.12) !important; background: #F4F4F4 !important; } +.q-opt.selected { border-color: var(--red) !important; } + +/* Modifier panel — hidden by default, opens when body has .mod-open */ +.mod-panel { + position: fixed; + top: 72px; + right: 12px; + width: 280px; + max-height: calc(100vh - 84px); + overflow-y: auto; + background: rgba(255,255,255,0.96); + border: 1px solid var(--border); + border-radius: 6px; + box-shadow: 0 8px 32px rgba(0,0,0,0.08); + z-index: 200; + font-family: var(--font-mono); + font-size: 11px; + padding: 8px; + display: none; +} +body.mod-open .mod-panel { display: block; } +.mod-header { + display: flex; align-items: center; justify-content: space-between; + padding: 4px 8px; + border-bottom: 1px solid var(--border); + margin-bottom: 8px; +} +.mod-header h3 { + font-family: var(--font-display); + font-size: 14px; font-weight: 400; margin: 0; +} +.mod-paint-label { + font-family: var(--font-mono); font-size: 10px; + color: var(--red); letter-spacing: 0.1em; + text-transform: uppercase; margin-left: 8px; +} +.mod-toggle { + background: none; border: 1px solid var(--border); border-radius: 3px; + width: 22px; height: 22px; cursor: pointer; font-size: 14px; line-height: 1; + padding: 0; +} +.mod-fieldset { + border: 1px solid var(--border); border-radius: 4px; + padding: 6px 8px; margin: 0 0 8px; +} +.mod-fieldset legend { + padding: 0 4px; + font-weight: 600; font-size: 10px; + letter-spacing: 0.05em; text-transform: uppercase; + color: var(--text-dim); +} +.mod-row { + display: grid; + grid-template-columns: 56px 1fr 38px; + gap: 6px; align-items: center; margin: 4px 0; +} +.mod-row > span:first-child { + font-size: 10px; color: var(--text-dim); +} +.mod-row input[type="range"] { width: 100%; } +.mod-row input[type="color"] { + width: 100%; height: 22px; padding: 0; + border: 1px solid var(--border); border-radius: 3px; + grid-column: 2 / span 2; +} +.mod-row output { + font-size: 10px; text-align: right; + font-variant-numeric: tabular-nums; +} +.mod-actions { + display: flex; align-items: center; gap: 8px; + padding-top: 8px; border-top: 1px solid var(--border); +} +.mod-actions button { + flex: 1; padding: 6px 12px; + background: var(--red); color: #fff; + border: none; border-radius: 3px; cursor: pointer; + font-family: var(--font-mono); font-size: 11px; + font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; +} +.mod-copy-status { + font-size: 10px; color: var(--green); white-space: nowrap; +} +.mod-fieldset[data-hide] { display: none; } +.capture-label{font-family:var(--font-mono);font-size:10px;color:var(--red);letter-spacing:0.15em;text-transform:uppercase;margin-bottom:12px;display:block;} +.capture-title{font-family:var(--font-display);font-weight:900;font-size:24px;color:var(--white);margin-bottom:6px;} +.capture-sub{font-size:13px;color:var(--text-dim);line-height:1.6;margin-bottom:20px;} +.form-grid{display:flex;flex-direction:column;gap:12px;} +.form-row{display:flex;gap:10px;flex-wrap:wrap;} +.form-field{display:flex;flex-direction:column;gap:5px;flex:1;min-width:140px;} +.field-label{font-size:11px;color:var(--text-dim);font-family:var(--font-mono);letter-spacing:0.06em;text-transform:uppercase;} +.form-input,.form-select{width:100%;padding:12px 14px;background:var(--card);border:1.5px solid var(--border);border-radius:var(--radius);color:var(--white);font-family:var(--font-body);font-size:14px;outline:none;transition:var(--trans);} +.form-input:focus,.form-select:focus{border-color:rgba(90,154,120,0.4);} +.form-input::placeholder{color:var(--muted);} +.form-select{cursor:pointer;-webkit-appearance:none;appearance:none;} +.form-select option{background:var(--card);color:var(--white);} +.form-input[rows]{resize:vertical;min-height:80px;line-height:1.5;} +.capture-submit{width:100%;padding:16px;background:var(--red);border:none;border-radius:0;color:#0C0C0E;font-family:var(--font-body);font-weight:600;font-size:14px;letter-spacing:0.1em;text-transform:uppercase;cursor:pointer;transition:var(--trans);margin-top:4px;box-shadow:0 4px 24px rgba(90,154,120,0.2);} +.capture-submit:hover{background:#7AB498;transform:translateY(-1px);} + + +/* ── NARRATIVE SECTION ── */ +.narrative-section { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + margin-bottom: 24px; + overflow: hidden; + animation: fadeUp 0.4s ease both; +} +.narrative-header { + padding: 16px 20px; + background: rgba(90,154,120,0.03); + border-bottom: 1px solid var(--border); + display: flex; + align-items: center; + gap: 10px; +} +.narrative-title { + font-family: var(--font-display); + font-weight: 800; + font-size: 17px; + color: var(--white); +} +.narrative-tag { + margin-left: auto; + font-family: var(--font-mono); + font-size: 10px; + color: var(--red); + letter-spacing: 0.12em; + text-transform: uppercase; + border: 1px solid var(--red-dim); + padding: 3px 8px; + border-radius: 4px; +} +.narrative-body { + padding: 20px 24px; + font-size: 14px; + line-height: 1.75; + color: var(--text); +} +.narrative-body h4 { + font-family: var(--font-display); + font-weight: 800; + font-size: 16px; + color: var(--white); + margin: 20px 0 8px; + letter-spacing: 0.02em; +} +.narrative-body h4:first-child { margin-top: 0; } +.narrative-body p { margin: 0 0 12px; } +.narrative-body ul { margin: 8px 0 12px; padding-left: 20px; } +.narrative-body li { margin-bottom: 6px; } +.narrative-body strong { color: var(--bright); } +.narrative-loading { + padding: 32px 24px; + text-align: center; +} +.loading-dots { + display: inline-flex; + gap: 6px; + margin-bottom: 12px; +} +.loading-dots span { + width: 6px; height: 6px; + background: var(--red); + border-radius: 50%; + animation: bounce 1.4s infinite; +} +.loading-dots span:nth-child(2) { animation-delay: 0.2s; } +.loading-dots span:nth-child(3) { animation-delay: 0.4s; } +@keyframes bounce { + 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; } + 40% { transform: scale(1); opacity: 1; } +} +.loading-text { + font-family: var(--font-mono); + font-size: 11px; + color: var(--text-dim); + letter-spacing: 0.1em; + text-transform: uppercase; +} + + +.scroll-hint { + text-align: center; + padding: 12px; + font-family: var(--font-mono); + font-size: 11px; + color: var(--text-dim); + letter-spacing: 0.1em; + animation: pulse 2s infinite; +} +@keyframes pulse { + 0%, 100% { opacity: 0.4; } + 50% { opacity: 1; } +} + + +/* ── REQUIRED BADGE ── */ +.capture-required-badge { + background: rgba(90,154,120,0.06); + border: 1px solid rgba(90,154,120,0.15); + border-radius: var(--radius); + padding: 10px 14px; + font-family: var(--font-mono); + font-size: 10px; + color: var(--red); + letter-spacing: 0.1em; + text-transform: uppercase; + margin-bottom: 20px; + text-align: center; +} + +/* ── NEWSLETTER CHECKBOX ── */ +.newsletter-check { + display: flex; + align-items: flex-start; + gap: 12px; + cursor: pointer; + padding: 12px 14px; + background: var(--panel); + border: 1.5px solid var(--border); + border-radius: var(--radius); + transition: var(--trans); + margin-top: 4px; +} +.newsletter-check:hover { border-color: var(--muted); } +.newsletter-check input[type=checkbox] { display: none; } +.check-box { + width: 20px; height: 20px; + border: 2px solid var(--muted); + border-radius: 4px; + flex-shrink: 0; + margin-top: 1px; + position: relative; + transition: var(--trans); + background: transparent; +} +.newsletter-check input:checked ~ .check-box { + background: rgba(90,154,120,0.9); + border-color: var(--red); +} +.newsletter-check input:checked ~ .check-box::after { + content: '✓'; + position: absolute; + top: 50%; left: 50%; + transform: translate(-50%, -55%); + color: white; + font-size: 12px; + font-weight: 700; +} +.check-label { + font-size: 13px; + color: var(--text); + line-height: 1.5; +} + + +/* ── NARRATIVE PROGRESS BAR ── */ +.narrative-progress { + height: 3px; + background: var(--muted); + margin: 0 24px 0; + border-radius: 99px; + overflow: hidden; +} +.narrative-progress-fill { + height: 100%; + width: 0%; + background: var(--red); + border-radius: 99px; + transition: width 0.5s linear; +} + + +/* ── STAGED REVEAL ── */ +.reveal-section { + display: none; +} +.reveal-section.revealed { + display: block; + animation: fadeUp 0.5s ease both; +} + + +/* ── NARRATIVE CTA ── */ +.narrative-cta { + padding: 16px 20px; + border-top: 1px solid var(--border); + text-align: center; +} +.narrative-cta-btn { + display: inline-flex; + align-items: center; + gap: 8px; + background: var(--red); + color: #0C0C0E; + border: none; + border-radius: 0; + padding: 14px 24px; + font-family: var(--font-body); + font-weight: 600; + font-size: 14px; + letter-spacing: 0.1em; + text-transform: uppercase; + cursor: pointer; + transition: var(--trans); + width: 100%; + justify-content: center; + line-height: 1.4; + text-align: center; +} +.narrative-cta-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 24px rgba(90,154,120,0.25); background: #7AB498; } + + +/* ── CAPTURE FORM HEADER ── */ +.capture-form-header { + font-family: var(--font-display); + font-weight: 400; + font-size: 22px; + color: var(--white); + letter-spacing: 0.01em; + padding-bottom: 16px; + border-bottom: 1px solid rgba(90,154,120,0.2); + margin-bottom: 20px; +} + + +/* ── PROPRIETARY PROTEIN OFFER ── */ +.protein-offer { + background: var(--green-dim); + border: 1px solid rgba(90,154,120,0.45); + border-radius: var(--radius-lg); + padding: 24px; + margin-bottom: 20px; + animation: fadeUp 0.5s ease both; + display: none; +} +.protein-offer.show { display: block; } +.protein-offer-badge { + display: inline-flex; + align-items: center; + gap: 6px; + background: rgba(40,160,96,0.15); + border: 1px solid rgba(40,160,96,0.4); + border-radius: 4px; + padding: 4px 10px; + font-family: var(--font-mono); + font-size: 10px; + color: var(--green-bright); + letter-spacing: 0.12em; + text-transform: uppercase; + margin-bottom: 12px; +} +.protein-offer-title { + font-family: var(--font-display); + font-weight: 900; + font-size: 22px; + color: var(--white); + margin-bottom: 8px; + line-height: 1.2; +} +.protein-offer-body { + font-size: 14px; + color: var(--text-dim); + line-height: 1.7; + margin-bottom: 16px; +} +.protein-offer-btn { + display: inline-flex; + align-items: center; + gap: 8px; + background: var(--green); + color: white; + border: none; + border-radius: 0; + padding: 14px 24px; + font-family: var(--font-display); + font-weight: 800; + font-size: 16px; + letter-spacing: 0.04em; + text-transform: uppercase; + cursor: pointer; + text-decoration: none; + transition: var(--trans); + width: 100%; + justify-content: center; +} +.protein-offer-btn:hover { background: #32C070; transform: translateY(-1px); } + +.scenario-strip{ + overflow:hidden; + padding:16px 0; + background:var(--panel); + border-bottom:1px solid var(--border); + cursor:grab; + position:relative; +} +.scenario-strip:active{cursor:grabbing;} +.scenario-strip-track{ + display:flex; + gap:12px; + padding:4px 24px; + width:max-content; + animation:scroll-pills 28s linear infinite; + -webkit-overflow-scrolling:touch; +} +.scenario-strip:hover .scenario-strip-track, +.scenario-strip:focus-within .scenario-strip-track { + animation-play-state:paused; +} +@keyframes scroll-pills { + 0% { transform: translateX(0); } + 100% { transform: translateX(-50%); } +} + +/* ── Painted button system ────────────────────────────────────────── + Shared embossed-paint fill for primary CTAs (.cta-btn, .btn-next, + .narrative-cta-btn, .capture-submit). Secondary actions + (.btn-back, .restart-btn) keep their original flat panel style. */ + +.cta-btn, +.btn-next, +.narrative-cta-btn, +.capture-submit { + position: relative; + isolation: isolate; + background: transparent; + border: none; + box-shadow: none; +} +.cta-btn::before, +.btn-next::before, +.narrative-cta-btn::before, +.capture-submit::before { + content: ''; + position: absolute; + inset: 0; + border-radius: inherit; + z-index: -1; + transition: filter 0.6s ease; +} + +/* Primary — dark fill */ +.cta-btn, +.btn-next, +.narrative-cta-btn, +.capture-submit { + color: #f4ecd8; +} +.cta-btn::before, +.btn-next::before, +.narrative-cta-btn::before, +.capture-submit::before { + background: linear-gradient(180deg, #2a2a26 0%, #1A1A18 45%, #060604 100%); + filter: url(#paintGlossBtn); + -webkit-filter: url(#paintGlossBtn); +} +.cta-btn:hover::before, +.btn-next:hover::before, +.narrative-cta-btn:hover::before, +.capture-submit:hover::before { + filter: url(#paintGlossBtnHover); + -webkit-filter: url(#paintGlossBtnHover); +} +.cta-btn:hover, +.btn-next:hover, +.narrative-cta-btn:hover, +.capture-submit:hover { + background: transparent; + color: #fff8e8; + transform: none; + box-shadow: none; +} +.cta-btn:active, +.btn-next:active, +.narrative-cta-btn:active, +.capture-submit:active { opacity: 0.9; } +.btn-next:disabled, +.btn-next:disabled:hover { + opacity: 0.4; + cursor: not-allowed; + background: transparent; + color: #f4ecd8; + box-shadow: none; +} +.btn-next:disabled::before, +.btn-next:disabled:hover::before { + filter: url(#paintGlossBtn); + -webkit-filter: url(#paintGlossBtn); +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..9a3d069 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + server: { port: 5173 } +})