diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 980f76f..affd5bd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -91,6 +91,7 @@ "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -1438,6 +1439,7 @@ "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1489,6 +1491,7 @@ "integrity": "sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.21.0", "@typescript-eslint/types": "8.21.0", @@ -1698,6 +1701,7 @@ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1915,6 +1919,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -2134,7 +2139,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/debug": { "version": "4.4.0", @@ -2334,6 +2340,7 @@ "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -3573,6 +3580,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -3755,6 +3763,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -3767,6 +3776,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -4336,6 +4346,7 @@ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4421,6 +4432,7 @@ "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.4.49", diff --git a/frontend/src/components/Button.tsx b/frontend/src/components/Button.tsx index bfd5d35..04dd0ef 100644 --- a/frontend/src/components/Button.tsx +++ b/frontend/src/components/Button.tsx @@ -12,12 +12,15 @@ interface ButtonProps { } const variantClasses = { - primary: "bg-purple-600 text-white text-xl font-semibold hover:bg-purple-800 focus:ring-purple-400", - secondary: "bg-purple-200 text-purple-700 hover:bg-purple-300 focus:ring-purple-300", + // Workable Green + primary: "bg-[#00835C] text-white hover:bg-[#006e4d] focus:ring-[#00835C]", + // Clean Slate Gray (Neutral) + secondary: + "bg-slate-100 text-slate-700 hover:bg-slate-200 focus:ring-slate-300", }; const defaultStyles = - "px-4 py-2 rounded-xl font-medium flex items-center justify-center gap-2 transition-colors duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed border-2 border-black"; + "px-4 py-2 rounded-md text-sm font-medium flex items-center justify-center gap-2 transition-colors duration-200 shadow-sm focus:outline-none focus:ring-2 focus:ring-offset-1 disabled:opacity-50 disabled:cursor-not-allowed"; export function Button({ variant, @@ -26,6 +29,7 @@ export function Button({ onClick, loading = false, fullWidth = false, + className, }: ButtonProps) { const fullWidthClass = fullWidth ? "w-full" : ""; @@ -36,7 +40,10 @@ export function Button({ disabled={loading} aria-busy={loading} className={twMerge( - `${variantClasses[variant]} ${defaultStyles} ${fullWidthClass}` + variantClasses[variant], + defaultStyles, + fullWidthClass, + className )} > {loading ? ( @@ -55,7 +62,7 @@ export function Button({ function Spinner() { return ( -
-
-
-
+ {/* Changed: bg-gray-50 -> bg-white, softer border */} +
+
+ {/* Changed: text-gray-800 -> text-[#1C2939] (Dark Navy) */} +
+ {/* Changed: text-gray-600 -> text-[#00835C] (Workable Green) */} +
{type === "twitter" && } {type === "youtube" && } {type === "document" && }
{title}
+ {!readOnly && ( -
+
{ try { await navigator.clipboard.writeText(link); @@ -77,7 +81,7 @@ export function Card({ {(type === "twitter" || type === "youtube") && }
-
+ -
+
{type === "youtube" && (