commit to main

This commit is contained in:
idittrich-valueon 2025-06-16 17:15:31 +02:00
commit 105b874a0f
56 changed files with 1798 additions and 551 deletions

4
.env
View file

@ -1,6 +1,4 @@
VITE_API_URL="https://gateway.poweron-center.net" VITE_API_BASE_URL="http://localhost:8000"
#VITE_API_URL="http://127.0.0.1:8000"
VITE_MICROSOFT_CLIENT_ID="24cd6c8a-b592-4905-a5ba-d5fa9f911154" VITE_MICROSOFT_CLIENT_ID="24cd6c8a-b592-4905-a5ba-d5fa9f911154"
VITE_MICROSOFT_TENANT_ID="6a51aaeb-2467-4186-9504-2a05aedc591f" VITE_MICROSOFT_TENANT_ID="6a51aaeb-2467-4186-9504-2a05aedc591f"
VITE_ENTRA_CLIENT_SECRET="2iw8Q~jwqG1iacxHopBt5pstu6R45UC1gIQabcbD" VITE_ENTRA_CLIENT_SECRET="2iw8Q~jwqG1iacxHopBt5pstu6R45UC1gIQabcbD"

7
.env.production Normal file
View file

@ -0,0 +1,7 @@
VITE_API_BASE_URL="https://gateway-int.poweron-center.net"
VITE_MICROSOFT_CLIENT_ID="24cd6c8a-b592-4905-a5ba-d5fa9f911154"
VITE_MICROSOFT_TENANT_ID="6a51aaeb-2467-4186-9504-2a05aedc591f"
VITE_ENTRA_CLIENT_SECRET="2iw8Q~jwqG1iacxHopBt5pstu6R45UC1gIQabcbD"
VITE_ENTRA_AUTHORITY="https://login.microsoftonline.com/6a51aaeb-2467-4186-9504-2a05aedc591f"
VITE_ENTRA_REDIRECT_PATH="/auth/callback/"
VITE_ENTRA_REDIRECT_URI="https://gateway.poweron-center.net/api/msft/auth/callback/"

View file

@ -0,0 +1,75 @@
name: Build and deploy Nyla App to int
on:
push:
branches:
- int
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js version
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Create production environment file
run: |
echo 'VITE_API_BASE_URL="https://gateway-int.poweron-center.net"' > .env.production
echo 'VITE_MICROSOFT_CLIENT_ID="24cd6c8a-b592-4905-a5ba-d5fa9f911154"' >> .env.production
echo 'VITE_MICROSOFT_TENANT_ID="6a51aaeb-2467-4186-9504-2a05aedc591f"' >> .env.production
echo 'VITE_ENTRA_CLIENT_SECRET="2iw8Q~jwqG1iacxHopBt5pstu6R45UC1gIQabcbD"' >> .env.production
echo 'VITE_ENTRA_AUTHORITY="https://login.microsoftonline.com/6a51aaeb-2467-4186-9504-2a05aedc591f"' >> .env.production
echo 'VITE_ENTRA_REDIRECT_PATH="/auth/callback/"' >> .env.production
echo 'VITE_ENTRA_REDIRECT_URI="https://gateway-int.poweron-center.net/api/msft/auth/callback/"' >> .env.production
- name: npm install, build
run: |
npm ci
npm run build --if-present
- name: Upload artifact for deployment job
uses: actions/upload-artifact@v4
with:
name: node-app
path: |
.
!node_modules
!.git
!.github
!README.md
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
permissions:
id-token: write #This is required for requesting the JWT
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: node-app
- name: Login to Azure
uses: azure/login@v1
with:
client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F22B84BEF16242F48E913761794EFA64 }}
tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_91A621FECC4E4239B35E8842FAD714A4 }}
subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_89F1F8736D6D4566AF238A83525E0BD5 }}
- name: 'Deploy to Azure Web App'
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: 'poweron-nyla-int'
slot-name: 'Production'
package: .

5
.gitignore vendored
View file

@ -22,3 +22,8 @@ dist-ssr
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
# Environment files
.env
.env.local
.env.*.local

BIN
README.md Normal file

Binary file not shown.

26
deploy-server.js Normal file
View file

@ -0,0 +1,26 @@
import express from 'express';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const app = express();
// Serve static files from current directory
app.use(express.static(path.join(__dirname)));
// Handle React Router - send all requests to index.html
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
// Use Azure's PORT environment variable or fallback to 8080
const port = process.env.PORT || 8080;
// Listen on all interfaces (important for Azure)
app.listen(port, '0.0.0.0', () => {
console.log(`Server running on port ${port}`);
console.log(`Environment: ${process.env.NODE_ENV || 'development'}`);
console.log(`Directory: ${__dirname}`);
});

594
package-lock.json generated
View file

@ -12,6 +12,7 @@
"@azure/msal-react": "^3.0.12", "@azure/msal-react": "^3.0.12",
"axios": "^1.8.3", "axios": "^1.8.3",
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"express": "^4.18.2",
"framer-motion": "^12.7.3", "framer-motion": "^12.7.3",
"fs": "^0.0.1-security", "fs": "^0.0.1-security",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
@ -1399,6 +1400,18 @@
"vite": "^4.2.0 || ^5.0.0 || ^6.0.0" "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
} }
}, },
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.14.1", "version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
@ -1457,6 +1470,11 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true "dev": true
}, },
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"node_modules/asynckit": { "node_modules/asynckit": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@ -1495,6 +1513,42 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true "dev": true
}, },
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/body-parser/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -1542,6 +1596,14 @@
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
}, },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/call-bind-apply-helpers": { "node_modules/call-bind-apply-helpers": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
@ -1554,6 +1616,21 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/call-bound": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/callsites": { "node_modules/callsites": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@ -1688,6 +1765,25 @@
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true "dev": true
}, },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dependencies": {
"safe-buffer": "5.2.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/convert-source-map": { "node_modules/convert-source-map": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
@ -1702,6 +1798,11 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.6", "version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@ -1763,6 +1864,14 @@
"node": ">=0.4.0" "node": ">=0.4.0"
} }
}, },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/dequal": { "node_modules/dequal": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@ -1771,6 +1880,15 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/devlop": { "node_modules/devlop": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
@ -1815,12 +1933,25 @@
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
}, },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.5.158", "version": "1.5.158",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.158.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.158.tgz",
"integrity": "sha512-9vcp2xHhkvraY6AHw2WMi+GDSLPX42qe2xjYaVoZqFRJiOcilVQFq9mZmpuHEQpzlgGDelKlV7ZiGcmMsc8WxQ==", "integrity": "sha512-9vcp2xHhkvraY6AHw2WMi+GDSLPX42qe2xjYaVoZqFRJiOcilVQFq9mZmpuHEQpzlgGDelKlV7ZiGcmMsc8WxQ==",
"dev": true "dev": true
}, },
"node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/es-define-property": { "node_modules/es-define-property": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
@ -1911,6 +2042,11 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"node_modules/escape-string-regexp": { "node_modules/escape-string-regexp": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@ -2100,6 +2236,76 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"engines": {
"node": ">= 0.10.0"
}
},
"node_modules/express/node_modules/cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/extend": { "node_modules/extend": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@ -2160,6 +2366,36 @@
"node": ">= 12" "node": ">= 12"
} }
}, },
"node_modules/finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/finalhandler/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/find-up": { "node_modules/find-up": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@ -2228,6 +2464,14 @@
"node": ">= 6" "node": ">= 6"
} }
}, },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/framer-motion": { "node_modules/framer-motion": {
"version": "12.15.0", "version": "12.15.0",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.15.0.tgz", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.15.0.tgz",
@ -2254,6 +2498,14 @@
} }
} }
}, },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/fs": { "node_modules/fs": {
"version": "0.0.1-security", "version": "0.0.1-security",
"resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
@ -2452,6 +2704,32 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
}, },
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ignore": { "node_modules/ignore": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@ -2486,11 +2764,24 @@
"node": ">=0.8.19" "node": ">=0.8.19"
} }
}, },
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/inline-style-parser": { "node_modules/inline-style-parser": {
"version": "0.2.4", "version": "0.2.4",
"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
"integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="
}, },
"node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/is-alphabetical": { "node_modules/is-alphabetical": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
@ -2955,6 +3246,27 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
}, },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/micromark": { "node_modules/micromark": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
@ -3376,6 +3688,17 @@
} }
] ]
}, },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mime-db": { "node_modules/mime-db": {
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@ -3474,6 +3797,14 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true "dev": true
}, },
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.19", "version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
@ -3488,6 +3819,28 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/object-inspect": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dependencies": {
"ee-first": "1.1.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/optionator": { "node_modules/optionator": {
"version": "0.9.4", "version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@ -3570,6 +3923,14 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
}, },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/path-exists": { "node_modules/path-exists": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -3588,6 +3949,11 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"node_modules/pg": { "node_modules/pg": {
"version": "8.16.0", "version": "8.16.0",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz", "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz",
@ -3778,6 +4144,18 @@
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
} }
}, },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dependencies": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/proxy-from-env": { "node_modules/proxy-from-env": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@ -3792,6 +4170,42 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/react": { "node_modules/react": {
"version": "19.1.0", "version": "19.1.0",
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
@ -4009,6 +4423,11 @@
} }
] ]
}, },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/scheduler": { "node_modules/scheduler": {
"version": "0.26.0", "version": "0.26.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
@ -4023,11 +4442,66 @@
"semver": "bin/semver.js" "semver": "bin/semver.js"
} }
}, },
"node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/send/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/set-cookie-parser": { "node_modules/set-cookie-parser": {
"version": "2.7.1", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
"integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="
}, },
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"node_modules/shebang-command": { "node_modules/shebang-command": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@ -4049,6 +4523,74 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3",
"side-channel-list": "^1.0.0",
"side-channel-map": "^1.0.1",
"side-channel-weakmap": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-list": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-map": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5",
"object-inspect": "^1.13.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-weakmap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5",
"object-inspect": "^1.13.3",
"side-channel-map": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/source-map-js": { "node_modules/source-map-js": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@ -4075,6 +4617,14 @@
"node": ">= 10.x" "node": ">= 10.x"
} }
}, },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/stringify-entities": { "node_modules/stringify-entities": {
"version": "4.0.4", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
@ -4144,6 +4694,14 @@
"url": "https://github.com/sponsors/SuperchupuDev" "url": "https://github.com/sponsors/SuperchupuDev"
} }
}, },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"engines": {
"node": ">=0.6"
}
},
"node_modules/trim-lines": { "node_modules/trim-lines": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
@ -4179,6 +4737,18 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/unified": { "node_modules/unified": {
"version": "11.0.5", "version": "11.0.5",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
@ -4260,6 +4830,14 @@
"url": "https://opencollective.com/unified" "url": "https://opencollective.com/unified"
} }
}, },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
@ -4299,6 +4877,22 @@
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
}, },
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/vfile": { "node_modules/vfile": {
"version": "6.0.3", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",

View file

@ -7,13 +7,15 @@
"dev": "vite --port 5176", "dev": "vite --port 5176",
"build": "vite build", "build": "vite build",
"lint": "eslint .", "lint": "eslint .",
"preview": "vite preview" "preview": "vite preview",
"start": "node server.js"
}, },
"dependencies": { "dependencies": {
"@azure/msal-browser": "^4.12.0", "@azure/msal-browser": "^4.12.0",
"@azure/msal-react": "^3.0.12", "@azure/msal-react": "^3.0.12",
"axios": "^1.8.3", "axios": "^1.8.3",
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"express": "^4.18.2",
"framer-motion": "^12.7.3", "framer-motion": "^12.7.3",
"fs": "^0.0.1-security", "fs": "^0.0.1-security",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",

View file

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
public/logos/PowerOn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

24
server.js Normal file
View file

@ -0,0 +1,24 @@
import express from 'express';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const app = express();
// Serve static files from the dist directory
app.use(express.static(path.join(__dirname, 'dist')));
// Handle React Router - send all requests to index.html
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});
// Use Azure's PORT environment variable or fallback to 3000
const port = process.env.PORT || 3000;
// Listen on all interfaces (important for Azure)
app.listen(port, '0.0.0.0', () => {
console.log(`Server running on port ${port}`);
});

View file

@ -1,5 +1,8 @@
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
// Import global CSS reset first
import './index.css';
import Login from './pages/Login'; import Login from './pages/Login';
import Register from './pages/Register'; import Register from './pages/Register';
@ -9,6 +12,9 @@ import Home from './pages/Home';
import Dateien from './pages/Dateien/Dateien'; import Dateien from './pages/Dateien/Dateien';
import Mitglieder from './pages/Mitglieder/Mitglieder'; import Mitglieder from './pages/Mitglieder/Mitglieder';
import Dashboard from './pages/Dashboard'; import Dashboard from './pages/Dashboard';
import Einstellungen from './pages/Einstellungen/Einstellungen';
// Import the global light theme CSS variables as default
import './assets/styles/light.css';
function App() { function App() {
return ( return (
@ -26,6 +32,7 @@ function App() {
<Route path="dashboard" element={<Dashboard />} /> <Route path="dashboard" element={<Dashboard />} />
<Route path="dateien" element={<Dateien />} /> <Route path="dateien" element={<Dateien />} />
<Route path="mitglieder" element={<Mitglieder />} /> <Route path="mitglieder" element={<Mitglieder />} />
<Route path="einstellungen" element={<Einstellungen />} />
</Route> </Route>
</Routes> </Routes>
</Router> </Router>

View file

@ -2,8 +2,7 @@
import axios from 'axios'; import axios from 'axios';
const api = axios.create({ const api = axios.create({
baseURL: 'https://gateway.poweron-center.net', baseURL: import.meta.env.VITE_API_BASE_URL,
//baseURL: 'http://localhost:8000',
withCredentials: true withCredentials: true
}); });

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>

Before

Width:  |  Height:  |  Size: 4 KiB

View file

@ -0,0 +1,28 @@
:root {
--color-bg: #121212;
--color-surface: #1E1E1E;
--color-text: #E5E7EB;
--color-primary: #B266FF;
--color-primary-hover: #C68AFF;
--color-primary-disabled: #5C2B80;
--color-secondary: #6F7BE5;
--color-secondary-hover: #8592FF;
--color-secondary-disabled: #3B4370;
--color-red: #FF6F7A;
--color-red-hover: #FF8B94;
--color-red-disabled: #80383E;
--color-secondary-red: #D65D6A;
--color-secondary-red-hover: #E17683;
--color-secondary-red-disabled: #70363C;
--color-gray: #A0A4AA;
--color-gray-hover: #C4C8CD;
--color-gray-disabled: #505357;
--font-family: "Trebuchet MS", sans-serif;
}

View file

@ -0,0 +1,55 @@
:root {
--color-bg: #FFFFFF;
--color-surface: #F8F9FA;
--color-text: #24262B;
--color-primary: #8F00FF;
--color-primary-hover: #A020FF;
--color-primary-disabled: #D1A6F9;
--color-secondary: #3F51B5;
--color-secondary-hover: #5A6CE0;
--color-secondary-disabled: #BEC5EB;
--color-red: #D85B65;
--color-red-hover: #E77A81;
--color-red-disabled: #F3C0C4;
--color-secondary-red: #B94A55;
--color-secondary-red-hover: #D46872;
--color-secondary-red-disabled: #E8B7BA;
--color-gray: #6C757D;
--color-gray-hover: #8A9299;
--color-gray-disabled: #D6D8DB;
--font-family: "Trebuchet MS", sans-serif;
}
/* Dark theme overrides */
.dark-theme {
--color-bg: #121212;
--color-surface: #1E1E1E;
--color-text: #E5E7EB;
--color-primary: #B266FF;
--color-primary-hover: #C68AFF;
--color-primary-disabled: #5C2B80;
--color-secondary: #6F7BE5;
--color-secondary-hover: #8592FF;
--color-secondary-disabled: #3B4370;
--color-red: #FF6F7A;
--color-red-hover: #FF8B94;
--color-red-disabled: #80383E;
--color-secondary-red: #D65D6A;
--color-secondary-red-hover: #E17683;
--color-secondary-red-disabled: #70363C;
--color-gray: #A0A4AA;
--color-gray-hover: #C4C8CD;
--color-gray-disabled: #505357;
}

View file

@ -4,14 +4,13 @@
flex-direction: column; flex-direction: column;
align-self: stretch; align-self: stretch;
border-radius: 30px; border-radius: 30px;
border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); background: var(--color-bg);
background: var(--Grayscale-True-White, #FFF);
position: relative; position: relative;
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
height: 100%; height: 100%;
min-height: 0; min-height: 0;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.dashboard_chat.expanded { .dashboard_chat.expanded {
@ -49,19 +48,20 @@
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
transition: all 0.2s ease; transition: all 0.2s ease;
font-family: var(--font-family);
} }
.chat_button_active { .chat_button_active {
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
} }
.chat_button_inactive { .chat_button_inactive {
color: #A0A0A0; color: var(--color-gray);
} }
.chat_button_collapsed { .chat_button_collapsed {
opacity: 50%; opacity: 50%;
color: #A0A0A0; color: var(--color-gray);
} }
.iconContainer { .iconContainer {
@ -74,23 +74,23 @@
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
color: var(--Brand-Green-Green, #3A8088); color: var(--color-secondary);
} }
.expandIcon:hover, .collapseIcon:hover { .expandIcon:hover, .collapseIcon:hover {
color: #333; color: var(--color-secondary-hover);
} }
.horizontalLine { .horizontalLine {
width: 100%; width: 100%;
background-color: var(--Grayscale-Black, #24262B); background-color: var(--color-text);
height: 1px; height: 1px;
margin-top: 20px; margin-top: 20px;
} }
.horizontalLineLight { .horizontalLineLight {
width: calc(100%); width: calc(100%);
background-color: #F1F1F1; background-color: var(--color-gray-disabled);
height: 2px; height: 2px;
margin-top: 39px; margin-top: 39px;
margin-left: -20px; margin-left: -20px;
@ -128,20 +128,22 @@
.message_input { .message_input {
flex: 1; flex: 1;
padding: 12px 16px; padding: 12px 16px;
border: 1px solid #E0E0E0;
border-radius: 12px; border-radius: 12px;
outline: none; outline: none;
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
background-color: var(--color-bg);
color: var(--color-text);
} }
.message_input:focus { .message_input:focus {
border-color: #666; border-color: var(--color-primary);
} }
.send_button { .send_button {
padding: 12px 12px; padding: 12px 12px;
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
border-radius: 12px; border-radius: 12px;
cursor: pointer; cursor: pointer;
@ -150,6 +152,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-family: var(--font-family);
} }
.send_button_icon { .send_button_icon {
@ -160,43 +163,45 @@
} }
.send_button:disabled { .send_button:disabled {
background-color: #ccc; background-color: var(--color-gray-disabled);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6; opacity: 0.6;
} }
.message_input:disabled { .message_input:disabled {
background-color: #f5f5f5; background-color: var(--color-surface);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6; opacity: 0.6;
} }
.loading_message { .loading_message {
padding: 10px; padding: 10px;
background-color: #e3f2fd; background-color: var(--color-secondary-disabled);
border-left: 4px solid #2196f3; border-left: 4px solid var(--color-secondary);
border-radius: 4px; border-radius: 4px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.loading_message p { .loading_message p {
margin: 0; margin: 0;
color: #1976d2; color: var(--color-secondary);
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
} }
.error_message { .error_message {
padding: 10px; padding: 10px;
background-color: #ffebee; background-color: var(--color-red-disabled);
border-left: 4px solid #f44336; border-left: 4px solid var(--color-red);
border-radius: 4px; border-radius: 4px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.error_message p { .error_message p {
margin: 0; margin: 0;
color: #c62828; color: var(--color-red);
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
} }
.message { .message {
@ -204,25 +209,26 @@
padding: 12px; padding: 12px;
border-radius: 12px; border-radius: 12px;
max-width: 80%; max-width: 80%;
font-family: var(--font-family);
} }
.message_user { .message_user {
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
margin-left: auto; margin-left: auto;
margin-right: 0; margin-right: 0;
} }
.message_assistant { .message_assistant {
background-color: #f5f5f5; background-color: var(--color-surface);
color: #333; color: var(--color-text);
margin-left: 0; margin-left: 0;
margin-right: auto; margin-right: auto;
} }
.message_system { .message_system {
background-color: #fff3cd; background-color: var(--color-primary-disabled);
color: #856404; color: var(--color-primary);
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
text-align: center; text-align: center;
@ -233,6 +239,7 @@
font-weight: 600; font-weight: 600;
margin-bottom: 4px; margin-bottom: 4px;
opacity: 0.8; opacity: 0.8;
font-family: var(--font-family);
} }
.message_content { .message_content {
@ -240,40 +247,44 @@
line-height: 1.4; line-height: 1.4;
white-space: pre-wrap; white-space: pre-wrap;
word-wrap: break-word; word-wrap: break-word;
font-family: var(--font-family);
} }
.message_timestamp { .message_timestamp {
font-size: 11px; font-size: 11px;
margin-top: 4px; margin-top: 4px;
opacity: 0.6; opacity: 0.6;
font-family: var(--font-family);
} }
.placeholder_text { .placeholder_text {
text-align: center; text-align: center;
color: #999; color: var(--color-gray);
font-style: italic; font-style: italic;
margin: 20px 0; margin: 20px 0;
font-family: var(--font-family);
} }
.workflow_status { .workflow_status {
padding: 8px 12px; padding: 8px 12px;
background-color: #e8f5e8; background-color: var(--color-secondary-disabled);
border-left: 4px solid #4caf50; border-left: 4px solid var(--color-secondary);
border-radius: 4px; border-radius: 4px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.workflow_status p { .workflow_status p {
margin: 0; margin: 0;
color: #2e7d32; color: var(--color-secondary);
font-size: 13px; font-size: 13px;
font-style: italic; font-style: italic;
font-family: var(--font-family);
} }
.completion_message { .completion_message {
padding: 10px 12px; padding: 10px 12px;
background-color: #e8f5e8; background-color: var(--color-secondary-disabled);
border-left: 4px solid #4caf50; border-left: 4px solid var(--color-secondary);
border-radius: 4px; border-radius: 4px;
margin-bottom: 10px; margin-bottom: 10px;
text-align: center; text-align: center;
@ -281,14 +292,15 @@
.completion_message p { .completion_message p {
margin: 0 0 10px 0; margin: 0 0 10px 0;
color: #2e7d32; color: var(--color-secondary);
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
font-family: var(--font-family);
} }
.new_workflow_button { .new_workflow_button {
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
border-radius: 8px; border-radius: 8px;
padding: 8px 16px; padding: 8px 16px;
@ -296,9 +308,10 @@
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
font-family: var(--font-family);
} }
.new_workflow_button:hover { .new_workflow_button:hover {
background-color: #2d6b73; background-color: var(--color-secondary-hover);
} }

View file

@ -4,6 +4,7 @@
flex: 1; flex: 1;
min-height: 0; min-height: 0;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.chat_messages { .chat_messages {
@ -26,12 +27,12 @@
} }
.chat_messages::-webkit-scrollbar-thumb { .chat_messages::-webkit-scrollbar-thumb {
background: #ccc; background: var(--color-gray-disabled);
border-radius: 3px; border-radius: 3px;
} }
.chat_messages::-webkit-scrollbar-thumb:hover { .chat_messages::-webkit-scrollbar-thumb:hover {
background: #999; background: var(--color-gray);
} }
.messages_container { .messages_container {
@ -65,26 +66,29 @@
.message_input { .message_input {
flex: 1; flex: 1;
padding: 12px 16px; padding: 12px 16px;
border: 1px solid #E0E0E0; border: 1px solid var(--color-gray-disabled);
border-radius: 12px; border-radius: 12px;
outline: none; outline: none;
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
background-color: var(--color-bg);
color: var(--color-text);
} }
.message_input:focus { .message_input:focus {
border-color: #666; border-color: var(--color-secondary);
} }
.message_input:disabled { .message_input:disabled {
background-color: #f5f5f5; background-color: var(--color-surface);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6; opacity: 0.6;
} }
.attachment_button { .attachment_button {
padding: 11px 11px; padding: 11px 11px;
background-color: #e6f2f2; background-color: var(--color-secondary-disabled);
color: var(--Brand-Green-Green, #3A8088); color: var(--color-secondary);
border: none; border: none;
border-radius: 12px; border-radius: 12px;
cursor: pointer; cursor: pointer;
@ -94,15 +98,16 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: background-color 0.2s ease, border-color 0.2s ease; transition: background-color 0.2s ease, border-color 0.2s ease;
font-family: var(--font-family);
} }
.attachment_button:hover { .attachment_button:hover {
background-color: #cce3e4; background-color: var(--color-secondary-hover);
color: var(--Brand-Green-Green, #3A8088); color: var(--color-bg);
} }
.attachment_button:disabled { .attachment_button:disabled {
background-color: #f5f5f5; background-color: var(--color-surface);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6; opacity: 0.6;
} }
@ -120,11 +125,12 @@
align-items: center; align-items: center;
gap: 6px; gap: 6px;
padding: 6px 8px; padding: 6px 8px;
background-color: #f0f8f8; background-color: var(--color-secondary-disabled);
border: 1px solid #cce7e8; border: 1px solid var(--color-secondary);
border-radius: 8px; border-radius: 8px;
font-size: 12px; font-size: 12px;
color: #3a8088; color: var(--color-secondary);
font-family: var(--font-family);
} }
.attached_file_icon { .attached_file_icon {
@ -141,7 +147,7 @@
.attached_file_remove { .attached_file_remove {
background: none; background: none;
border: none; border: none;
color: #999; color: var(--color-gray);
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
margin-left: 4px; margin-left: 4px;
@ -155,15 +161,15 @@
} }
.attached_file_remove:hover { .attached_file_remove:hover {
background-color: #ddd; background-color: var(--color-gray-disabled);
color: #666; color: var(--color-text);
} }
.send_button { .send_button {
padding: 12px 12px; padding: 12px 12px;
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: 1px solid var(--Brand-Green-Green, #3A8088); border: 1px solid var(--color-secondary);
border-radius: 12px; border-radius: 12px;
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 14px;
@ -171,10 +177,11 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-family: var(--font-family);
} }
.send_button:hover { .send_button:hover {
background-color: #34737b; background-color: var(--color-secondary-hover);
} }
.send_button_icon { .send_button_icon {
@ -185,16 +192,16 @@
} }
.send_button:disabled { .send_button:disabled {
background-color: #ccc; background-color: var(--color-gray-disabled);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6; opacity: 0.6;
border: 1px solid #ccc; border: 1px solid var(--color-gray-disabled);
} }
.stop_button { .stop_button {
padding: 12px 12px; padding: 12px 12px;
background-color: #D85B65; background-color: var(--color-red);
color: white; color: var(--color-bg);
border: none; border: none;
border-radius: 12px; border-radius: 12px;
cursor: pointer; cursor: pointer;
@ -203,45 +210,47 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: background-color 0.2s ease; font-family: var(--font-family);
} }
.stop_button:hover { .stop_button:hover {
background-color: #c3525b; background-color: var(--color-red-hover);
} }
.stop_button:disabled { .stop_button:disabled {
background-color: #ccc; background-color: var(--color-gray-disabled);
cursor: not-allowed; cursor: not-allowed;
opacity: 0.6; opacity: 0.6;
} }
.loading_message { .loading_message {
padding: 10px; padding: 10px;
background-color: #e3f2fd; background-color: var(--color-secondary-disabled);
border-left: 4px solid #2196f3; border-left: 4px solid var(--color-secondary);
border-radius: 4px; border-radius: 4px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.loading_message p { .loading_message p {
margin: 0; margin: 0;
color: #1976d2; color: var(--color-secondary);
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
} }
.error_message { .error_message {
padding: 10px; padding: 10px;
background-color: #fceff0; background-color: var(--color-red-disabled);
border-left: 4px solid #d85d67; border-left: 4px solid var(--color-red);
border-radius: 4px; border-radius: 4px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.error_message p { .error_message p {
margin: 0; margin: 0;
color: #d85d67; color: var(--color-red);
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
} }
.message { .message {
@ -249,25 +258,26 @@
padding: 12px; padding: 12px;
border-radius: 12px; border-radius: 12px;
max-width: 80%; max-width: 80%;
font-family: var(--font-family);
} }
.message_user { .message_user {
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
margin-left: auto; margin-left: auto;
margin-right: 0; margin-right: 0;
} }
.message_assistant { .message_assistant {
background-color: #f5f5f5; background-color: var(--color-surface);
color: #333; color: var(--color-text);
margin-left: 0; margin-left: 0;
margin-right: auto; margin-right: auto;
} }
.message_system { .message_system {
background-color: #fff3cd; background-color: var(--color-primary-disabled);
color: #856404; color: var(--color-primary);
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
text-align: center; text-align: center;
@ -278,6 +288,7 @@
font-weight: 600; font-weight: 600;
margin-bottom: 4px; margin-bottom: 4px;
opacity: 0.8; opacity: 0.8;
font-family: var(--font-family);
} }
.message_content { .message_content {
@ -285,66 +296,72 @@
line-height: 1.4; line-height: 1.4;
white-space: pre-wrap; white-space: pre-wrap;
word-wrap: break-word; word-wrap: break-word;
font-family: var(--font-family);
} }
.message_timestamp { .message_timestamp {
font-size: 11px; font-size: 11px;
margin-top: 4px; margin-top: 4px;
opacity: 0.6; opacity: 0.6;
font-family: var(--font-family);
} }
.placeholder_text { .placeholder_text {
text-align: center; text-align: center;
color: #999; color: var(--color-gray);
font-style: italic; font-style: italic;
margin: 20px 0; margin: 20px 0;
font-family: var(--font-family);
} }
.workflow_status { .workflow_status {
padding: 8px 12px; padding: 8px 12px;
background-color: #e6f2f2; background-color: var(--color-secondary-disabled);
border-left: 4px solid #3a8088; border-left: 4px solid var(--color-secondary);
border-radius: 4px; border-radius: 4px;
margin: 10px 0; margin-bottom: 10px;
} }
.workflow_status p { .workflow_status p {
margin: 0; margin: 0;
color: #3a8088; color: var(--color-secondary);
font-size: 13px; font-size: 13px;
font-style: italic; font-style: italic;
font-family: var(--font-family);
} }
.completion_message { .completion_message {
padding: 10px 12px; padding: 10px 12px;
background-color: #e6f2f2; background-color: var(--color-secondary-disabled);
border-left: 4px solid #3a8088; border-left: 4px solid var(--color-secondary);
border-radius: 4px; border-radius: 4px;
margin: 10px 0; margin-bottom: 10px;
text-align: center; text-align: center;
} }
.completion_message p { .completion_message p {
margin: 0 0 10px 0; margin: 0 0 10px 0;
color: #3a8088; color: var(--color-secondary);
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
font-family: var(--font-family);
} }
.new_workflow_button { .new_workflow_button {
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
border-radius: 15px; border-radius: 8px;
padding: 8px 16px; padding: 8px 16px;
font-size: 12px; font-size: 12px;
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
font-family: var(--font-family);
} }
.new_workflow_button:hover { .new_workflow_button:hover {
background-color: #2d6b73; background-color: var(--color-secondary-hover);
} }
.message_documents { .message_documents {
@ -359,95 +376,105 @@
align-items: center; align-items: center;
gap: 8px; gap: 8px;
padding: 8px 10px; padding: 8px 10px;
background-color: rgba(255, 255, 255, 0.1); background-color: var(--color-bg);
border: 1px solid rgba(255, 255, 255, 0.2); border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 6px;
font-size: 13px;
transition: background-color 0.2s ease;
cursor: pointer; cursor: pointer;
text-decoration: none; transition: all 0.2s ease;
color: inherit; font-size: 13px;
} }
.document_item:hover { .document_item:hover {
background-color: rgba(255, 255, 255, 0.2); border-color: var(--color-primary);
background-color: var(--color-surface);
} }
.message_assistant .document_item { .message_assistant .document_item {
background-color: rgba(0, 0, 0, 0.05); background-color: var(--color-bg);
border-color: rgba(0, 0, 0, 0.1); border-color: var(--color-gray-disabled);
} }
.message_assistant .document_item:hover { .message_assistant .document_item:hover {
background-color: rgba(0, 0, 0, 0.1); border-color: var(--color-primary);
background-color: var(--color-surface);
} }
.document_icon { .document_icon {
width: 16px; font-size: 16px;
height: 16px; color: var(--color-secondary);
flex-shrink: 0; flex-shrink: 0;
opacity: 0.8;
} }
.document_info { .document_info {
flex: 1;
min-width: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 2px; gap: 2px;
min-width: 0;
} }
.document_name { .document_name {
font-weight: 500; font-weight: 500;
white-space: nowrap; color: var(--color-text);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap;
font-family: var(--font-family);
} }
.document_meta { .document_meta {
font-size: 11px;
opacity: 0.7;
display: flex; display: flex;
gap: 8px; gap: 8px;
font-size: 11px;
color: var(--color-gray);
font-family: var(--font-family);
} }
.document_size { .document_size {
white-space: nowrap; font-size: 11px;
color: var(--color-gray);
} }
.document_type { .document_type {
white-space: nowrap; font-size: 11px;
color: var(--color-gray);
} }
.document_actions { .document_actions {
display: flex; display: flex;
gap: 4px; gap: 4px;
margin-left: auto; opacity: 1;
flex-shrink: 0; transition: opacity 0.2s ease;
}
.document_item:hover .document_actions {
opacity: 1;
} }
.document_action_button { .document_action_button {
background: none;
border: none;
color: var(--color-gray);
cursor: pointer;
padding: 4px;
border-radius: 4px;
font-size: 14px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: 28px; transition: all 0.2s ease;
height: 28px;
border: none;
border-radius: 6px;
background-color: rgba(255, 255, 255, 0.15);
color: inherit;
cursor: pointer;
transition: background-color 0.2s ease;
font-size: 14px;
} }
.document_action_button:hover { .document_action_button:hover {
background-color: rgba(255, 255, 255, 0.25); background-color: var(--color-surface);
color: var(--color-text);
} }
.message_assistant .document_action_button { .message_assistant .document_action_button {
background-color: rgba(0, 0, 0, 0.08); color: var(--color-gray);
} }
.message_assistant .document_action_button:hover { .message_assistant .document_action_button:hover {
background-color: rgba(0, 0, 0, 0.15); background-color: var(--color-surface);
color: var(--color-text);
} }

View file

@ -64,6 +64,15 @@ const MessageItem: React.FC<MessageItemProps> = ({ message, index }) => {
const [previewDocument, setPreviewDocument] = useState<Document | null>(null); const [previewDocument, setPreviewDocument] = useState<Document | null>(null);
const [isPreviewOpen, setIsPreviewOpen] = useState(false); const [isPreviewOpen, setIsPreviewOpen] = useState(false);
// Debug logging to see if documents are present
console.log('MessageItem rendering:', {
messageId: message.id,
role: message.role,
hasDocuments: !!message.documents,
documentsLength: message.documents?.length || 0,
documents: message.documents
});
const handleDocumentClick = (document: Document) => { const handleDocumentClick = (document: Document) => {
// If there's a downloadUrl, use it; otherwise try the url // If there's a downloadUrl, use it; otherwise try the url
const downloadLink = document.downloadUrl || document.url; const downloadLink = document.downloadUrl || document.url;

View file

@ -13,7 +13,7 @@
} }
.popup { .popup {
background: white; background: var(--color-bg);
border-radius: 12px; border-radius: 12px;
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
max-width: 90vw; max-width: 90vw;
@ -22,6 +22,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.header { .header {
@ -29,8 +30,8 @@
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 16px 20px; padding: 16px 20px;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--color-gray-disabled);
background-color: #f9fafb; background-color: var(--color-surface);
flex-shrink: 0; flex-shrink: 0;
} }
@ -38,12 +39,13 @@
margin: 0; margin: 0;
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #111827; color: var(--color-text);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
flex: 1; flex: 1;
margin-right: 16px; margin-right: 16px;
font-family: var(--font-family);
} }
.close_button { .close_button {
@ -55,7 +57,7 @@
border: none; border: none;
border-radius: 8px; border-radius: 8px;
background-color: transparent; background-color: transparent;
color: #6b7280; color: var(--color-gray);
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
font-size: 18px; font-size: 18px;
@ -63,8 +65,8 @@
} }
.close_button:hover { .close_button:hover {
background-color: #e5e7eb; background-color: var(--color-gray-disabled);
color: #374151; color: var(--color-text);
} }
.content { .content {
@ -81,10 +83,11 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: #6b7280; color: var(--color-gray);
font-size: 16px; font-size: 16px;
width: 100%; width: 100%;
height: 100%; height: 100%;
font-family: var(--font-family);
} }
.error { .error {
@ -92,11 +95,12 @@
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: #dc2626; color: var(--color-red);
font-size: 16px; font-size: 16px;
text-align: center; text-align: center;
width: 100%; width: 100%;
height: 100%; height: 100%;
font-family: var(--font-family);
} }
.no_preview { .no_preview {
@ -104,11 +108,12 @@
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: #6b7280; color: var(--color-gray);
font-size: 16px; font-size: 16px;
font-style: italic; font-style: italic;
width: 100%; width: 100%;
height: 100%; height: 100%;
font-family: var(--font-family);
} }
.image_preview { .image_preview {
@ -129,14 +134,14 @@
.text_preview { .text_preview {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #f8fafc; background-color: var(--color-surface);
border: 1px solid #e2e8f0; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
padding: 16px; padding: 16px;
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
font-size: 14px; font-size: 14px;
line-height: 1.5; line-height: 1.5;
color: #334155; color: var(--color-text);
overflow: auto; overflow: auto;
white-space: pre-wrap; white-space: pre-wrap;
word-wrap: break-word; word-wrap: break-word;
@ -146,15 +151,15 @@
.enhanced_text_preview { .enhanced_text_preview {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #ffffff; background-color: var(--color-bg);
border: 1px solid #e2e8f0; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
padding: 32px; padding: 32px;
overflow: auto; overflow: auto;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; font-family: var(--font-family);
box-sizing: border-box; box-sizing: border-box;
line-height: 1.7; line-height: 1.7;
color: #374151; color: var(--color-text);
} }
.text_line { .text_line {
@ -170,68 +175,70 @@
.text_header { .text_header {
font-weight: 600; font-weight: 600;
font-size: 1.1em; font-size: 1.1em;
color: #1f2937; color: var(--color-text);
margin: 16px 0 8px 0; margin: 16px 0 8px 0;
padding-bottom: 4px; padding-bottom: 4px;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--color-gray-disabled);
font-family: var(--font-family);
} }
.text_numbered { .text_numbered {
margin: 8px 0; margin: 8px 0;
padding-left: 8px; padding-left: 8px;
color: #4b5563; color: var(--color-gray);
font-family: var(--font-family);
} }
.text_bullet { .text_bullet {
margin: 4px 0; margin: 4px 0;
padding-left: 8px; padding-left: 8px;
color: #4b5563; color: var(--color-gray);
font-family: var(--font-family);
} }
.text_indented { .text_indented {
background-color: #f8fafc; background-color: var(--color-surface);
padding: 8px 12px; padding: 8px 12px;
margin: 4px 0; margin: 4px 0;
border-left: 3px solid #d1d5db; border-left: 3px solid var(--color-gray-disabled);
border-radius: 4px; border-radius: 4px;
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
font-size: 0.9em; font-size: 0.9em;
color: #6b7280; color: var(--color-gray);
} }
.code_preview { .code_preview {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #1f2937; background-color: var(--color-surface);
border: 1px solid #374151; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
padding: 16px; overflow: auto;
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
font-size: 14px; font-size: 14px;
line-height: 1.5; line-height: 1.4;
color: #f9fafb; color: var(--color-text);
overflow: auto;
white-space: pre-wrap;
word-wrap: break-word;
box-sizing: border-box; box-sizing: border-box;
display: flex;
flex-direction: column;
} }
.python_code_preview { .python_code_preview {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #0d1117; background-color: var(--color-surface);
border: 1px solid #30363d; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: auto;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.code_header { .code_header {
background-color: #161b22; background-color: var(--color-gray-disabled);
padding: 12px 16px; padding: 8px 16px;
border-bottom: 1px solid #30363d; border-bottom: 1px solid var(--color-gray-disabled);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@ -239,41 +246,38 @@
} }
.code_language { .code_language {
background-color: #1f6feb;
color: #ffffff;
padding: 4px 8px;
border-radius: 12px;
font-size: 12px; font-size: 12px;
font-weight: 500; font-weight: 600;
color: var(--color-text);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.5px; letter-spacing: 0.5px;
font-family: var(--font-family);
} }
.code_filename { .code_filename {
color: #7d8590; font-size: 12px;
font-size: 14px; color: var(--color-gray);
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; font-family: var(--font-family);
font-weight: 500;
} }
.python_code_content { .python_code_content {
flex: 1;
margin: 0;
padding: 16px; padding: 16px;
background-color: #0d1117;
color: #e6edf3;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 14px;
line-height: 1.6;
overflow: auto; overflow: auto;
flex: 1;
background-color: var(--color-bg);
font-family: 'Courier New', monospace;
font-size: 14px;
line-height: 1.4;
color: var(--color-text);
white-space: pre; white-space: pre;
tab-size: 4; word-wrap: break-word;
} }
.python_code_content code { .python_code_content code {
font-family: inherit; font-family: 'Courier New', monospace;
font-size: inherit; font-size: 14px;
color: inherit; line-height: 1.4;
color: var(--color-text);
background: none; background: none;
padding: 0; padding: 0;
} }
@ -281,157 +285,156 @@
.markdown_preview { .markdown_preview {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: #ffffff; background-color: var(--color-bg);
border: 1px solid #e2e8f0; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
padding: 24px; padding: 32px;
overflow: auto; overflow: auto;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; font-family: var(--font-family);
box-sizing: border-box; box-sizing: border-box;
line-height: 1.6;
color: var(--color-text);
} }
.markdown_preview h1 { .markdown_preview h1 {
font-size: 2em; font-size: 2em;
font-weight: 600; font-weight: 700;
margin: 0 0 16px 0; margin: 0 0 16px 0;
color: var(--color-text);
border-bottom: 2px solid var(--color-gray-disabled);
padding-bottom: 8px; padding-bottom: 8px;
border-bottom: 1px solid #e2e8f0;
color: #1f2937;
} }
.markdown_preview h2 { .markdown_preview h2 {
font-size: 1.5em; font-size: 1.5em;
font-weight: 600; font-weight: 600;
margin: 24px 0 12px 0; margin: 24px 0 12px 0;
color: #374151; color: var(--color-text);
} }
.markdown_preview h3 { .markdown_preview h3 {
font-size: 1.25em; font-size: 1.25em;
font-weight: 600; font-weight: 600;
margin: 20px 0 8px 0; margin: 20px 0 10px 0;
color: #4b5563; color: var(--color-text);
} }
.markdown_preview h4, .markdown_preview h4,
.markdown_preview h5, .markdown_preview h5,
.markdown_preview h6 { .markdown_preview h6 {
font-size: 1em; font-size: 1.1em;
font-weight: 600; font-weight: 600;
margin: 16px 0 8px 0; margin: 16px 0 8px 0;
color: #6b7280; color: var(--color-text);
} }
.markdown_preview p { .markdown_preview p {
margin: 0 0 16px 0; margin: 0 0 16px 0;
line-height: 1.7; line-height: 1.7;
color: #374151;
} }
.markdown_preview ul, .markdown_preview ul,
.markdown_preview ol { .markdown_preview ol {
margin: 0 0 16px 20px; margin: 0 0 16px 20px;
padding-left: 20px; line-height: 1.7;
} }
.markdown_preview li { .markdown_preview li {
margin: 4px 0; margin: 4px 0;
line-height: 1.6; line-height: 1.6;
color: #374151;
} }
.markdown_preview blockquote { .markdown_preview blockquote {
margin: 16px 0; margin: 16px 0;
padding: 12px 16px; padding: 12px 16px;
background-color: #f8fafc; border-left: 4px solid var(--color-primary);
border-left: 4px solid #3b82f6; background-color: var(--color-surface);
color: #4b5563;
font-style: italic; font-style: italic;
color: var(--color-gray);
} }
.markdown_preview code { .markdown_preview code {
background-color: #f1f5f9; background-color: var(--color-surface);
padding: 2px 4px; padding: 2px 6px;
border-radius: 4px; border-radius: 4px;
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
font-size: 0.875em; font-size: 0.9em;
color: #dc2626; color: var(--color-secondary);
} }
.markdown_preview pre { .markdown_preview pre {
background-color: #1f2937; background-color: var(--color-surface);
color: #f9fafb; border: 1px solid var(--color-gray-disabled);
padding: 16px;
border-radius: 8px; border-radius: 8px;
overflow-x: auto; padding: 16px;
margin: 16px 0; margin: 16px 0;
overflow-x: auto;
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
font-size: 0.875em; font-size: 14px;
line-height: 1.5; line-height: 1.4;
} }
.markdown_preview pre code { .markdown_preview pre code {
background: none; background: none;
padding: 0; padding: 0;
color: inherit;
border-radius: 0; border-radius: 0;
color: var(--color-text);
} }
.markdown_preview table { .markdown_preview table {
width: 100%;
border-collapse: collapse; border-collapse: collapse;
width: 100%;
margin: 16px 0; margin: 16px 0;
border: 1px solid #e2e8f0; border: 1px solid var(--color-gray-disabled);
} }
.markdown_preview th, .markdown_preview th,
.markdown_preview td { .markdown_preview td {
border: 1px solid var(--color-gray-disabled);
padding: 8px 12px; padding: 8px 12px;
text-align: left; text-align: left;
border: 1px solid #e2e8f0;
} }
.markdown_preview th { .markdown_preview th {
background-color: #f8fafc; background-color: var(--color-surface);
font-weight: 600; font-weight: 600;
color: #374151;
} }
.markdown_preview td { .markdown_preview td {
color: #4b5563; background-color: var(--color-bg);
} }
.markdown_preview a { .markdown_preview a {
color: #3b82f6; color: var(--color-secondary);
text-decoration: underline; text-decoration: underline;
} }
.markdown_preview a:hover { .markdown_preview a:hover {
color: #1d4ed8; color: var(--color-secondary-hover);
} }
.markdown_preview hr { .markdown_preview hr {
border: none; border: none;
height: 1px; height: 1px;
background-color: #e2e8f0; background-color: var(--color-gray-disabled);
margin: 24px 0; margin: 24px 0;
} }
.markdown_preview strong { .markdown_preview strong {
font-weight: 600; font-weight: 700;
color: #1f2937; color: var(--color-text);
} }
.markdown_preview em { .markdown_preview em {
font-style: italic; font-style: italic;
color: #4b5563; color: var(--color-gray);
} }
/* Responsive design */ /* Responsive design */
@media (max-width: 768px) { @media (max-width: 768px) {
.popup { .popup {
width: 95vw; width: 95vw;
max-height: 95vh; height: 85vh;
} }
.header { .header {
@ -447,6 +450,6 @@
} }
.pdf_preview { .pdf_preview {
height: 400px; height: calc(100% - 60px);
} }
} }

View file

@ -3,6 +3,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.container { .container {
@ -24,16 +25,18 @@
.history_title { .history_title {
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #333; color: var(--color-text);
margin: 0; margin: 0;
font-family: var(--font-family);
} }
.workflowCount { .workflowCount {
font-size: 14px; font-size: 14px;
color: #666; color: var(--color-gray);
background-color: #f5f5f5; background-color: var(--color-surface);
padding: 4px 12px; padding: 4px 12px;
border-radius: 12px; border-radius: 12px;
font-family: var(--font-family);
} }
.scrollableContent { .scrollableContent {
@ -53,9 +56,10 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 200px; height: 200px;
color: #999; color: var(--color-gray);
font-size: 16px; font-size: 16px;
text-align: center; text-align: center;
font-family: var(--font-family);
} }
.loadingContainer { .loadingContainer {
@ -66,8 +70,9 @@
} }
.loadingText { .loadingText {
color: #666; color: var(--color-gray);
font-size: 16px; font-size: 16px;
font-family: var(--font-family);
} }
.errorContainer { .errorContainer {
@ -80,24 +85,26 @@
} }
.errorText { .errorText {
color: #f44336; color: var(--color-red);
font-size: 16px; font-size: 16px;
text-align: center; text-align: center;
font-family: var(--font-family);
} }
.retryButton { .retryButton {
background-color: #2196F3; background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
padding: 8px 16px; padding: 8px 16px;
border-radius: 8px; border-radius: 8px;
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 14px;
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
font-family: var(--font-family);
} }
.retryButton:hover { .retryButton:hover {
background-color: #1976D2; background-color: var(--color-secondary-hover);
} }
/* Scrollbar styling */ /* Scrollbar styling */
@ -106,15 +113,15 @@
} }
.scrollableContent::-webkit-scrollbar-track { .scrollableContent::-webkit-scrollbar-track {
background: #f1f1f1; background: var(--color-surface);
border-radius: 3px; border-radius: 3px;
} }
.scrollableContent::-webkit-scrollbar-thumb { .scrollableContent::-webkit-scrollbar-thumb {
background: #c1c1c1; background: var(--color-gray-disabled);
border-radius: 3px; border-radius: 3px;
} }
.scrollableContent::-webkit-scrollbar-thumb:hover { .scrollableContent::-webkit-scrollbar-thumb:hover {
background: #a8a8a8; background: var(--color-gray);
} }

View file

@ -1,14 +1,15 @@
.workflowItem { .workflowItem {
background: white; background: var(--color-bg);
border-radius: 12px; border-radius: 12px;
border: 1px solid #e0e0e0; border: 1px solid var(--color-gray-disabled);
margin-bottom: 12px; margin-bottom: 12px;
transition: all 0.2s ease; transition: all 0.2s ease;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
font-family: var(--font-family);
} }
.workflowItem:hover { .workflowItem:hover {
border-color: #d0d0d0; border-color: var(--color-gray);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
} }
@ -31,9 +32,10 @@
.workflowId { .workflowId {
font-size: 16px; font-size: 16px;
font-weight: 600; font-weight: 600;
color: #333; color: var(--color-text);
margin: 0 0 8px 0; margin: 0 0 8px 0;
line-height: 1.2; line-height: 1.2;
font-family: var(--font-family);
} }
.workflowMeta { .workflowMeta {
@ -48,15 +50,18 @@
font-weight: 600; font-weight: 600;
padding: 4px 8px; padding: 4px 8px;
border-radius: 12px; border-radius: 12px;
background-color: #f4f3f5; background-color: var(--color-secondary-disabled);
color: var(--color-secondary);
font-family: var(--font-family);
} }
.workflowRound { .workflowRound {
font-size: 12px; font-size: 12px;
color: #888098; color: var(--color-gray);
background-color: #f4f3f5; background-color: var(--color-surface);
padding: 2px 6px; padding: 2px 6px;
border-radius: 8px; border-radius: 8px;
font-family: var(--font-family);
} }
.workflowDates { .workflowDates {
@ -67,9 +72,10 @@
.workflowDate { .workflowDate {
font-size: 12px; font-size: 12px;
color: #666; color: var(--color-gray);
margin: 0; margin: 0;
line-height: 1.3; line-height: 1.3;
font-family: var(--font-family);
} }
.workflowDescription { .workflowDescription {
@ -79,27 +85,28 @@
.messagePreview { .messagePreview {
margin-bottom: 8px; margin-bottom: 8px;
padding: 8px; padding: 8px;
background-color: #f4f3f5; background-color: var(--color-surface);
border-radius: 6px; border-radius: 6px;
border-left: 3px solid #888098; border-left: 3px solid var(--color-gray);
} }
.previewText { .previewText {
font-size: 13px; font-size: 13px;
color: #888098; color: var(--color-gray);
margin: 0; margin: 0;
line-height: 1.4; line-height: 1.4;
word-break: break-word; word-break: break-word;
font-style: italic; font-style: italic;
font-family: var(--font-family);
} }
.workflowName { .workflowName {
font-size: 14px; font-size: 14px;
color: #555; color: var(--color-gray);
margin: 0; margin: 0;
line-height: 1.4; line-height: 1.4;
word-break: break-word; word-break: break-word;
font-family: var(--font-family);
} }
.actionButtons { .actionButtons {
@ -128,32 +135,33 @@
} }
.resumeButton { .resumeButton {
background-color: #3a8088; background-color: var(--color-secondary);
color: white; color: var(--color-bg);
} }
.resumeButton:hover:not(:disabled) { .resumeButton:hover:not(:disabled) {
background-color: #34737b; background-color: var(--color-secondary-hover);
transform: translateY(-1px); transform: translateY(-1px);
} }
.deleteButton { .deleteButton {
background-color: #d85b65; background-color: var(--color-red);
color: white; color: var(--color-bg);
} }
.deleteButton:hover:not(:disabled) { .deleteButton:hover:not(:disabled) {
background-color: #c3525b; background-color: var(--color-red-hover);
transform: translateY(-1px); transform: translateY(-1px);
} }
.deletingMessage { .deletingMessage {
padding: 8px 16px; padding: 8px 16px;
background-color: #fff3cd; background-color: var(--color-primary-disabled);
border-top: 1px solid #e0e0e0; border-top: 1px solid var(--color-gray-disabled);
color: #856404; color: var(--color-primary);
font-size: 12px; font-size: 12px;
text-align: center; text-align: center;
font-family: var(--font-family);
} }
@media (max-width: 768px) { @media (max-width: 768px) {

View file

@ -53,18 +53,18 @@ function DashboardChatHistoryItem({ workflow, onDelete, onResume }: DashboardCha
case 'completed': case 'completed':
case 'finished': case 'finished':
case 'done': case 'done':
return '#3a8088'; return 'var(--color-secondary)';
case 'running': case 'running':
case 'processing': case 'processing':
return '#888098'; return 'var(--color-gray)';
case 'error': case 'error':
case 'failed': case 'failed':
return '#d85d67'; return 'var(--color-red)';
case 'stopped': case 'stopped':
case 'cancelled': case 'cancelled':
return '#d85d67'; return 'var(--color-red)';
default: default:
return '#888098'; return 'var(--color-gray)';
} }
}; };
@ -73,17 +73,17 @@ function DashboardChatHistoryItem({ workflow, onDelete, onResume }: DashboardCha
case 'completed': case 'completed':
case 'finished': case 'finished':
case 'done': case 'done':
return '#e6f2f2'; return 'var(--color-secondary-disabled)';
case 'running': case 'running':
case 'processing': case 'processing':
return '#f0f0f5'; return 'var(--color-gray-disabled)';
case 'error': case 'error':
case 'failed': case 'failed':
case 'stopped': case 'stopped':
case 'cancelled': case 'cancelled':
return '#fceff0'; return 'var(--color-red-disabled)';
default: default:
return '#f0f0f5'; return 'var(--color-gray-disabled)';
} }
}; };

View file

@ -4,8 +4,7 @@
flex-direction: column; flex-direction: column;
align-self: stretch; align-self: stretch;
border-radius: 30px; border-radius: 30px;
border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); background: var(--color-bg);
background: var(--Grayscale-True-White, #FFF);
position: relative; position: relative;
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
height: 100%; height: 100%;
@ -40,36 +39,36 @@
border: none; border: none;
background: none; background: none;
outline: none; outline: none;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
cursor: default; cursor: default;
} }
.log_title_collapsed { .log_title_collapsed {
opacity: 50%; opacity: 50%;
color: #A0A0A0; color: var(--color-gray);
} }
.collapseIcon { .collapseIcon {
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
color: #666; color: var(--color-gray);
} }
.collapseIcon:hover { .collapseIcon:hover {
color: #333; color: var(--color-gray);
} }
.horizontalLine { .horizontalLine {
width: 100%; width: 100%;
background-color: black; background-color: var(--color-gray);
height: 2px; height: 2px;
margin-top: 19px; margin-top: 19px;
} }
.horizontalLineLight { .horizontalLineLight {
width: calc(100%); width: calc(100%);
background-color: #F1F1F1; background-color: var(--color-gray);
height: 2px; height: 2px;
margin-top: 39px; margin-top: 39px;
margin-left: -20px; margin-left: -20px;

View file

@ -4,12 +4,12 @@
flex-direction: column; flex-direction: column;
align-self: stretch; align-self: stretch;
border-radius: 30px; border-radius: 30px;
border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); background: var(--color-bg);
background: var(--Grayscale-True-White, #FFF);
position: relative; position: relative;
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
width: 100%; width: 100%;
transition: height 0.3s ease; transition: height 0.3s ease;
font-family: var(--font-family);
} }
.dashboard_prompt:not(.collapsed) { .dashboard_prompt:not(.collapsed) {
@ -46,8 +46,9 @@
border: none; border: none;
background: none; background: none;
outline: none; outline: none;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
transition: opacity 0.3s ease, color 0.3s ease; transition: opacity 0.3s ease, color 0.3s ease;
font-family: var(--font-family);
} }
.prompt_button_inactive { .prompt_button_inactive {
@ -56,7 +57,7 @@
.prompt_button_collapsed { .prompt_button_collapsed {
opacity: 50%; opacity: 50%;
color: #A0A0A0; color: var(--color-gray);
} }
.buttonWrapper { .buttonWrapper {
@ -68,17 +69,17 @@
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
color: #666; color: var(--color-gray);
transition: color 0.3s ease; transition: color 0.3s ease;
} }
.expandIcon:hover { .expandIcon:hover {
color: #333; color: var(--color-text);
} }
.horizontalLine { .horizontalLine {
width: 100%; width: 100%;
background-color: black; background-color: var(--color-text);
height: 2px; height: 2px;
margin-top: 19px; margin-top: 19px;
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
@ -86,7 +87,7 @@
.horizontalLineLight { .horizontalLineLight {
width: calc(100%); width: calc(100%);
background-color: #F1F1F1; background-color: var(--color-gray-disabled);
height: 2px; height: 2px;
margin-top: 39px; margin-top: 39px;
margin-left: -20px; margin-left: -20px;
@ -111,6 +112,7 @@
opacity: 1; opacity: 1;
position: relative; position: relative;
} }
.content_collapsed { .content_collapsed {
opacity: 0; opacity: 0;
max-height: 0; max-height: 0;
@ -142,10 +144,12 @@
will-change: transform, opacity; will-change: transform, opacity;
transition: transform 0.3s cubic-bezier(0.4,0,0.2,1), opacity 0.3s cubic-bezier(0.4,0,0.2,1); transition: transform 0.3s cubic-bezier(0.4,0,0.2,1), opacity 0.3s cubic-bezier(0.4,0,0.2,1);
} }
.collapseContent.collapsed { .collapseContent.collapsed {
transform: translateY(-100%); transform: translateY(-100%);
opacity: 0; opacity: 0;
} }
.collapseContent.expanded { .collapseContent.expanded {
transform: translateY(0); transform: translateY(0);
opacity: 1; opacity: 1;

View file

@ -2,6 +2,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.header { .header {
@ -16,8 +17,8 @@
.addButton { .addButton {
border-radius: 30px; border-radius: 30px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
outline: none; outline: none;
text-align: left; text-align: left;
@ -28,15 +29,19 @@
display: flex; display: flex;
gap: 10px; gap: 10px;
align-items: center; align-items: center;
font-family: var(--font-family);
transition: background-color 0.2s ease;
} }
.addButton:hover { .addButton:hover {
cursor: pointer; cursor: pointer;
background: var(--color-secondary-hover);
} }
.promptCount { .promptCount {
font-size: 0.875rem; font-size: 0.875rem;
color: #6b7280; color: var(--color-gray);
font-family: var(--font-family);
} }
.scrollableContent { .scrollableContent {
@ -57,12 +62,12 @@
} }
.scrollableContent::-webkit-scrollbar-thumb { .scrollableContent::-webkit-scrollbar-thumb {
background: #ccc; background: var(--color-gray-disabled);
border-radius: 3px; border-radius: 3px;
} }
.scrollableContent::-webkit-scrollbar-thumb:hover { .scrollableContent::-webkit-scrollbar-thumb:hover {
background: #999; background: var(--color-gray);
} }
.promptsList { .promptsList {
@ -80,39 +85,43 @@
} }
.loadingText { .loadingText {
color: #6b7280; color: var(--color-gray);
font-family: var(--font-family);
} }
.errorContainer { .errorContainer {
padding: 1rem; padding: 1rem;
background-color: #fef2f2; background-color: var(--color-red-disabled);
border: 1px solid #fecaca; border: 1px solid var(--color-red);
border-radius: 0.5rem; border-radius: 0.5rem;
} }
.errorText { .errorText {
color: #b91c1c; color: var(--color-red);
font-family: var(--font-family);
} }
.retryButton { .retryButton {
margin-top: 0.5rem; margin-top: 0.5rem;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
background-color: #dc2626; background-color: var(--color-red);
color: white; color: var(--color-bg);
border-radius: 0.375rem; border-radius: 0.375rem;
border: none; border: none;
cursor: pointer; cursor: pointer;
transition: background-color 0.2s; transition: background-color 0.2s;
font-family: var(--font-family);
} }
.retryButton:hover { .retryButton:hover {
background-color: #b91c1c; background-color: var(--color-red-hover);
} }
.emptyState { .emptyState {
text-align: center; text-align: center;
padding: 2rem; padding: 2rem;
color: #6b7280; color: var(--color-gray);
font-family: var(--font-family);
} }

View file

@ -1,5 +1,5 @@
.promptItem { .promptItem {
background: var(--Grayscale-Light-Gray, #F9F9F9); background: var(--color-surface);
border-radius: 30px; border-radius: 30px;
display: flex; display: flex;
padding: 20px; padding: 20px;
@ -7,7 +7,7 @@
align-items: flex-start; align-items: flex-start;
align-self: stretch; align-self: stretch;
justify-content: top; justify-content: top;
font-family: 'Avenir', sans-serif; font-family: var(--font-family);
gap: 11px; gap: 11px;
font-size: 14px; font-size: 14px;
} }
@ -28,13 +28,15 @@
.promptName { .promptName {
font-weight: 400; font-weight: 400;
color: #000; color: var(--color-text);
margin:0; margin:0;
font-family: var(--font-family);
} }
.promptDate { .promptDate {
font: 14px; font: 14px;
color: #6b7280; color: var(--color-gray);
font-family: var(--font-family);
} }
.promptText { .promptText {
@ -44,6 +46,8 @@
min-height: 0; min-height: 0;
opacity: 0.5; opacity: 0.5;
margin:0; margin:0;
color: var(--color-text);
font-family: var(--font-family);
} }
.promptText.p { .promptText.p {
@ -60,10 +64,12 @@
.actionButton { .actionButton {
padding: 0.5rem; padding: 0.5rem;
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-secondary);
color: #fff; color: var(--color-bg);
cursor: pointer; cursor: pointer;
border: none; border: none;
font-family: var(--font-family);
transition: background-color 0.2s ease;
} }
.actionButton:disabled { .actionButton:disabled {
@ -73,39 +79,39 @@
.runButton { .runButton {
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-secondary);
color: #fff; color: var(--color-bg);
} }
.runButton:hover:not(:disabled) { .runButton:hover:not(:disabled) {
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-secondary-hover);
color: #fff; color: var(--color-bg);
cursor: pointer; cursor: pointer;
} }
.shareButton { .shareButton {
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-secondary);
color: #fff; color: var(--color-bg);
} }
.shareButton:hover:not(:disabled) { .shareButton:hover:not(:disabled) {
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-secondary-hover);
color: #fff; color: var(--color-bg);
} }
.deleteButton { .deleteButton {
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-red);
color: #fff; color: var(--color-bg);
} }
.deleteButton:hover:not(:disabled) { .deleteButton:hover:not(:disabled) {
border-radius: 12px; border-radius: 12px;
background: var(--Brand-Green-Green, #3A8088); background: var(--color-red-hover);
color: #fff; color: var(--color-bg);
} }
.promptContent { .promptContent {
@ -120,15 +126,17 @@
.errorMessage { .errorMessage {
margin-top: 0.75rem; margin-top: 0.75rem;
padding: 0.5rem; padding: 0.5rem;
background-color: #fef2f2; background-color: var(--color-red-disabled);
border: 1px solid #fecaca; border: 1px solid var(--color-red);
border-radius: 0.25rem; border-radius: 0.25rem;
font-size: 0.875rem; font-size: 0.875rem;
color: #b91c1c; color: var(--color-red);
font-family: var(--font-family);
} }
.deletingMessage { .deletingMessage {
margin-top: 0.75rem; margin-top: 0.75rem;
font-size: 0.875rem; font-size: 0.875rem;
color: #6b7280; color: var(--color-gray);
font-family: var(--font-family);
} }

View file

@ -3,6 +3,7 @@
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
position: relative; position: relative;
font-family: var(--font-family);
} }
.cancelContainer { .cancelContainer {
@ -17,19 +18,20 @@
align-items: center; align-items: center;
gap: 4px; gap: 4px;
padding: 8px 16px; padding: 8px 16px;
background: white; background: var(--color-bg);
border: 1px solid #ddd; border: 1px solid var(--color-gray-disabled);
border-radius: 20px; border-radius: 20px;
color: #666; color: var(--color-gray);
font-size: 14px; font-size: 14px;
cursor: pointer; cursor: pointer;
transition: all 0.2s; transition: all 0.2s;
font-family: Arial, Helvetica, sans-serif; font-family: var(--font-family);
} }
.cancelButton:hover { .cancelButton:hover {
background-color: #f5f5f5; background-color: var(--color-surface);
border-color: #ccc; border-color: var(--color-gray);
color: var(--color-text);
} }
.cancelIcon { .cancelIcon {

View file

@ -13,7 +13,7 @@
} }
.modal { .modal {
background: white; background: var(--color-bg);
border-radius: 12px; border-radius: 12px;
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
max-width: 90vw; max-width: 90vw;
@ -23,6 +23,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.header { .header {
@ -30,8 +31,8 @@
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 20px; padding: 20px;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--color-gray-disabled);
background-color: #f9fafb; background-color: var(--color-surface);
flex-shrink: 0; flex-shrink: 0;
} }
@ -39,7 +40,8 @@
margin: 0; margin: 0;
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
color: #111827; color: var(--color-text);
font-family: var(--font-family);
} }
.closeButton { .closeButton {
@ -51,15 +53,15 @@
border: none; border: none;
border-radius: 8px; border-radius: 8px;
background-color: transparent; background-color: transparent;
color: #6b7280; color: var(--color-gray);
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
font-size: 18px; font-size: 18px;
} }
.closeButton:hover { .closeButton:hover {
background-color: #e5e7eb; background-color: var(--color-gray-disabled);
color: #374151; color: var(--color-text);
} }
.content { .content {
@ -71,8 +73,8 @@
.tabNavigation { .tabNavigation {
display: flex; display: flex;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--color-gray-disabled);
background-color: #f9fafb; background-color: var(--color-surface);
padding: 0 20px; padding: 0 20px;
} }
@ -80,22 +82,23 @@
padding: 12px 16px; padding: 12px 16px;
border: none; border: none;
background: none; background: none;
color: #6b7280; color: var(--color-gray);
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
transition: all 0.2s ease; transition: all 0.2s ease;
white-space: nowrap; white-space: nowrap;
font-family: var(--font-family);
} }
.tabButton:hover { .tabButton:hover {
color: #374151; color: var(--color-text);
} }
.tabButton.active { .tabButton.active {
color: var(--Brand-Green-Green, #3A8088); color: var(--color-secondary);
border-bottom-color: var(--Brand-Green-Green, #3A8088); border-bottom-color: var(--color-secondary);
} }
.actionBar { .actionBar {
@ -103,8 +106,8 @@
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 16px 20px; padding: 16px 20px;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--color-gray-disabled);
background-color: #ffffff; background-color: var(--color-bg);
} }
.selectionControls { .selectionControls {
@ -118,24 +121,26 @@
align-items: center; align-items: center;
gap: 8px; gap: 8px;
padding: 8px 12px; padding: 8px 12px;
border: 1px solid #d1d5db; border: 1px solid var(--color-gray-disabled);
border-radius: 6px; border-radius: 6px;
background-color: #ffffff; background-color: var(--color-bg);
color: #374151; color: var(--color-text);
font-size: 14px; font-size: 14px;
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
font-family: var(--font-family);
} }
.selectAllButton:hover { .selectAllButton:hover {
background-color: #f9fafb; background-color: var(--color-surface);
border-color: #9ca3af; border-color: var(--color-gray);
} }
.selectionCount { .selectionCount {
font-size: 14px; font-size: 14px;
color: #6b7280; color: var(--color-gray);
font-weight: 500; font-weight: 500;
font-family: var(--font-family);
} }
.uploadButton { .uploadButton {
@ -145,16 +150,17 @@
padding: 10px 16px; padding: 10px 16px;
border: none; border: none;
border-radius: 8px; border-radius: 8px;
background-color: var(--Brand-Green-Green, #3A8088); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
font-family: var(--font-family);
} }
.uploadButton:hover { .uploadButton:hover {
background-color: #2d6b73; background-color: var(--color-secondary-hover);
} }
.fileListContainer { .fileListContainer {
@ -170,13 +176,14 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 200px; height: 200px;
color: #6b7280; color: var(--color-gray);
font-size: 16px; font-size: 16px;
text-align: center; text-align: center;
font-family: var(--font-family);
} }
.error { .error {
color: #dc2626; color: var(--color-red);
} }
.selectableFileList { .selectableFileList {
@ -190,21 +197,21 @@
align-items: center; align-items: center;
gap: 12px; gap: 12px;
padding: 12px; padding: 12px;
border: 1px solid #e5e7eb; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
background-color: #ffffff; background-color: var(--color-bg);
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
} }
.selectableFileItem:hover { .selectableFileItem:hover {
background-color: #f9fafb; background-color: var(--color-surface);
border-color: #d1d5db; border-color: var(--color-primary);
} }
.selectableFileItem.selected { .selectableFileItem.selected {
background-color: #f0f8f8; background-color: var(--color-primary-disabled);
border-color: var(--Brand-Green-Green, #3A8088); border-color: var(--color-primary);
} }
.fileCheckbox { .fileCheckbox {

View file

@ -14,18 +14,19 @@
.h2 { .h2 {
font-size: 24px; font-size: 24px;
font-weight: 600; font-weight: 600;
font-family: 'Arial', sans-serif; font-family: var(--font-family);
color: var(--color-text);
} }
.modal { .modal {
background: white; background: var(--color-bg);
padding: 35px 40px 30px 40px; padding: 35px 40px 30px 40px;
border-radius: 30px; border-radius: 30px;
width: 90%; width: 90%;
max-width: 500px; max-width: 500px;
position: relative; position: relative;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
font-family: var(--font-family);
} }
.modalHeader { .modalHeader {
@ -38,7 +39,8 @@
.modalHeader h2 { .modalHeader h2 {
margin: 0; margin: 0;
font-size: 1.5rem; font-size: 1.5rem;
color: #333; color: var(--color-text);
font-family: var(--font-family);
} }
.closeButton { .closeButton {
@ -46,7 +48,7 @@
border: none; border: none;
font-size: 1.5rem; font-size: 1.5rem;
cursor: pointer; cursor: pointer;
color: #666; color: var(--color-gray);
padding: 0.25rem; padding: 0.25rem;
display: flex; display: flex;
align-items: center; align-items: center;
@ -54,7 +56,7 @@
} }
.closeButton:hover { .closeButton:hover {
color: #333; color: var(--color-text);
} }
.closeButton:disabled { .closeButton:disabled {
@ -68,49 +70,52 @@
margin-bottom: 1rem; margin-bottom: 1rem;
text-align: center; text-align: center;
font-weight: 500; font-weight: 500;
font-family: var(--font-family);
} }
.uploadStatus.success { .uploadStatus.success {
background-color: #e6f2f2; background-color: var(--color-secondary-disabled);
color: #3a8088; color: var(--color-secondary);
border: 1px solid #3a8088; border: 1px solid var(--color-secondary);
} }
.uploadStatus.error { .uploadStatus.error {
background-color: #fceff0; background-color: var(--color-red-disabled);
color: #d85d67; color: var(--color-red);
border: 1px solid #d85d67; border: 1px solid var(--color-red);
} }
.dropzone { .dropzone {
border: 2px dashed #ccc; border: 2px dashed var(--color-gray-disabled);
border-radius: 15px; border-radius: 15px;
padding: 2rem; padding: 2rem;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
margin: 1rem 0; margin: 1rem 0;
transition: all 0.3s ease; transition: all 0.3s ease;
background-color: var(--color-bg);
} }
.dropzone.active { .dropzone.active {
border-color: #3a8088; border-color: var(--color-secondary);
background-color: #e6f2f2; background-color: var(--color-secondary-disabled);
} }
.dropzone.uploading { .dropzone.uploading {
border-color: #3a8088; border-color: var(--color-secondary);
background-color: #e6f2f2; background-color: var(--color-secondary-disabled);
cursor: wait; cursor: wait;
} }
.uploadIcon { .uploadIcon {
font-size: 3rem; font-size: 3rem;
color: #666; color: var(--color-gray);
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.dropzoneText { .dropzoneText {
color: #666; color: var(--color-gray);
font-family: var(--font-family);
} }
.dropzoneText p { .dropzoneText p {
@ -118,43 +123,41 @@
} }
.browseButton { .browseButton {
background-color: #3a8088; background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
border-radius: 15px; border-radius: 15px;
cursor: pointer; cursor: pointer;
font-family: var(--font-family);
} }
.browseButton:hover { .browseButton:hover {
background-color: #34737b; background-color: var(--color-secondary-hover);
} }
.browseButton:disabled { .browseButton:disabled {
background-color: #f4f3f5; background-color: var(--color-gray-disabled);
color: #888098; color: var(--color-gray);
cursor: not-allowed; cursor: not-allowed;
} }
.uploadButton { .uploadButton {
background-color: #3a8088; background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
border-radius: 15px; border-radius: 15px;
cursor: pointer; cursor: pointer;
font-family: var(--font-family);
} }
.uploadButton:hover { .uploadButton:hover {
background-color: #34737b; background-color: var(--color-secondary-hover);
} }
.uploadButton:disabled { .uploadButton:disabled {
background-color: #f4f3f5; background-color: var(--color-gray-disabled);
color: #888098; color: var(--color-gray);
cursor: not-allowed; cursor: not-allowed;
} }

View file

@ -4,12 +4,13 @@
height: 60px; height: 60px;
padding: 0px 16px; padding: 0px 16px;
justify-content: space-between; justify-content: space-between;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
font-family: var(--font-family);
} }
.fileItem:hover { .fileItem:hover {
background-color: #f9f9f9; background-color: var(--color-surface);
} }
/* Column layout matching the header structure */ /* Column layout matching the header structure */
@ -18,8 +19,9 @@
align-items: center; align-items: center;
overflow: hidden; overflow: hidden;
font-weight: 500; font-weight: 500;
color: #333; color: var(--color-text);
padding-left: 14px; /* Align with table header */ padding-left: 14px; /* Align with table header */
font-family: var(--font-family);
} }
.fileName span { .fileName span {
@ -31,28 +33,31 @@
.fileType { .fileType {
font-size: 14px; font-size: 14px;
color: #666; color: var(--color-gray);
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 2px; gap: 2px;
font-family: var(--font-family);
} }
.fileSource { .fileSource {
font-size: 12px; font-size: 12px;
color: #888; color: var(--color-gray-hover);
font-weight: 400; font-weight: 400;
opacity: 0.8; opacity: 0.8;
font-family: var(--font-family);
} }
.fileSize { .fileSize {
font-size: 14px; font-size: 14px;
color: #666; color: var(--color-gray);
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
font-family: var(--font-family);
} }
.fileDateWithActions { .fileDateWithActions {
@ -64,16 +69,17 @@
.fileDate { .fileDate {
font-size: 14px; font-size: 14px;
color: #666; color: var(--color-gray);
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
margin-right: 8px; margin-right: 8px;
font-family: var(--font-family);
} }
.icon { .icon {
font-size: 18px; font-size: 18px;
color: #757575; color: var(--color-gray);
flex-shrink: 0; flex-shrink: 0;
} }
@ -95,34 +101,35 @@
border: none; border: none;
border-radius: 4px; border-radius: 4px;
background-color: transparent; background-color: transparent;
color: var(--text-color-secondary, #666); color: var(--color-gray);
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
min-width: 32px; min-width: 32px;
font-family: var(--font-family);
} }
.downloadButton:hover:not(:disabled), .downloadButton:hover:not(:disabled),
.deleteButton:hover:not(:disabled), .deleteButton:hover:not(:disabled),
.previewButton:hover:not(:disabled) { .previewButton:hover:not(:disabled) {
background-color: var(--background-color-hover, #e8e8e8); background-color: var(--color-surface);
color: var(--text-color-primary, #333); color: var(--color-text);
} }
.deleteButton:hover:not(:disabled) { .deleteButton:hover:not(:disabled) {
color: #dc2626; color: var(--color-red);
} }
.previewButton:hover:not(:disabled) { .previewButton:hover:not(:disabled) {
color: #3b82f6; color: var(--color-secondary);
} }
.deleteButton.confirm { .deleteButton.confirm {
background-color: #fee2e2; background-color: var(--color-red-disabled);
color: #dc2626; color: var(--color-red);
} }
.deleteButton.confirm:hover:not(:disabled) { .deleteButton.confirm:hover:not(:disabled) {
background-color: #fecaca; background-color: var(--color-red-hover);
} }
.downloadButton:disabled, .downloadButton:disabled,
@ -139,18 +146,19 @@
.downloadButton.downloading, .downloadButton.downloading,
.deleteButton.deleting { .deleteButton.deleting {
background-color: var(--background-color-light, #f5f5f5); background-color: var(--color-surface);
} }
.actionText { .actionText {
font-size: 12px; font-size: 12px;
color: var(--text-color-secondary, #666); color: var(--color-gray);
animation: pulse 1.5s infinite; animation: pulse 1.5s infinite;
white-space: nowrap; white-space: nowrap;
font-family: var(--font-family);
} }
.deleteButton.confirm .actionText { .deleteButton.confirm .actionText {
color: #dc2626; color: var(--color-red);
animation: none; animation: none;
} }

View file

@ -4,8 +4,9 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding: 60px 20px; padding: 60px 20px;
color: var(--text-color-secondary, #666); color: var(--color-gray);
font-style: italic; font-style: italic;
font-family: var(--font-family);
} }
/* Files table container */ /* Files table container */
@ -30,8 +31,8 @@
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 10; z-index: 10;
background-color: #fff; background-color: var(--color-bg);
border-bottom: 1px solid #f1f1f1; border-bottom: 1px solid var(--color-gray-disabled);
margin-bottom: 10px; margin-bottom: 10px;
flex-shrink: 0; flex-shrink: 0;
} }
@ -42,15 +43,16 @@
align-items: center; align-items: center;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
color: #333; color: var(--color-text);
cursor: pointer; cursor: pointer;
white-space: nowrap; white-space: nowrap;
padding-left: 0; padding-left: 0;
transition: color 0.2s ease; transition: color 0.2s ease;
font-family: var(--font-family);
} }
.headerCell:hover { .headerCell:hover {
color: var(--Grayscale-Black, #24262B); color: var(--color-primary);
} }
/* Adjust first column for icon space */ /* Adjust first column for icon space */
@ -62,12 +64,12 @@
.sortIcon { .sortIcon {
margin-left: 6px; margin-left: 6px;
font-size: 14px; font-size: 14px;
color: #666; color: var(--color-gray);
transition: color 0.2s ease; transition: color 0.2s ease;
} }
.headerCell:hover .sortIcon { .headerCell:hover .sortIcon {
color: var(--Grayscale-Black, #24262B); color: var(--color-primary);
} }
/* File list styling */ /* File list styling */
@ -85,7 +87,7 @@
.filesList li { .filesList li {
display: grid !important; display: grid !important;
grid-template-columns: 45% 15% 15% 25%; grid-template-columns: 45% 15% 15% 25%;
border-bottom: 1px solid #f1f1f1; border-bottom: 1px solid var(--color-gray-disabled);
height: 60px; height: 60px;
padding: 0 16px; padding: 0 16px;
align-items: center; align-items: center;
@ -94,7 +96,7 @@
} }
.filesList li:hover { .filesList li:hover {
background-color: #f9f9f9; background-color: var(--color-surface);
} }

View file

@ -4,7 +4,8 @@
height: 70px; height: 70px;
padding: 0px 16px; padding: 0px 16px;
justify-content: space-between; justify-content: space-between;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
font-family: var(--font-family);
} }
.userProfile { .userProfile {
@ -13,7 +14,7 @@
.profileIcon { .profileIcon {
font-size: 36px; font-size: 36px;
color: var(--Grayscale-Gray, #E9E9E9); color: var(--color-gray-disabled);
} }
.userInfo { .userInfo {
@ -27,6 +28,8 @@
.userName { .userName {
margin: 0; margin: 0;
font-size: 14px; font-size: 14px;
color: var(--color-text);
font-family: var(--font-family);
} }
.userEmail, .userEmail,
@ -34,20 +37,21 @@
margin: 0; margin: 0;
font-size: 12px; font-size: 12px;
font-weight: light; font-weight: light;
color: var(--color-gray);
font-family: var(--font-family);
} }
.actions { .actions {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.editBtn:hover { .editBtn:hover {
color: var(--Brand-Green-Green, #3A8088); color: var(--color-secondary);
} }
.deleteBtn:hover { .deleteBtn:hover {
color: var(--Brand-Green-Green, #3A8088); color: var(--color-red);
} }

View file

@ -1,37 +1,43 @@
/* Allgemeine Stile */ /* Allgemeine Stile */
.sidebarContainer { .sidebarContainer {
border-radius: 30px; border-radius: 30px;
border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); border: none;
background: var(--Grayscale-True-White, #FFF); background: var(--color-bg);
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
width: 240px; width: 240px;
flex-shrink: 0;
margin-top: 51px; margin-top: 51px;
margin-left: 49px; margin-left: 49px;
padding-bottom: 1px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
} }
.sidebar { .sidebar {
display: flex; display: flex;
width: 200px; width: 240px;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
flex-shrink: 0; flex-shrink: 0;
margin: 0 0 30px 0; margin: 0 0 30px 0;
font-family: var(--font-family);
} }
.logoContainer { .logoContainer {
display: flex; display: flex;
width: 200px; width: 100%;
height: 60px; height: auto;
padding: 13px 20px; padding: 30px 20px 7px 20px;
justify-content: center; justify-content: center;
align-items: flex-start; align-items: center;
flex-shrink: 0; flex-shrink: 0;
} }
.logo { .logo {
max-width: 100%; max-width: 80%;
height: auto; height: auto;
color: var(--color-primary);
} }

View file

@ -22,7 +22,7 @@ const Sidebar: React.FC<SidebarProps> = ({ data }) => {
return ( return (
<div className={styles.sidebarContainer}> <div className={styles.sidebarContainer}>
<div className={styles.logoContainer}> <div className={styles.logoContainer}>
<img src="..\..\..\src\assets\LogoPowerOn.png" alt="Logo" className={styles.logo} /> <img src="/logos/PowerOn_transparent.png" alt="Logo" className={styles.logo} />
</div> </div>
<div> <div>

View file

@ -49,8 +49,8 @@ const useSidebarData = () => {
}, },
{ {
id: '7', id: '7',
name: 'Settings', name: 'Einstellungen',
link: '', link: '/einstellungen',
icon: GoGear, icon: GoGear,
}, },
{ {

View file

@ -12,24 +12,24 @@
padding: 0 3px 0 15px; padding: 0 3px 0 15px;
align-items: center; align-items: center;
gap: 9px; gap: 9px;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
} }
.menu li:hover, .menu li.active { .menu li:hover, .menu li.active {
background: var(--Brand-Purple-Purple, #5F59D4); background: var(--color-secondary);
color: white; color: var(--color-bg);
border-top-right-radius: 12px; border-top-right-radius: 12px;
border-bottom-right-radius: 12px; border-bottom-right-radius: 12px;
} }
.menu li:hover a, .menu li.active a { .menu li:hover a, .menu li.active a {
color: white; color: var(--color-bg);
text-decoration: none; text-decoration: none;
} }
.menu li a { .menu li a {
text-decoration: none; text-decoration: none;
font-family: Avenir, Helvetica, Arial, sans-serif; font-family: var(--font-family);
font-size: 14px; font-size: 14px;
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 500;

View file

@ -1,6 +1,6 @@
.submenu { .submenu {
position: relative; position: relative;
background-color: white; background-color: var(--color-bg);
overflow: hidden; overflow: hidden;
} }
@ -19,7 +19,7 @@
.verticalLine { .verticalLine {
width: 1px; width: 1px;
background-color: #F1F1F1; background-color: var(--color-gray-disabled);
margin-left: 46px; margin-left: 46px;
margin-right: -40px; margin-right: -40px;
} }
@ -32,7 +32,7 @@
.submenuList li { .submenuList li {
width: 153px; width: 153px;
height: 20px; height: 20px;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
margin: 4px 0; margin: 4px 0;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
@ -44,10 +44,11 @@
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 500;
line-height: normal; line-height: normal;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
text-decoration: none; text-decoration: none;
display: block; display: block;
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.textContainer { .textContainer {

View file

@ -1,12 +1,13 @@
.user_section { .user_section {
display: flex; display: flex;
width: 200px; width: 240px;
height: auto; height: auto;
min-height: 100px; min-height: 100px;
padding: 20px; padding: 20px;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
gap: 8px; gap: 8px;
font-family: var(--font-family);
} }
.user_info { .user_info {
@ -18,7 +19,7 @@
.user_icon { .user_icon {
font-size: 40px; font-size: 40px;
color: #666; color: var(--color-gray);
flex-shrink: 0; flex-shrink: 0;
} }
@ -32,32 +33,37 @@
margin: 0; margin: 0;
font-size: 16pt; font-size: 16pt;
line-height: 1.2; line-height: 1.2;
color: var(--color-text);
font-family: var(--font-family);
} }
.user_section p { .user_section p {
margin: 0; margin: 0;
font-size: 0.9rem; font-size: 0.9rem;
color: #666; color: var(--color-gray);
font-family: var(--font-family);
} }
.logout_button { .logout_button {
margin-top: 4px; margin-top: 4px;
padding: 8px 16px; padding: 8px 16px;
background-color: var(--Brand-Purple-Purple, #5F59D4); background-color: var(--color-secondary);
color: white; color: var(--color-bg);
border: none; border: none;
border-radius: 4px; border-radius: 15px;
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 14px;
font-family: var(--font-family);
transition: background-color 0.2s; transition: background-color 0.2s;
width: 100%; width: 100%;
} }
.logout_button:hover { .logout_button:hover {
background-color: var(--color-secondary-hover);
cursor: pointer; cursor: pointer;
} }
.logout_button:active { .logout_button:active {
background-color: #b71c1c; background-color: var(--color-red);
} }

View file

@ -32,7 +32,7 @@ export function useAuth() {
// Create a custom axios instance for this request // Create a custom axios instance for this request
const instance = axios.create({ const instance = axios.create({
baseURL: 'https://gateway.poweron-center.net', baseURL: import.meta.env.VITE_API_BASE_URL,
withCredentials: true, withCredentials: true,
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded' 'Content-Type': 'application/x-www-form-urlencoded'

18
src/index.css Normal file
View file

@ -0,0 +1,18 @@
/* Global CSS Reset */
* {
box-sizing: border-box;
}
html, body {
margin: 0;
padding: 0;
height: 100%;
overflow: hidden;
}
#root {
height: 100vh;
width: 100vw;
margin: 0;
padding: 0;
}

View file

@ -3,12 +3,17 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 20px; gap: 20px;
font-family: var(--font-family);
width: 98%;
max-height: calc(100vh - 100px);
} }
.chatLogContainer { .chatLogContainer {
display: flex; display: flex;
gap: 20px; gap: 20px;
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.chatLogContainer.expanded { .chatLogContainer.expanded {
@ -26,15 +31,15 @@
} }
.chatArea45vh { .chatArea45vh {
height: 45vh;
}
.chatArea60vh {
height: 60vh; height: 60vh;
} }
.chatArea60vh {
height: 85vh;
}
.logArea15vh { .logArea15vh {
height: 15vh; height: 10vh;
} }
.logArea25vh { .logArea25vh {
@ -46,7 +51,7 @@
} }
.logArea60vh { .logArea60vh {
height: 60vh; height: 85vh;
} }
.promptArea30vh { .promptArea30vh {

View file

@ -63,13 +63,13 @@ function Dashboard () {
// Memoize style objects to prevent infinite re-renders // Memoize style objects to prevent infinite re-renders
const promptStyle = useMemo(() => ({ const promptStyle = useMemo(() => ({
marginBottom: !isPromptAreaCollapsed ? "40px" : "0" marginBottom: !isPromptAreaCollapsed ? "0px" : "0"
}), [isPromptAreaCollapsed]); }), [isPromptAreaCollapsed]);
const chatStyle = useMemo(() => ({ const chatStyle = useMemo(() => ({
width: isChatExpanded ? "100%" : "calc(50% - 10px)", width: isChatExpanded ? "100%" : "calc(50% - 10px)",
flex: isChatExpanded ? "none" : "1", flex: isChatExpanded ? "none" : "1",
marginBottom: isChatExpanded ? "40px" : "0" marginBottom: isChatExpanded ? "0px" : "0"
}), [isChatExpanded]); }), [isChatExpanded]);
const logStyle = useMemo(() => ({ const logStyle = useMemo(() => ({

View file

@ -5,17 +5,18 @@
flex-direction: column; flex-direction: column;
align-self: stretch; align-self: stretch;
border-radius: 30px; border-radius: 30px;
border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); border: 1px solid var(--color-gray-disabled);
background: var(--Grayscale-True-White, #FFF); background: var(--color-bg);
position: relative; position: relative;
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
max-height: calc(100vh - 100px); max-height: calc(100vh - 100px);
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.horizontalLineLight { .horizontalLineLight {
width: calc(100% + 60px); width: calc(100% + 60px);
background-color: #F1F1F1; background-color: var(--color-gray-disabled);
height: 1px; height: 1px;
margin-left: -30px; margin-left: -30px;
margin-bottom: 0; margin-bottom: 0;
@ -34,8 +35,8 @@
.datei_hinzufügen_button { .datei_hinzufügen_button {
border-radius: 30px; border-radius: 30px;
background: #3a8080; background: var(--color-secondary);
color: #fff; color: var(--color-bg);
border: none; border: none;
outline: none; outline: none;
text-align: left; text-align: left;
@ -48,11 +49,12 @@
align-items: center; align-items: center;
flex-shrink: 0; flex-shrink: 0;
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
font-family: var(--font-family);
} }
.datei_hinzufügen_button:hover { .datei_hinzufügen_button:hover {
cursor: pointer; cursor: pointer;
background-color: #34737b; background-color: var(--color-secondary-hover);
} }
.add_icon { .add_icon {
@ -87,19 +89,19 @@
transition: all 0.2s ease; transition: all 0.2s ease;
white-space: nowrap; white-space: nowrap;
position: relative; position: relative;
font-family: var(--font-family);
} }
.tabButtonActive { .tabButtonActive {
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
} }
.tabButtonInactive { .tabButtonInactive {
color: #A0A0A0; color: var(--color-gray);
} }
.tabButtonInactive:hover { .tabButtonInactive:hover {
background-color: var(--background-color-hover, #f5f5f5); color: var(--color-text);
color: var(--text-color-primary, #333);
} }
.tabUnderline { .tabUnderline {
@ -107,7 +109,7 @@
bottom: -2px; bottom: -2px;
left: 0; left: 0;
height: 1px; height: 1px;
background-color: var(--Grayscale-Black, #24262B); background-color: var(--color-text);
border-radius: 1px; border-radius: 1px;
} }

View file

@ -0,0 +1,170 @@
.einstellungenContainer {
margin: 51px 49px 0 36px;
display: flex;
flex-direction: column;
align-self: stretch;
justify-content: top;
max-height: calc(100vh - 100px);
overflow: hidden;
font-family: var(--font-family);
width: 98%;
}
.contentWrapper {
flex: 1;
overflow-y: auto;
padding: 0px 0;
}
.settingsCard {
display: flex;
padding: 30px;
flex-direction: column;
align-self: stretch;
border-radius: 30px;
background: var(--color-bg);
position: relative;
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
width: 100%;
margin: 0 auto;
gap: 30px;
}
.title {
font-size: 2rem;
font-weight: 600;
color: var(--color-text);
margin: 0 0 20px 0;
font-family: var(--font-family);
}
.settingsSection {
display: flex;
flex-direction: column;
gap: 20px;
}
.sectionTitle {
font-size: 1.25rem;
font-weight: 500;
color: var(--color-text);
margin: 0;
padding-bottom: 10px;
border-bottom: 1px solid var(--color-gray-disabled);
font-family: var(--font-family);
}
.settingItem {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
background: var(--color-surface);
border-radius: 20px;
gap: 20px;
}
.settingInfo {
display: flex;
flex-direction: column;
gap: 5px;
flex: 1;
}
.settingLabel {
font-size: 1rem;
font-weight: 500;
color: var(--color-text);
font-family: var(--font-family);
}
.settingDescription {
font-size: 0.875rem;
color: var(--color-gray);
font-family: var(--font-family);
}
.themeToggle {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 20px;
border-radius: 25px;
border: 2px solid var(--color-gray-disabled);
background: var(--color-bg);
color: var(--color-text);
cursor: pointer;
transition: all 0.3s ease;
font-family: var(--font-family);
font-size: 0.875rem;
font-weight: 500;
min-width: 120px;
}
.themeToggle:hover {
border-color: var(--color-secondary);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(63, 81, 181, 0.15);
}
.themeToggle.light {
background: linear-gradient(135deg, var(--color-bg) 0%, var(--color-surface) 100%);
}
.themeToggle.dark {
background: linear-gradient(135deg, var(--color-surface) 0%, var(--color-bg) 100%);
border-color: var(--color-primary);
}
.themeToggle.dark:hover {
border-color: var(--color-primary-hover);
box-shadow: 0 4px 12px rgba(178, 102, 255, 0.15);
}
.toggleSlider {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--color-secondary);
transition: all 0.3s ease;
}
.dark .toggleSlider {
background: var(--color-primary);
}
.toggleIcon {
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
}
.toggleLabel {
color: var(--color-text);
font-weight: 500;
}
/* Responsive design */
@media (max-width: 768px) {
.einstellungenContainer {
margin: 20px;
}
.settingsCard {
padding: 20px;
}
.settingItem {
flex-direction: column;
align-items: flex-start;
gap: 15px;
}
.themeToggle {
align-self: flex-end;
}
}

View file

@ -0,0 +1,82 @@
import React, { useState, useEffect } from 'react';
import styles from './Einstellungen.module.css';
function Einstellungen() {
const [isDarkMode, setIsDarkMode] = useState(false);
// Load saved theme preference on component mount
useEffect(() => {
const savedTheme = localStorage.getItem('theme');
const prefersDark = savedTheme === 'dark' || (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches);
setIsDarkMode(prefersDark);
applyTheme(prefersDark);
}, []);
const applyTheme = (isDark: boolean) => {
if (isDark) {
document.documentElement.classList.add('dark-theme');
document.documentElement.classList.remove('light-theme');
} else {
document.documentElement.classList.add('light-theme');
document.documentElement.classList.remove('dark-theme');
}
document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');
};
const toggleTheme = () => {
const newIsDarkMode = !isDarkMode;
setIsDarkMode(newIsDarkMode);
applyTheme(newIsDarkMode);
localStorage.setItem('theme', newIsDarkMode ? 'dark' : 'light');
};
return (
<div className={styles.einstellungenContainer}>
<div className={styles.contentWrapper}>
<div className={styles.settingsCard}>
<h1 className={styles.title}>Einstellungen</h1>
<div className={styles.settingsSection}>
<h2 className={styles.sectionTitle}>Darstellung</h2>
<div className={styles.settingItem}>
<div className={styles.settingInfo}>
<span className={styles.settingLabel}>Theme</span>
<span className={styles.settingDescription}>
Wechseln Sie zwischen hellem und dunklem Modus
</span>
</div>
<button
className={`${styles.themeToggle} ${isDarkMode ? styles.dark : styles.light}`}
onClick={toggleTheme}
aria-label={isDarkMode ? 'Zu hellem Modus wechseln' : 'Zu dunklem Modus wechseln'}
>
<div className={styles.toggleSlider}>
<div className={styles.toggleIcon}>
{isDarkMode ? '🌙' : '☀️'}
</div>
</div>
<span className={styles.toggleLabel}>
{isDarkMode ? 'Dunkel' : 'Hell'}
</span>
</button>
</div>
</div>
<div className={styles.settingsSection}>
<h2 className={styles.sectionTitle}>Über</h2>
<div className={styles.settingItem}>
<div className={styles.settingInfo}>
<span className={styles.settingLabel}>Version</span>
<span className={styles.settingDescription}>1.0.0</span>
</div>
</div>
</div>
</div>
</div>
</div>
);
}
export default Einstellungen;

View file

@ -1,14 +1,13 @@
.homeContainer { .homeContainer {
position: relative; position: relative;
background-color: #F7F7F7; background-color: var(--color-surface);
min-height: calc(100vh - 15px); min-height: 100vh;
max-height: calc(100vh - 15px); max-height: 100vh;
width: 100%; width: 100vw;
font-family: Arial, Helvetica, sans-serif; font-family: var(--font-family);
z-index: 0; z-index: 0;
overflow: hidden; overflow: hidden;
padding: 0 49px 0 36px; padding: 0 49px 0 0;
width: calc(100% - 49px - 36px);
} }
.homeContainer::before { .homeContainer::before {
@ -16,10 +15,9 @@
position: absolute; position: absolute;
top: 0; left: 0; top: 0; left: 0;
width: 100%; height: 100%; width: 100%; height: 100%;
background-image: url('../../assets/background.png'); background-image: radial-gradient(circle, var(--color-gray-disabled) 1px, transparent 1px);
background-repeat: repeat; background-size: 8px 8px;
background-size: 50px; opacity: 0.4;
opacity: 0.2; /* Adjust this to your liking */
z-index: -1; z-index: -1;
pointer-events: none; pointer-events: none;
} }
@ -35,4 +33,5 @@
.body { .body {
display: flex; display: flex;
max-width: 100vw; max-width: 100vw;
height: 100vh;
} }

View file

@ -1,7 +1,7 @@
.container { .container {
display: flex; display: flex;
min-height: 100vh; min-height: 100vh;
background-color: #ffffff; background-color: var(--color-bg);
} }
.leftPanel { .leftPanel {
@ -9,12 +9,12 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 3rem; padding: 3rem;
background-color: #ffffff; background-color: var(--color-bg);
} }
.rightPanel { .rightPanel {
flex: 1; flex: 1;
background-color: #ffffff; background-color: var(--color-bg);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -38,7 +38,8 @@
font-size: 2rem; font-size: 2rem;
font-weight: 600; font-weight: 600;
margin-bottom: 2rem; margin-bottom: 2rem;
color: #1a1a1a; color: var(--color-text);
font-family: var(--font-family);
} }
.loginForm { .loginForm {
@ -50,21 +51,23 @@
.input { .input {
width: 100%; width: 100%;
padding: 12px 16px; padding: 12px 16px;
border: 1px solid #e0e0e0; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
font-size: 1rem; font-size: 1rem;
transition: all 0.2s ease; transition: all 0.2s ease;
background-color: #ffffff; background-color: var(--color-bg);
color: var(--color-text);
font-family: var(--font-family);
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: #0078d4; border-color: var(--color-secondary);
box-shadow: 0 0 0 2px rgba(0, 120, 212, 0.1); box-shadow: 0 0 0 2px rgba(63, 81, 181, 0.1);
} }
.input::placeholder { .input::placeholder {
color: #757575; color: var(--color-gray);
} }
.button { .button {
@ -77,24 +80,25 @@
transition: all 0.2s ease; transition: all 0.2s ease;
border: none; border: none;
text-align: center; text-align: center;
font-family: var(--font-family);
} }
.primaryButton { .primaryButton {
background-color: #0078d4; background-color: var(--color-secondary);
color: white; color: var(--color-bg);
} }
.primaryButton:hover { .primaryButton:hover {
background-color: #006cbd; background-color: var(--color-secondary-hover);
} }
.microsoftButton { .microsoftButton {
background-color: #2f2f2f; background-color: var(--color-text);
color: white; color: var(--color-bg);
} }
.microsoftButton:hover { .microsoftButton:hover {
background-color: #1f1f1f; background-color: var(--color-gray);
} }
.divider { .divider {
@ -108,13 +112,14 @@
.divider::after { .divider::after {
content: ''; content: '';
flex: 1; flex: 1;
border-bottom: 1px solid #e0e0e0; border-bottom: 1px solid var(--color-gray-disabled);
} }
.divider span { .divider span {
padding: 0 1rem; padding: 0 1rem;
color: #757575; color: var(--color-gray);
font-size: 0.9rem; font-size: 0.9rem;
font-family: var(--font-family);
} }
.registerLink { .registerLink {
@ -126,18 +131,20 @@
} }
.registerLink span { .registerLink span {
color: #757575; color: var(--color-gray);
font-size: 0.9rem; font-size: 0.9rem;
font-family: var(--font-family);
} }
.textButton { .textButton {
background: none; background: none;
border: none; border: none;
color: #0078d4; color: var(--color-secondary);
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
font-size: 0.9rem; font-size: 0.9rem;
font-family: var(--font-family);
} }
.textButton:hover { .textButton:hover {
@ -161,12 +168,13 @@ button:disabled {
} }
.error { .error {
color: #dc3545; color: var(--color-red);
background-color: #f8d7da; background-color: var(--color-red-disabled);
border: 1px solid #f5c6cb; border: 1px solid var(--color-red);
border-radius: 8px; border-radius: 8px;
padding: 12px; padding: 12px;
margin-bottom: 1rem; margin-bottom: 1rem;
font-size: 0.9rem; font-size: 0.9rem;
text-align: center; text-align: center;
font-family: var(--font-family);
} }

View file

@ -3,8 +3,8 @@ import { loginRequest } from '../auth/authConfig';
import { useNavigate, useLocation } from 'react-router-dom'; import { useNavigate, useLocation } from 'react-router-dom';
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import styles from './Login.module.css'; import styles from './Login.module.css';
import agentDiagram from '../assets/Frame 43.png'; import agentDiagram from '/logos/Frame 43.png';
import logo from '../assets/LogoPowerOn.png'; import logo from '/logos/PowerOn.png';
import { useAuth, useMsalAuth } from '../hooks/useAuthentication'; import { useAuth, useMsalAuth } from '../hooks/useAuthentication';
function Login() { function Login() {

View file

@ -5,17 +5,18 @@
flex-direction: column; flex-direction: column;
align-self: stretch; align-self: stretch;
border-radius: 30px; border-radius: 30px;
border: 1px solid var(--f-1-f-1-f-1, #F1F1F1); border: 1px solid var(--color-gray-disabled);
background: var(--Grayscale-True-White, #FFF); background: var(--color-bg);
position: relative; position: relative;
box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10); box-shadow: 0px 2px 6px 0px rgba(194, 194, 194, 0.10);
max-height: calc(100vh - 100px); max-height: calc(100vh - 100px);
overflow: hidden; overflow: hidden;
font-family: var(--font-family);
} }
.horizontalLineLight { .horizontalLineLight {
width: 100%; width: 100%;
background-color: #F1F1F1; background-color: var(--color-gray-disabled);
height: 1px; height: 1px;
margin-top: 90px; margin-top: 90px;
margin-left: -30px; margin-left: -30px;
@ -27,16 +28,17 @@
gap: 30px; gap: 30px;
align-items: flex-start; align-items: flex-start;
height: 62px; height: 62px;
color: var(--Grayscale-Black, #24262B); color: var(--color-text);
padding-top: 30px; padding-top: 30px;
padding-bottom: 30px; padding-bottom: 30px;
font-family: var(--font-family);
} }
.mitglieder_hinzufügen_button { .mitglieder_hinzufügen_button {
border-radius: 30px; border-radius: 30px;
background: var(--Grayscale-Gray, #E9E9E9); background: var(--color-gray-disabled);
color: var(--color-text);
border: none; border: none;
outline: none; outline: none;
text-align: left; text-align: left;
@ -48,10 +50,13 @@
display: flex; display: flex;
gap: 10px; gap: 10px;
align-items: center; align-items: center;
font-family: var(--font-family);
transition: background-color 0.2s ease;
} }
.mitglieder_hinzufügen_button:hover { .mitglieder_hinzufügen_button:hover {
cursor: pointer; cursor: pointer;
background-color: var(--color-gray);
} }
.add_icon { .add_icon {
@ -72,9 +77,11 @@
align-items: center; align-items: center;
height: 60px; /* Specific height for each item */ height: 60px; /* Specific height for each item */
padding: 0 16px; padding: 0 16px;
border-bottom: 1px solid #F1F1F1; border-bottom: 1px solid var(--color-gray-disabled);
font-size: 16px; font-size: 16px;
transition: background-color 0.2s ease; transition: background-color 0.2s ease;
color: var(--color-text);
font-family: var(--font-family);
} }
.actions { .actions {

View file

@ -1,7 +1,7 @@
.container { .container {
display: flex; display: flex;
min-height: 100vh; min-height: 100vh;
background-color: #ffffff; background-color: var(--color-bg);
} }
.leftPanel { .leftPanel {
@ -9,12 +9,12 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 3rem; padding: 3rem;
background-color: #ffffff; background-color: var(--color-bg);
} }
.rightPanel { .rightPanel {
flex: 1; flex: 1;
background-color: #ffffff; background-color: var(--color-bg);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -38,7 +38,8 @@
font-size: 2rem; font-size: 2rem;
font-weight: 600; font-weight: 600;
margin-bottom: 2rem; margin-bottom: 2rem;
color: #1a1a1a; color: var(--color-text);
font-family: var(--font-family);
} }
.registerForm { .registerForm {
@ -56,27 +57,30 @@
.inputGroup label { .inputGroup label {
font-size: 0.9rem; font-size: 0.9rem;
font-weight: 500; font-weight: 500;
color: #1a1a1a; color: var(--color-text);
font-family: var(--font-family);
} }
.input { .input {
width: 100%; width: 100%;
padding: 12px 16px; padding: 12px 16px;
border: 1px solid #e0e0e0; border: 1px solid var(--color-gray-disabled);
border-radius: 8px; border-radius: 8px;
font-size: 1rem; font-size: 1rem;
transition: all 0.2s ease; transition: all 0.2s ease;
background-color: #ffffff; background-color: var(--color-bg);
color: var(--color-text);
font-family: var(--font-family);
} }
.input:focus { .input:focus {
outline: none; outline: none;
border-color: #0078d4; border-color: var(--color-secondary);
box-shadow: 0 0 0 2px rgba(0, 120, 212, 0.1); box-shadow: 0 0 0 2px rgba(63, 81, 181, 0.1);
} }
.input::placeholder { .input::placeholder {
color: #757575; color: var(--color-gray);
} }
.button { .button {
@ -90,30 +94,32 @@
border: none; border: none;
text-align: center; text-align: center;
margin-top: 1rem; margin-top: 1rem;
font-family: var(--font-family);
} }
.primaryButton { .primaryButton {
background-color: #0078d4; background-color: var(--color-secondary);
color: white; color: var(--color-bg);
} }
.primaryButton:hover { .primaryButton:hover {
background-color: #006cbd; background-color: var(--color-secondary-hover);
} }
.primaryButton:disabled { .primaryButton:disabled {
background-color: #cccccc; background-color: var(--color-gray-disabled);
cursor: not-allowed; cursor: not-allowed;
} }
.error { .error {
color: #dc3545; color: var(--color-red);
background-color: #f8d7da; background-color: var(--color-red-disabled);
border: 1px solid #f5c6cb; border: 1px solid var(--color-red);
border-radius: 8px; border-radius: 8px;
padding: 12px; padding: 12px;
font-size: 0.9rem; font-size: 0.9rem;
text-align: center; text-align: center;
font-family: var(--font-family);
} }
.loginLink { .loginLink {
@ -123,22 +129,24 @@
gap: 0.5rem; gap: 0.5rem;
margin-top: 1.5rem; margin-top: 1.5rem;
padding-top: 1.5rem; padding-top: 1.5rem;
border-top: 1px solid #e0e0e0; border-top: 1px solid var(--color-gray-disabled);
} }
.loginLink span { .loginLink span {
color: #757575; color: var(--color-gray);
font-size: 0.9rem; font-size: 0.9rem;
font-family: var(--font-family);
} }
.textButton { .textButton {
background: none; background: none;
border: none; border: none;
color: #0078d4; color: var(--color-secondary);
font-weight: 500; font-weight: 500;
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
font-size: 0.9rem; font-size: 0.9rem;
font-family: var(--font-family);
} }
.textButton:hover { .textButton:hover {
@ -159,7 +167,7 @@
/* Required field indicator */ /* Required field indicator */
label[htmlFor]::after { label[htmlFor]::after {
content: ' *'; content: ' *';
color: #dc3545; color: var(--color-red);
} }
.msalButton { .msalButton {
@ -169,21 +177,23 @@ label[htmlFor]::after {
gap: 10px; gap: 10px;
width: 100%; width: 100%;
padding: 10px; padding: 10px;
background-color: #fff; background-color: var(--color-bg);
border: 1px solid #ccc; border: 1px solid var(--color-gray-disabled);
border-radius: 4px; border-radius: 4px;
font-size: 16px; font-size: 16px;
cursor: pointer; cursor: pointer;
transition: background-color 0.2s; transition: background-color 0.2s;
margin-bottom: 20px; margin-bottom: 20px;
color: var(--color-text);
font-family: var(--font-family);
} }
.msalButton:hover { .msalButton:hover {
background-color: #f5f5f5; background-color: var(--color-surface);
} }
.msalButton:disabled { .msalButton:disabled {
background-color: #f5f5f5; background-color: var(--color-surface);
cursor: not-allowed; cursor: not-allowed;
} }
@ -203,11 +213,12 @@ label[htmlFor]::after {
.divider::after { .divider::after {
content: ''; content: '';
flex: 1; flex: 1;
border-bottom: 1px solid #ccc; border-bottom: 1px solid var(--color-gray-disabled);
} }
.divider span { .divider span {
padding: 0 10px; padding: 0 1rem;
color: #666; color: var(--color-gray);
font-size: 14px; font-size: 0.9rem;
font-family: var(--font-family);
} }

View file

@ -1,8 +1,8 @@
import { useState } from 'react'; import { useState } from 'react';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import styles from './Register.module.css'; import styles from './Register.module.css';
import logo from '../assets/LogoPowerOn.png'; import logo from '/logos/PowerOn.png';
import agentDiagram from '../assets/Frame 43.png'; import agentDiagram from '/logos/Frame 43.png';
import { useRegister, useMsalRegister } from '../hooks/useAuthentication'; import { useRegister, useMsalRegister } from '../hooks/useAuthentication';
interface RegisterFormData { interface RegisterFormData {