Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
200 commits
Select commit Hold shift + click to select a range
383aa88
device can use tags of scada vistwo
gh-fx2 Feb 21, 2025
bae2ced
text for slider (en,de only) + setValue implemented
gh-fx2 Feb 21, 2025
820e1fc
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Feb 24, 2025
cf9ca5b
feature/vistwo: allow empty ip adress
gh-fx2 Feb 24, 2025
288c43c
feature/vistwo: better description for address-field
gh-fx2 Feb 25, 2025
8b82734
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Feb 26, 2025
5ce24d2
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Mar 2, 2025
249a8f4
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Mar 4, 2025
6b30630
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Mar 11, 2025
a54c075
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Mar 14, 2025
b3049a2
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Mar 17, 2025
823422d
Merge branch 'master' into feature/vistwo
gh-fx2 Apr 7, 2025
3912169
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Apr 15, 2025
5e3b149
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 Apr 24, 2025
26bdca5
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 May 4, 2025
8b978bb
feature/vistwo: getTagProperty added (needed for scripts)
gh-fx2 May 13, 2025
d7cfea6
Merge branch 'frangoteam:master' into feature/vistwo
gh-fx2 May 13, 2025
e123b7c
ng update angular 16
Jun 9, 2025
55ba6fd
update libraries
Jun 9, 2025
a881a2d
update angular2-draggable
Jun 9, 2025
80e4e3a
ng build production
Jun 9, 2025
8eddcfb
Merge branch 'master' into feature/UpdateAngular16
unocelli Jun 11, 2025
ef53018
Merge pull request #1802 from Miroslav999/feature/UpdateAngular16
unocelli Jun 11, 2025
6dddf50
feat: add material and cdk update
unocelli Jun 14, 2025
05752fc
fix: report fonts
unocelli Jun 16, 2025
fd4ff93
Merge branch 'feat/pr1802' into master
unocelli Jun 16, 2025
c03530b
fix: setAdapter
unocelli Jun 17, 2025
20cb414
Merge branch 'master-angu16' into master
unocelli Jun 17, 2025
0e28f0a
feat: upadate to angular 16 (Thanks @Miroslav999)
unocelli Jun 17, 2025
ed80107
feat: add delay to show view after load dom element
unocelli Jun 18, 2025
3fd5001
Build for test
unocelli Jun 18, 2025
c78c51f
fix: jump to gauge property from context menu #1820
unocelli Jun 19, 2025
23c764c
feat: increase the max payload (100mb) and notify error #1264 #1346
unocelli Jun 19, 2025
47f773e
Merge pull request #1818 from frangoteam/feat/view-render-delay
unocelli Jun 19, 2025
4022e13
Build for production
unocelli Jun 19, 2025
be240d0
fix: apiMaxLength test configuration
unocelli Jun 19, 2025
dbb7d76
feat: chart, graph, table support placeholder #859 #1256
unocelli Jun 20, 2025
3fedbb1
fix: exception edit multi views
Jun 28, 2025
6e98a3d
fix: view close event that trigger script #1801
Jun 28, 2025
8c8f06c
fix: exception to stop animation #1765
Jun 28, 2025
ab21532
fix: value convertion for boolean in opcua #1803
unocelli Jul 1, 2025
de3caa1
Build for production
unocelli Jul 1, 2025
efcb872
Build for release
unocelli Jul 2, 2025
48e2d36
resolve merge conflicts
gh-fx2 Jul 6, 2025
4574030
cleanup
timmpo Jul 4, 2025
37d8574
change icon button
timmpo Jul 8, 2025
55a1659
refactor: rewrote setValues logic to handle DAQ data chunks more reli…
unocelli Jul 8, 2025
92028fc
fix: CORS config and chart fill gradient handling
Kiruthick-Roxx Jul 5, 2025
80d91e8
Excludes strings from numeric validation
rartem Jun 24, 2025
463841f
fix: check string type to detect number
unocelli Jul 8, 2025
85c7872
git commit -m "Fix: allow wildcard IP patterns in CORS origin check
manish3954 Jun 24, 2025
c497650
Update main.js
unocelli Jul 9, 2025
288f3f8
Build for production
unocelli Jul 13, 2025
418f254
Align Simplified Chinese with English.
children1987 Jul 7, 2025
aa5d8a0
translate
children1987 Jul 7, 2025
54e493b
translate
children1987 Jul 8, 2025
144418c
translate
children1987 Jul 8, 2025
875cedb
Build for production
unocelli Jul 13, 2025
0c99c90
fix: table data with bitmask, switch control with rendering delay
unocelli Jul 28, 2025
aa20163
fix: table data with bitmask, switch control with rendering delay
unocelli Jul 29, 2025
15d224d
Build for production
unocelli Jul 29, 2025
1f703df
feat: init webcam support
rikugun Mar 9, 2025
8651472
feat: init webcam support
rikugun Mar 9, 2025
78e9067
feat: init webcam support
rikugun Mar 9, 2025
0e4daa6
feat: add html-image refresh images after taken snapshots.
rikugun May 23, 2025
0a1c9fa
feat: add cleanup snapshots files task .
rikugun May 23, 2025
1df7dae
feat: add refresh image text
rikugun May 25, 2025
ab3a951
feat: add disable option for polling while using webcam.
rikugun Jun 2, 2025
e6f9375
fix: settings merge of new version
unocelli Jun 12, 2025
4766c44
fix: settings version
unocelli Jun 14, 2025
b6f764f
Build to test
unocelli Jun 15, 2025
118ef5d
refactor: clean snapshot
unocelli Jul 27, 2025
898a4a8
fix: remove daq options and clean
unocelli Jul 27, 2025
1915c64
refactor: clean
unocelli Jul 27, 2025
76f8d57
Build for test
unocelli Jul 27, 2025
1c1dd30
refactor: move _webcam_snapshots folder to root
unocelli Jul 28, 2025
334b169
feat: device webcam with node-webcam package #1784 (Thanks to @rikugun)
unocelli Jul 29, 2025
b6f46c2
fix: switch visible after settings
unocelli Jul 29, 2025
bab9113
chore: update package
unocelli Aug 3, 2025
0b02bee
Update electron_latest.yml
MatthewReed303 Jul 30, 2025
17753ab
Update README.md
MatthewReed303 Aug 4, 2025
49899ea
build(deps): bump form-data from 4.0.2 to 4.0.4 in /server
dependabot[bot] Jul 29, 2025
1fbb522
refactor: clean, style
unocelli Aug 5, 2025
31ef811
feat: sidenav with submenu (Thanks to @timmpo)
unocelli Aug 5, 2025
36f7d27
Update : French translation
steve0023 Jul 18, 2025
4fac972
feat: upgrade socket-io to ^4.5
rikugun Jun 24, 2025
91acf6a
fix: Object.values() return empty array
rikugun Jul 6, 2025
f484651
fix: cors and security headers
unocelli Aug 6, 2025
0f83e73
feat: with cors permissive
unocelli Aug 6, 2025
3e138b9
Build for test
unocelli Aug 6, 2025
449fbd8
chore: update socket.io (to 4.5) #1845
unocelli Aug 7, 2025
aa44869
fix: remove show delay of switch control
unocelli Aug 7, 2025
9dc7d31
fix: schedule time parser #1874
unocelli Aug 8, 2025
9a9c164
feat: Control video with start, stop, pause, reset action
unocelli Aug 2, 2025
3bafbba
feat: add controls settings and some fix
unocelli Aug 4, 2025
c2540bb
Build to test
unocelli Aug 4, 2025
f533a96
fix: relative path
unocelli Aug 7, 2025
f47d9f1
feat: add video from resources
unocelli Aug 8, 2025
ba4ecae
Build for production
unocelli Aug 8, 2025
1e9b6cf
build: Docker with more tolerant installation
unocelli Aug 8, 2025
ca82371
feat: add Float64MLE
unocelli Jul 13, 2025
64ab5e8
Build for test (Float64MLE)
unocelli Aug 11, 2025
280fabc
feat: add melsec device (backend/frontend)
unocelli Aug 13, 2025
4825791
Build to test
unocelli Aug 13, 2025
45a0599
fix: ascii and octal
unocelli Aug 15, 2025
052e41a
fix: registration and setvalue
unocelli Aug 17, 2025
ad274ce
fix: close the cards when opening a view
unocelli Aug 14, 2025
43ca7ba
Build for production
unocelli Aug 15, 2025
9dad4e5
fix: chart with custom data
unocelli Aug 16, 2025
3ffc28f
Build frontend with ES2020 for compatibility
unocelli Aug 16, 2025
2e49b8c
Restore frontend build target ES2022
unocelli Aug 17, 2025
e5861d7
fix: notification check wait send message (#1906)
unocelli Aug 20, 2025
0944889
Build for production
unocelli Aug 21, 2025
4b738f3
Comment out npm cache clean step
MatthewReed303 Aug 21, 2025
38bc965
refactor: clean melsec driver
unocelli Aug 22, 2025
bc5d6af
fix: open cards from script
unocelli Aug 27, 2025
31f878e
fix: bring clicked card to front with zIndex management #1886
unocelli Aug 27, 2025
3843d88
Build for production
unocelli Aug 27, 2025
9c772f3
fix: script bind in Read/Write Scale Script
unocelli Sep 1, 2025
333502e
refact: check existing view name #1884 (#1930)
unocelli Sep 12, 2025
99f6030
Fix for Issue #1854 – Redundant Items Data in Project Save (#1932)
unocelli Sep 12, 2025
fc228a4
Build for production
unocelli Sep 12, 2025
5814a21
feat: add Japanese translation (Thanks to nono from scadaworx.co.jp)
unocelli Sep 16, 2025
89e39a9
fix: refresh client on signout (#1941)
unocelli Sep 19, 2025
a4ebb4a
Build for production
Sep 19, 2025
4d34314
Feat/input property with Multiline option (#1943)
unocelli Sep 21, 2025
d067294
Build for production
Sep 21, 2025
8aebf02
fix: switch control property refresh
Sep 22, 2025
46acdb3
refact: remove not used mqtt topic subs items list (json)
unocelli Sep 26, 2025
6db4df0
Build for production
unocelli Sep 26, 2025
18948a0
fix: unit test
unocelli Oct 2, 2025
873a7a0
Build for release
unocelli Oct 2, 2025
dedf8b3
docs: README add link to FUXA-SVG-Widgets
unocelli Oct 5, 2025
f98600d
chore: update socket.io to 4.8.1
unocelli Oct 7, 2025
cae9876
fix: start with void project (#1966)
unocelli Oct 7, 2025
9e18218
chore: update package
unocelli Oct 8, 2025
e7c3c12
Feat/pr1962 scheduler (#1973)
unocelli Oct 14, 2025
c7cb105
feat: client Scheduler Thanks @MatthewReed303
unocelli Oct 14, 2025
28db732
fix: mqtt multi subscription of json topics (#1959)
unocelli Oct 15, 2025
410fe93
Feature: Support for touch/click event in Chart with Show Mode: Custo…
unocelli Oct 20, 2025
38dd94c
Build for production
unocelli Oct 20, 2025
3add175
Update index.js (#1982)
LordNetro Oct 21, 2025
b4f7468
build(deps): bump axios from 0.30.0 to 0.30.2 in /server (#1956)
dependabot[bot] Oct 21, 2025
dba8d21
Updated various small UX changes for developing Fuxa. (#1981)
jkeahey Oct 23, 2025
3e69067
Build for production
unocelli Oct 23, 2025
1539e85
feat: add line settings without interpolation
unocelli Oct 23, 2025
4d702c1
feat: add line settings without interpolation
unocelli Oct 24, 2025
48bf9ae
build(deps): bump form-data from 4.0.0 to 4.0.4 in /server (#1994)
dependabot[bot] Oct 26, 2025
f08032d
Build for production
unocelli Oct 26, 2025
eb5fd02
build(deps): bump nodemailer from 6.9.9 to 7.0.7 in /server (#1965)
dependabot[bot] Oct 26, 2025
873e88f
fix: opcua string convertion (#1988)
unocelli Oct 26, 2025
6c752b7
New Feature: Node-Red Integration for FUXA - by @MatthewReed303 (#1993)
unocelli Oct 26, 2025
cc4a298
Build for production
unocelli Oct 26, 2025
6d9f0d4
feat: add Chinese (Traditional) translation (Thanks to Dennis from fi…
unocelli Oct 29, 2025
b9f59d3
fix: broken 'this' reference in script
unocelli Oct 31, 2025
4d5f8e9
fix: load map view from click event (#2003)
Nov 2, 2025
cf5a05d
Modbus RTU multiple devices in the same serial port. (#2000)
rvbatista Nov 2, 2025
eaff211
Build for production
unocelli Nov 2, 2025
b8035d6
feat: change dag query from socket to webapi (#2005)
unocelli Nov 3, 2025
7511c3b
Build for production
unocelli Nov 3, 2025
586e6b7
Fix alarm notification by using active alarm status (#2001)
MatthewReed303 Nov 7, 2025
4a5b853
Pr 2001 (#2014)
unocelli Nov 7, 2025
7359477
Build for production
unocelli Nov 7, 2025
08c0d6d
fix: access to resources and device template for admin (#1922)
unocelli Nov 9, 2025
a18f920
feat: add $getObject function to call from frontend script (#2015)
unocelli Nov 9, 2025
4f2b9ce
feat: settings for heartbeat interval (#2016)
unocelli Nov 9, 2025
b5e92f9
Build for production
unocelli Nov 9, 2025
4b0cc85
Add new settings dialog and add autostart and full screen option. fix…
MatthewReed303 Nov 13, 2025
1e891d4
Fix path issue for dev and packages
MatthewReed303 Nov 13, 2025
ead0a1a
Remove preload and load directly for autostart
MatthewReed303 Nov 13, 2025
2dbf957
Remove embedded html into seperate files
MatthewReed303 Nov 13, 2025
6feb005
Setup Dev and Production paths
MatthewReed303 Nov 13, 2025
a9d5284
Update path detection
MatthewReed303 Nov 13, 2025
ba1e472
Update html path
MatthewReed303 Nov 13, 2025
aca4af5
Improve touch screen functionality by having settings to disable text…
MatthewReed303 Nov 13, 2025
104d878
Refactor and tidy up directories and add sub directory for electron
MatthewReed303 Nov 13, 2025
89a857b
Update paths for refactor
MatthewReed303 Nov 13, 2025
9138e02
Update prooduction path
MatthewReed303 Nov 13, 2025
8b1c4b5
Return default paths
MatthewReed303 Nov 13, 2025
7d90bde
add html files
MatthewReed303 Nov 13, 2025
ee543df
Update settings dialog size
MatthewReed303 Nov 13, 2025
0d09017
Fix _pb_ bool not returning value when set to 0 or false and fix valu…
MatthewReed303 Nov 14, 2025
bbcbbab
Fixed typos, added grammatical changes, and updated some UX for devel…
jkeahey Nov 16, 2025
fe65a53
Build for production
unocelli Nov 17, 2025
6ed83b2
feat: Table history time rounding interval option - timestamp display…
unocelli Nov 26, 2025
83e161c
Build for production
unocelli Nov 26, 2025
ff57f1d
fix: title of input control settings
unocelli Nov 28, 2025
d3fe6f4
refact: move serverError to app (global)
unocelli Dec 2, 2025
b5e72a0
fix: auto-recover socket after system sleep to avoid browser stuck state
unocelli Dec 2, 2025
2e24ff4
Build for production
unocelli Dec 2, 2025
7854c49
Add copy functionality to alarms
MatthewReed303 Dec 3, 2025
f20a222
Add opc support for unsupported data types such as TIME
MatthewReed303 Dec 4, 2025
72f3f8b
Add expressions to tag options
MatthewReed303 Dec 4, 2025
83f8147
Return null instead of value for error
MatthewReed303 Dec 4, 2025
790b25b
Add retension for logs
MatthewReed303 Dec 5, 2025
b61d0fe
Node-Red Bug fixes
MatthewReed303 Dec 5, 2025
3d936c1
Update wiki for new dashboard paths
MatthewReed303 Dec 5, 2025
6b8ceba
Fix days offset and add all day switch option
MatthewReed303 Dec 5, 2025
67cad35
device can use tags of scada vistwo
gh-fx2 Feb 21, 2025
c516a65
merge dec 2025
Dec 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/docker_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Build and Publish DHI release

env:
app: fuxa
version: 1.2.5
version: 1.2.7
# for available platforms see output of a previous run -
# ie the "Setup Docker BuildX" / "Inspect Builder" section
# has eg "node_platforms": "linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker_snap7.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Build and Publish DHI snap7

env:
app: fuxa
version: snap7-1.2.5
version: snap7-1.2.7
# for available platforms see output of a previous run -
# ie the "Setup Docker BuildX" / "Inspect Builder" section
# has eg "node_platforms": "linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6"
Expand Down
27 changes: 14 additions & 13 deletions .github/workflows/electron_latest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ jobs:
with:
node-version: '18'

- name: Clear npm cache
run: npm cache clean --force

- name: Install server dependencies
run: npm install
working-directory: ./server
Expand All @@ -39,32 +42,30 @@ jobs:

- name: Install app dependencies
run: npm install
working-directory: ./app
working-directory: ./app/electron

- name: Copy server and client build to app
- name: Copy server and client build to app/electron
run: |
mkdir -p app/server
mkdir -p app/client/dist
cp -r server/. app/server/
cp -r client/dist/. app/client/dist
#ls -R app/server
#ls -R app/client/dist
mkdir -p app/electron/server
mkdir -p app/electron/client/dist
cp -r server/. app/electron/server/
cp -r client/dist/. app/electron/client/dist
shell: bash

- name: Package for Windows
if: matrix.os == 'windows-latest' && matrix.arch == 'x64'
run: npx electron-builder --win nsis --x64
working-directory: ./app
working-directory: ./app/electron

- name: Package for Linux
if: matrix.os == 'ubuntu-latest'
run: npx electron-builder --linux appimage --${{ matrix.arch }}
working-directory: ./app
working-directory: ./app/electron

- name: Package for macOS
if: matrix.os == 'macos-latest'
run: npx electron-builder --mac dmg --${{ matrix.arch }}
working-directory: ./app
working-directory: ./app/electron

- name: Prepare artifacts
run: |
Expand All @@ -80,11 +81,11 @@ jobs:
elif [ "${{ matrix.os }}" = "macos-latest" ]; then
mv dist/*.dmg artifacts/FUXA-macos-arm64.dmg
fi
working-directory: ./app
working-directory: ./app/electron
shell: bash

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: FUXA-${{ matrix.os }}-${{ matrix.arch }}
path: app/artifacts/*
path: app/electron/artifacts/*
23 changes: 22 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,28 @@ RUN cp FUXA/odbc/odbcinst.ini /etc/odbcinst.ini

# Install Fuxa server
WORKDIR /usr/src/app/FUXA/server
RUN npm install

# More tolerant npm config
ENV NODE_OPTIONS=--dns-result-order=ipv4first
RUN npm config set registry https://registry.npmjs.org/ \
&& npm config set fetch-retries 8 \
&& npm config set fetch-retry-factor 2 \
&& npm config set fetch-retry-mintimeout 30000 \
&& npm config set fetch-retry-maxtimeout 300000 \
&& npm config set audit false \
&& npm config set fund false

# Retry loop con backoff + timeout alto
RUN bash -lc '\
for i in 1 2 3 4 5 6 7 8; do \
echo "npm install - attempt $i/8"; \
npm install --no-audit --no-fund --prefer-offline --network-timeout=600000 && exit 0; \
echo "Failed, wait $((10*i))s and try again..."; \
sleep $((10*i)); \
done; \
echo "npm install failed after 8 attempts"; \
exit 1'


# Install options snap7
RUN if [ "$NODE_SNAP" = "true" ]; then \
Expand Down
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ FUXA is a web-based Process Visualization (SCADA/HMI/Dashboard) software. With F
![fuxa action](/screenshot/feature-action-move.gif)

## Features
- Devices connectivity with Modbus RTU/TCP, Siemens S7 Protocol, OPC-UA, BACnet IP, MQTT, Ethernet/IP (Allen Bradley)
- Devices connectivity with Modbus RTU/TCP, Siemens S7 Protocol, OPC-UA, BACnet IP, MQTT, Ethernet/IP (Allen Bradley), ADSclient, Gpio (Raspberry), WebCam, MELSEC
- SCADA/HMI Web-Editor - Engineering and Design completely web-based
- Cross-Platform Full-Stack - Backend with NodeJs and Frontend with Web technologies (HTML5, CSS, Javascript, Angular, SVG)

Expand All @@ -25,6 +25,15 @@ See the Wiki for more details about installing and getting started

[Wiki Installing/Building](https://github.com/frangoteam/FUXA/wiki/Installing-and-Running)

### Install using prebuilt Electron Packages

You will need to be logged into github to access the download button for Electron Action Builds,
click on the workflow and scroll down to Artifacts and click the download icon for you system

[Electron Action Builds](https://github.com/frangoteam/FUXA/actions/workflows/electron_latest.yml)

<img width="2082" height="531" alt="image" src="https://github.com/user-attachments/assets/40f01e1d-cf39-4145-99a0-e8fedf791edf" />


### Running from docker
```
Expand Down Expand Up @@ -98,6 +107,15 @@ After following these steps, you will have a standalone Electron application for
- Look video from [frangoteam](https://www.youtube.com/@umbertonocelli5301)
- Look video from [Fusion Automate - Urvish Nakum](https://youtube.com/playlist?list=PLxrSjjYyzaaK8uY3kVaFzfGnwhVXiCEAO&si=aU1OxgkUvLQ3bXHq)

## Community SVG Widgets

Looking for ready-made, reusable SVG widgets?
Check out the companion repository **FUXA-SVG-Widgets**:

- Repository: https://github.com/frangoteam/FUXA-SVG-Widgets
- Authoring guide & examples: see the repo README and the Wiki page:
https://github.com/frangoteam/FUXA/wiki/HowTo-Widgets

## To Debug (Full Stack)
Install and start to serve the frontend
```
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes.
54 changes: 54 additions & 0 deletions app/electron/loading.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<title>FUXA - Loading...</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #424242;
color: #FFFFFF;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
overflow: hidden;
}
.loading-container {
text-align: center;
}
.spinner {
width: 60px;
height: 60px;
border: 4px solid rgba(255, 255, 255, 0.3);
border-top: 4px solid #448AFF;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 20px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
h1 {
color: #FFFFFF;
margin-bottom: 10px;
font-size: 24px;
}
p {
color: rgba(255, 255, 255, 0.8);
font-size: 16px;
margin: 0;
}
</style>
</head>
<body>
<div class="loading-container">
<div class="spinner"></div>
<h1>FUXA</h1>
<p id="loadingText">Loading...</p>
</div>
</body>
</html>
Loading