diff --git a/.freebuff/desktop-v2.db b/.freebuff/desktop-v2.db
new file mode 100644
index 00000000..49ad5e51
Binary files /dev/null and b/.freebuff/desktop-v2.db differ
diff --git a/.freebuff/desktop-v2.db-shm b/.freebuff/desktop-v2.db-shm
new file mode 100644
index 00000000..21456667
Binary files /dev/null and b/.freebuff/desktop-v2.db-shm differ
diff --git a/.freebuff/desktop-v2.db-wal b/.freebuff/desktop-v2.db-wal
new file mode 100644
index 00000000..a5d73344
Binary files /dev/null and b/.freebuff/desktop-v2.db-wal differ
diff --git a/.gitignore b/.gitignore
index 839d854c..d46f1352 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,6 @@ output/**/*.*
.env
.history/
+
+# Local JWT secret used only for development
+bbbeasy-backend/tmp/jwt.secret
diff --git a/bbbeasy-backend/app/src/Core/Session.php b/bbbeasy-backend/app/src/Core/Session.php
index 5612e067..d2bd3809 100644
--- a/bbbeasy-backend/app/src/Core/Session.php
+++ b/bbbeasy-backend/app/src/Core/Session.php
@@ -89,7 +89,6 @@ public function exists($key): bool
public function set($key, $value): void
{
$this->runtimeValues[$key] = $value;
- $this->f3->set('SESSION.' . $key, $value);
}
/**
@@ -278,20 +277,7 @@ private function serializeUser(User $user): array
private function syncSessionState(): void
{
- if (!$this->currentUser instanceof User) {
- return;
- }
-
- $user = $this->serializeUser($this->currentUser);
- $user['loggedIn'] = true;
-
- $this->f3->set('SESSION.user', $user);
- $this->f3->set('SESSION.user.loggedIn', true);
- $this->f3->set('SESSION.user.id', $user['id']);
- $this->f3->set('SESSION.user.role', $user['role']);
- $this->f3->set('SESSION.user.roleId', $this->currentUser->role->id);
- $this->f3->set('SESSION.user.username', $user['username']);
- $this->f3->set('SESSION.user.email', $user['email']);
+ // JWT-only mode keeps the authenticated user in request memory only.
}
/**
@@ -386,7 +372,7 @@ private function isRevoked(string $jti): bool
return true;
}
- return null !== \Cache::instance()->get($this->revokedTokenCacheKey($jti));
+ return false !== \Cache::instance()->get($this->revokedTokenCacheKey($jti));
}
private function revokedTokenCacheKey(string $jti): string
diff --git a/bbbeasy-backend/tests/src/Actions/Account/LoginTest.php b/bbbeasy-backend/tests/src/Actions/Account/LoginTest.php
index f0b8b5ac..2dfdb835 100644
--- a/bbbeasy-backend/tests/src/Actions/Account/LoginTest.php
+++ b/bbbeasy-backend/tests/src/Actions/Account/LoginTest.php
@@ -158,7 +158,7 @@ public function testAuthenticateExistingUser($f3)
$test->expect(isset($payload['sub']) && (int) $payload['sub'] === (int) $user->id, 'JWT subject matches the authenticated user');
$test->expect(isset($payload['exp']) && \is_string($expiresAt) && strtotime($expiresAt) > $now, 'JWT expiry is set in the future');
$test->expect(isset($responseBody['session']['expiresAt']) && $responseBody['session']['expiresAt'] === $expiresAt, 'Login returns a concrete token expiration date');
- $test->expect($f3->exists('SESSION.user'), 'Sessions is aware that the user us logged in');
+ $test->expect(null !== \Registry::get('session')->get('user'), 'JWT session keeps the authenticated user in memory');
UserFaker::logout();
@@ -179,7 +179,7 @@ public function testValidAuthentication($f3)
$user = UserFaker::create(UserRole::ADMINISTRATOR);
$data = ['email' => $user->email, 'password' => UserRole::ADMINISTRATOR . UserRole::ADMINISTRATOR];
$f3->mock(self::LOGIN_ROUTE, null, null, $this->postJsonData($data));
- $test->expect($f3->exists('SESSION.user'), 'User with id "' . $user->id . '" is now logged in');
+ $test->expect(null !== \Registry::get('session')->get('user'), 'User with id "' . $user->id . '" is now logged in');
return $test->results();
}
diff --git a/bbbeasy-backend/tests/src/Actions/Rooms/StartTest.php b/bbbeasy-backend/tests/src/Actions/Rooms/StartTest.php
index 102b23e5..3fdb5d8c 100644
--- a/bbbeasy-backend/tests/src/Actions/Rooms/StartTest.php
+++ b/bbbeasy-backend/tests/src/Actions/Rooms/StartTest.php
@@ -25,6 +25,7 @@
use Fake\PresetFaker;
use Fake\RoomFaker;
use Models\User;
+use Registry;
use Test\Scenario;
/**
@@ -66,7 +67,8 @@ public function testValidRoom($f3)
$test = $this->newTest();
$loggedUser = new User();
- $loggedUser->load(['id = ?', [$f3->get('SESSION.user.id')]]);
+ $currentUser = Registry::get('session')->get('user');
+ $loggedUser->load(['id = ?', [$currentUser['id']]]);
$preset = PresetFaker::create($loggedUser);
$room = RoomFaker::create($loggedUser, $preset);
$f3->mock(self::START_ROOM_ROUTE . $room->id, null, null);
diff --git a/bbbeasy-backend/tests/src/Actions/Rooms/ViewTest.php b/bbbeasy-backend/tests/src/Actions/Rooms/ViewTest.php
index 8c0a445c..4b1a391c 100644
--- a/bbbeasy-backend/tests/src/Actions/Rooms/ViewTest.php
+++ b/bbbeasy-backend/tests/src/Actions/Rooms/ViewTest.php
@@ -25,6 +25,7 @@
use Fake\PresetFaker;
use Fake\RoomFaker;
use Models\User;
+use Registry;
use Test\Scenario;
/**
@@ -66,7 +67,8 @@ public function testValidLink($f3)
$test = $this->newTest();
$loggedUser = new User();
- $loggedUser->load(['id = ?', [$f3->get('SESSION.user.id')]]);
+ $currentUser = Registry::get('session')->get('user');
+ $loggedUser->load(['id = ?', [$currentUser['id']]]);
$preset = PresetFaker::create($loggedUser);
$room = RoomFaker::create($loggedUser, $preset, 'abcdef-123456');
$f3->mock(self::VIEW_ROOM_ROUTE . $room->short_link, null, null);
diff --git a/bbbeasy-frontend/.yarnrc.yml b/bbbeasy-frontend/.yarnrc.yml
index fec60c2d..00d86f56 100644
--- a/bbbeasy-frontend/.yarnrc.yml
+++ b/bbbeasy-frontend/.yarnrc.yml
@@ -3,7 +3,7 @@ approvedGitRepositories:
enableScripts: true
-nodeLinker: node-modules
+nodeLinker: pnp
npmMinimalAgeGate: 0
diff --git a/bbbeasy-frontend/index.html b/bbbeasy-frontend/index.html
index af733ede..c32f6cb7 100644
--- a/bbbeasy-frontend/index.html
+++ b/bbbeasy-frontend/index.html
@@ -8,6 +8,9 @@
+
+
+
BBBEasy
diff --git a/bbbeasy-frontend/src/App-installer.css b/bbbeasy-frontend/src/App-installer.css
index 94b0ae2e..33ced0b2 100644
--- a/bbbeasy-frontend/src/App-installer.css
+++ b/bbbeasy-frontend/src/App-installer.css
@@ -286,17 +286,19 @@ body.rtl {
}
.site-header {
z-index: 1;
- background: var(--bbbeasy-bg-layout) !important;
+ background: linear-gradient(135deg, rgba(5, 12, 35, 0.98) 0%, rgba(7, 25, 44, 0.98) 45%, rgba(9, 31, 62, 0.98) 100%) !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.12);
+ box-shadow: 0 10px 28px rgba(2, 6, 23, 0.22);
}
.site-header .lang-btn {
border-color: transparent;
box-shadow: none;
- color: var(--bbbeasy-darken-gray);
+ color: #dbe9ff;
padding: 0;
}
.site-header .lang-btn:hover,
.site-header .lang-btn.ant-dropdown-open {
- color: #fbbc0b !important;
+ color: #38bdf8 !important;
outline: unset !important;
}
.site-header-inner {
@@ -314,15 +316,65 @@ body.rtl {
height: auto;
max-height: 64px;
max-width: 64px;
+ filter: drop-shadow(0 0 12px rgba(59, 130, 246, 0.28));
}
.site-header-inner button {
background: transparent !important;
- color: var(--bbbeasy-darken-gray) !important;
+ color: #edf4ff !important;
+ transition: color 0.25s ease, transform 0.25s ease, opacity 0.25s ease;
+}
+.site-header-inner button:hover,
+.site-header-inner button:focus {
+ color: #38bdf8 !important;
+ transform: translateY(-1px);
}
.site-content {
margin: 25px 20px;
z-index: 2;
}
+.site-sider {
+ background: #07192c !important;
+}
+.site-sider .logo {
+ background: #07192c !important;
+}
+.site-sider .menu-sider .site-menu {
+ color: #ffffff !important;
+}
+.site-sider .site-menu .ant-menu-item,
+.site-sider .site-menu .ant-menu-submenu-title,
+.site-sider .site-menu .ant-menu-title-content,
+.site-sider .site-menu .ant-menu-item a,
+.site-sider .site-menu .ant-menu-submenu-title a,
+.site-sider .site-menu .anticon,
+.site-sider .sider-new-btn {
+ color: #ffffff !important;
+}
+.site-sider .sider-new-btn {
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+}
+.site-sider .sider-new-btn:hover,
+.site-sider .sider-new-btn:focus {
+ background: #4096ff !important;
+ color: #ffffff !important;
+ border-color: #4096ff !important;
+}
+.site-sider .site-menu .ant-menu-submenu-title .ant-menu-title-content,
+.site-sider .site-menu .ant-menu-item .ant-menu-title-content {
+ color: #ffffff !important;
+}
+.site-sider .site-menu .ant-menu-item-selected,
+.site-sider .site-menu .ant-menu-submenu-selected > .ant-menu-submenu-title {
+ background: rgba(255, 255, 255, 0.08) !important;
+}
+.site-sider .site-menu .ant-menu-item:hover,
+.site-sider .site-menu .ant-menu-submenu-title:hover,
+.site-sider .site-menu .ant-menu-item:focus,
+.site-sider .site-menu .ant-menu-submenu-title:focus {
+ background: rgba(255, 255, 255, 0.12) !important;
+ color: #ffffff !important;
+}
.site-footer {
min-height: 50px;
z-index: 1;
@@ -367,11 +419,14 @@ body.rtl {
}
/*********************************************/
.color-primary {
- border-color: #fbbc0b !important;
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+ color: #ffffff !important;
}
.color-primary:hover {
- color: #ffcf33 !important;
- border-color: #ffcf33 !important;
+ background: #4096ff !important;
+ border-color: #4096ff !important;
+ color: #ffffff !important;
}
.color-blue {
color: #fff !important;
@@ -443,6 +498,33 @@ body.rtl {
.button-container .ant-form-item-control-input-content {
display: flex;
}
+.modal-submit-btn .ant-btn-primary {
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+ color: #ffffff !important;
+}
+.modal-submit-btn .ant-btn-primary:hover,
+.modal-submit-btn .ant-btn-primary:focus {
+ background: #4096ff !important;
+ border-color: #4096ff !important;
+ color: #ffffff !important;
+}
+
+.ant-page-header .ant-btn-primary,
+.site-page-header .ant-btn-primary {
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+ color: #ffffff !important;
+}
+
+.ant-page-header .ant-btn-primary:hover,
+.ant-page-header .ant-btn-primary:focus,
+.site-page-header .ant-btn-primary:hover,
+.site-page-header .ant-btn-primary:focus {
+ background: #4096ff !important;
+ border-color: #4096ff !important;
+ color: #ffffff !important;
+}
.final-step-btn {
width: 81%;
display: block;
diff --git a/bbbeasy-frontend/src/App-webapp.css b/bbbeasy-frontend/src/App-webapp.css
index b6e1e805..761d9a43 100644
--- a/bbbeasy-frontend/src/App-webapp.css
+++ b/bbbeasy-frontend/src/App-webapp.css
@@ -212,6 +212,11 @@
--bbbeasy-sider-width: 260px;
--bbbeasy-page-height: 100vh;
--bbbeasy-info-color: #1890ff;
+ --bbbeasy-landing-bg: linear-gradient(180deg, #050b1a 0%, #06162f 45%, #081f3e 100%);
+ --bbbeasy-webapp-bg: #070B12;
+ --bbbeasy-webapp-bg-image: radial-gradient(at 0% 0%, rgba(59, 130, 246, 0.12) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, rgba(99, 102, 241, 0.08) 0px, transparent 50%),
+ radial-gradient(at 50% 50%, rgba(15, 23, 42, 0.5) 0px, transparent 100%);
}
body,
input,
@@ -238,6 +243,19 @@ body {
font-family: 'Poppins', sans-serif !important;
margin: 0;
}
+html,
+body,
+#root {
+ min-height: 100%;
+}
+body:has(.page-layout-content),
+body:has(.page-layout-content-rtl) {
+ background-color: var(--bbbeasy-webapp-bg);
+ background-image: var(--bbbeasy-webapp-bg-image);
+ background-attachment: fixed;
+ background-repeat: no-repeat;
+ background-size: cover;
+}
body.rtl {
font-family: 'Tajawal', sans-serif !important;
font-weight: 450 !important;
@@ -323,11 +341,14 @@ body.rtl {
color: #fbbc0b !important;
}
.color-primary {
- border-color: #fbbc0b !important;
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+ color: #ffffff !important;
}
.color-primary:hover {
- color: #ffcf33 !important;
- border-color: #ffcf33 !important;
+ background: #4096ff !important;
+ border-color: #4096ff !important;
+ color: #ffffff !important;
}
.color-blue {
color: #fff !important;
@@ -438,20 +459,48 @@ fieldset {
.page-layout-content-rtl {
min-height: var(--bbbeasy-page-height) !important;
display: flex !important;
+ background-color: var(--bbbeasy-webapp-bg);
+ background-image: var(--bbbeasy-webapp-bg-image);
+ background-attachment: fixed;
+ background-repeat: no-repeat;
+ background-size: cover;
}
.site-header {
z-index: 1;
- background: var(--bbbeasy-bg-layout) !important;
+ position: relative;
+ overflow: hidden;
+ background-color: #050b1a !important;
+ background-image: none !important;
+ border-bottom: 0 !important;
+ box-shadow: none;
+}
+.page-layout-content .site-header,
+.page-layout-content-rtl .site-header {
+ background-color: var(--bbbeasy-webapp-bg) !important;
+ background-image: var(--bbbeasy-webapp-bg-image) !important;
+ background-attachment: fixed !important;
+ background-repeat: no-repeat !important;
+ background-size: cover !important;
+ border-bottom: 0 !important;
+ box-shadow: none;
+ backdrop-filter: none;
+}
+.site-header::before {
+ content: none;
+}
+.site-header::after {
+ content: none;
}
.site-header .lang-btn {
border-color: transparent;
box-shadow: none;
- color: var(--bbbeasy-darken-gray);
+ color: #dbe9ff;
padding: 0;
+ font-weight: 500;
}
.site-header .lang-btn:hover,
.site-header .lang-btn.ant-dropdown-open {
- color: #fbbc0b !important;
+ color: #38bdf8 !important;
outline: unset !important;
}
.site-header-inner {
@@ -459,19 +508,29 @@ fieldset {
display: flex;
justify-content: space-between;
align-items: center;
+ width: 100%;
margin: 0 !important;
top: 50%;
-ms-transform: translateY(-50%);
transform: translateY(-50%);
+ z-index: 1;
}
.header-logo-image {
height: auto;
max-height: 64px;
max-width: 64px;
+ filter: drop-shadow(0 0 12px rgba(59, 130, 246, 0.28));
+ animation: logoPulse 4.5s ease-in-out infinite;
}
.site-header-inner button {
background: transparent !important;
- color: var(--bbbeasy-darken-gray) !important;
+ color: #edf4ff !important;
+ transition: color 0.25s ease, transform 0.25s ease, opacity 0.25s ease;
+}
+.site-header-inner button:hover,
+.site-header-inner button:focus {
+ color: #38bdf8 !important;
+ transform: translateY(-1px);
}
.search-input {
border-radius: 15px !important;
@@ -483,22 +542,32 @@ fieldset {
.search-input input,
.search-input.ant-input-affix-wrapper:hover,
.search-input.ant-input-affix-wrapper:focus {
- background: white !important;
+ background: rgba(8, 18, 46, 0.9) !important;
+ color: #eef4ff !important;
+ border: 1px solid rgba(96, 165, 250, 0.16);
+ box-shadow: 0 12px 24px rgba(2, 6, 23, 0.16);
}
.search-input.ant-input-affix-wrapper-focused {
- background: white !important;
- border: 1px solid #ffcf33 !important;
+ background: rgba(9, 22, 58, 0.98) !important;
+ border: 1px solid rgba(56, 189, 248, 0.72) !important;
+ box-shadow: 0 0 0 4px rgba(56, 189, 248, 0.08);
}
.search-input input {
padding: 0 15px !important;
}
.search-input .anticon-search {
- color: var(--bbbeasy-medimum-gray);
+ color: #7fbef7;
}
.site-header .profil-btn {
- color: var(--bbbeasy-darken-gray) !important;
+ color: #edf4ff !important;
clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
border-radius: 50% !important;
+ transition: transform 0.25s ease, color 0.25s ease, box-shadow 0.25s ease;
+}
+.site-header .profil-btn:hover,
+.site-header .profil-btn:focus {
+ color: #38bdf8 !important;
+ transform: translateY(-1px);
}
.profil-btn-dropdown .ant-dropdown-menu-item {
padding: 5px 20px !important;
@@ -566,9 +635,30 @@ fieldset {
.site-content {
margin: 25px 20px;
z-index: 2;
+ background: transparent !important;
+}
+.page-layout-content .page-layout-body,
+.page-layout-content-rtl .page-layout-body {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ background-color: var(--bbbeasy-webapp-bg) !important;
+ background-image: var(--bbbeasy-webapp-bg-image) !important;
+ background-attachment: fixed !important;
+ background-repeat: no-repeat !important;
+ background-size: cover !important;
+}
+.page-layout-content .site-content,
+.page-layout-content-rtl .site-content {
+ background: transparent !important;
}
.site-sider {
- background: var(--bbbeasy-bg-layout) !important;
+ position: relative;
+ background-color: var(--bbbeasy-webapp-bg) !important;
+ background-image: var(--bbbeasy-webapp-bg-image) !important;
+ background-attachment: fixed !important;
+ background-repeat: no-repeat !important;
+ background-size: cover !important;
flex: 0 0 var(--bbbeasy-sider-width) !important;
max-width: var(--bbbeasy-sider-width) !important;
min-width: var(--bbbeasy-sider-width) !important;
@@ -577,6 +667,7 @@ fieldset {
height: var(--bbbeasy-page-height);
top: 0;
bottom: 0;
+ border-inline-end: 1px solid rgba(96, 165, 250, 0.22);
}
.page-layout-content .site-sider {
left: 0;
@@ -595,7 +686,7 @@ fieldset {
.site-sider .logo {
position: relative;
z-index: 1;
- background: var(--bbbeasy-bg-layout);
+ background: transparent;
width: 240px;
margin: 10px;
margin-left: 24px;
@@ -626,981 +717,4464 @@ fieldset {
.site-sider .menu-sider .site-menu {
height: 100%;
background: transparent !important;
+ color: #ffffff !important;
}
.ant-menu-sub.ant-menu-inline {
background: transparent !important;
}
-.site-footer {
+.site-sider .site-menu .ant-menu-item,
+.site-sider .site-menu .ant-menu-submenu-title,
+.site-sider .site-menu .ant-menu-title-content,
+.site-sider .site-menu .ant-menu-item a,
+.site-sider .site-menu .ant-menu-submenu-title a,
+.site-sider .site-menu .anticon,
+.site-sider .sider-new-btn {
+ color: #ffffff !important;
+}
+.site-sider .sider-new-btn {
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+}
+.site-sider .sider-new-btn:hover,
+.site-sider .sider-new-btn:focus {
+ background: #4096ff !important;
+ color: #ffffff !important;
+ border-color: #4096ff !important;
+}
+.site-sider .site-menu .ant-menu-submenu-title .ant-menu-title-content,
+.site-sider .site-menu .ant-menu-item .ant-menu-title-content {
+ color: #ffffff !important;
+}
+.site-sider .site-menu .ant-menu-item-selected,
+.site-sider .site-menu .ant-menu-submenu-selected > .ant-menu-submenu-title {
+ background: rgba(255, 255, 255, 0.08) !important;
+}
+.site-sider .site-menu .ant-menu-item:hover,
+.site-sider .site-menu .ant-menu-submenu-title:hover,
+.site-sider .site-menu .ant-menu-item:focus,
+.site-sider .site-menu .ant-menu-submenu-title:focus {
+ background: rgba(255, 255, 255, 0.12) !important;
+ color: #ffffff !important;
+}
+.page-layout-content .site-footer,
+.page-layout-content-rtl .site-footer {
min-height: 50px;
z-index: 1;
padding: 0 50px !important;
display: flex;
justify-content: space-between;
align-items: center;
-}
-.site-footer .ant-typography {
- color: #989898 !important;
-}
-.site-footer button {
+ background-color: var(--bbbeasy-webapp-bg) !important;
+ background-image: var(--bbbeasy-webapp-bg-image) !important;
+ background-attachment: fixed !important;
+ background-repeat: no-repeat !important;
+ background-size: cover !important;
+ border-top: 1px solid rgba(96, 165, 250, 0.08);
+ box-shadow: 0 -10px 28px rgba(2, 6, 23, 0.14);
+}
+.page-layout-content .site-footer,
+.page-layout-content-rtl .site-footer,
+.site-footer {
+ background-color: var(--bbbeasy-webapp-bg) !important;
+ background-image: var(--bbbeasy-webapp-bg-image) !important;
+ background-attachment: fixed !important;
+ background-repeat: no-repeat !important;
+ background-size: cover !important;
+ border-top: 1px solid rgba(96, 165, 250, 0.08);
+ box-shadow: 0 -10px 28px rgba(2, 6, 23, 0.14);
+}
+.page-layout-content .site-footer .ant-typography,
+.page-layout-content-rtl .site-footer .ant-typography {
+ color: #dbe9ff !important;
+}
+.page-layout-content .site-footer .ant-typography .ant-btn,
+.page-layout-content .site-footer .ant-typography button,
+.page-layout-content-rtl .site-footer .ant-typography .ant-btn,
+.page-layout-content-rtl .site-footer .ant-typography button {
+ color: #7fbef7 !important;
+}
+.page-layout-content .site-footer button,
+.page-layout-content-rtl .site-footer button {
padding: 0 5px !important;
}
/******************LANDING******************/
-.landing-content {
- margin: 45px;
- padding: 4%;
- border: 3px solid #fbbc0b !important;
- border-radius: 25px;
-}
-.landing-content button {
- width: 30%;
-}
-.landing-btns {
- gap: 15px;
- display: flex;
-}
-.landing-img {
- width: 85%;
+.landing-shell {
+ position: relative;
+ margin: -25px -20px 0;
+ padding: 0 20px 140px;
+ overflow: hidden;
+ isolation: isolate;
+ background: var(--bbbeasy-landing-bg);
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
}
-.features .bbbeasy-btn {
- font-size: 22px !important;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%) !important;
- margin-bottom: 14px;
- border-radius: 50%;
- background: #fbbc0b;
+
+.landing-shell::before {
+ content: '';
+ position: absolute;
+ inset: 0;
+ content: none;
}
-.bbbeasy-icon {
- line-height: inherit !important;
+
+.landing-shell::after {
+ content: none;
}
-/********************LOGIN/REGISTER********************/
-.section-top {
- padding: 50px 0 !important;
+
+.landing-shell .landing-content {
+ position: relative;
+ z-index: 2;
+ max-width: 1440px;
+ margin: 0 auto;
+ min-height: calc(100vh - 74px);
+ padding: 96px 0 52px;
+ align-items: center;
+ gap: 34px;
+ background: transparent;
+ overflow: visible;
+ flex-wrap: nowrap;
}
-.form-content {
- padding: 0 30px !important;
+
+.landing-shell .landing-content::before,
+.landing-shell .landing-content::after {
+ content: none;
}
-.form-header {
- margin-bottom: 40px !important;
- margin-top: 20px !important;
+
+.landing-shell .landing-content > .ant-col:first-child {
+ flex: 0 0 47%;
+ max-width: 47%;
+ position: relative;
+ z-index: 2;
}
-.form-img {
- width: 55px;
- margin-left: auto;
- margin-right: auto;
- display: block;
- margin-bottom: 15px;
+
+.landing-shell .landing-content > .ant-col:last-child {
+ flex: 0 0 640px;
+ max-width: 640px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding-left: 0;
}
-.form-agree label {
- font-size: 95% !important;
+
+.landing-content {
+ color: #e6ecff;
}
-.alert-msg {
- margin-bottom: 20px !important;
+
+.landing-shell .hero-content {
+ color: #e6ecff;
+ animation: heroTextIn 0.9s ease both;
}
-.form-footer .ant-typography {
- color: gray !important;
+
+.landing-shell .tag {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ padding: 8px 16px;
+ border-radius: 999px;
+ margin-bottom: 24px;
+ border: 1px solid rgba(96, 165, 250, 0.3);
+ background: rgba(59, 130, 246, 0.1);
+ color: #60a5fa;
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 12px;
+ letter-spacing: 1.5px;
+ text-transform: uppercase;
+ box-shadow: 0 10px 22px rgba(2, 6, 23, 0.22);
+ animation: tagGlow 3s ease-in-out infinite;
}
-/*******************ROOMS*********************/
-.home-guide {
- margin-top: 80px !important;
+
+.landing-shell .tag .dot {
+ width: 7px;
+ height: 7px;
+ border-radius: 50%;
+ background: #22d3ee;
+ box-shadow: 0 0 12px #22d3ee;
+ animation: tagPulse 1.6s infinite;
}
-.home-guide .ant-row {
- margin: 60px 0;
+
+.landing-shell .landing-content h1 {
+ color: #eef4ff !important;
+ font-size: clamp(3.8rem, 4.8vw, 5.9rem) !important;
+ line-height: 0.96 !important;
+ letter-spacing: -0.05em;
+ margin-bottom: 18px !important;
+ text-shadow: 0 10px 30px rgba(59, 130, 246, 0.16);
}
-.home-guide .ant-row .ant-col {
- padding: 15px 0;
+
+.landing-shell .landing-content p,
+.landing-shell .landing-content strong {
+ color: #eef4ff !important;
}
-.home-guide .ant-row:not(.ant-row-rtl) .ant-col:not(:first-child) {
- border-left: 1px solid var(--bbbeasy-border-gray);
+
+.landing-shell .landing-content .mb-30 {
+ max-width: 620px;
+ margin-bottom: 0 !important;
+ color: rgba(230, 236, 255, 0.8);
+ font-size: 18px;
+ line-height: 1.65;
}
-.home-guide .ant-row.ant-row-rtl .ant-col:not(:first-child) {
- border-right: 1px solid var(--bbbeasy-border-gray);
+
+.landing-btns {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 16px;
+ margin-top: 34px;
}
-.home-guide .bbbeasy-btn {
- font-size: 45px !important;
+
+.landing-shell .landing-content .ant-btn {
+ min-width: 138px;
+ height: 52px;
+ border-radius: 14px;
+ font-size: 16px;
font-weight: 600;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- margin-bottom: 20px;
- border-radius: 50%;
- background: #fbbc0b !important;
+ border: none;
+ box-shadow: 0 14px 28px rgba(0, 0, 0, 0.18);
+ transition: transform 0.25s ease, box-shadow 0.25s ease, filter 0.25s ease;
}
-.home-guide h4 {
- font-size: 16px !important;
+
+.landing-shell .landing-content .ant-btn-primary {
+ color: #0a1530 !important;
+ background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%) !important;
}
-.home-guide button {
- width: 25%;
+
+.landing-shell .landing-content .color-primary {
+ color: #ffffff !important;
+ background: linear-gradient(135deg, #1d4ed8 0%, #3b82f6 55%, #22d3ee 100%) !important;
}
-.custom-col-5 {
- flex: 0 0 20% !important;
- max-width: 20% !important;
+
+.landing-shell .landing-content .ant-btn:hover,
+.landing-shell .landing-content .ant-btn:focus {
+ transform: translateY(-3px);
+ box-shadow: 0 18px 32px rgba(2, 6, 23, 0.28);
+ filter: brightness(1.02);
}
-.rooms-cards .ant-card {
- border-radius: 10px !important;
+
+.landing-shell .hero-visual {
+ position: relative;
+ width: min(100%, 700px);
+ height: 520px;
+ min-height: 520px;
+ animation: heroCardIn 1s ease both 0.12s;
+ margin-left: auto;
+ margin-right: 0;
+ transform: translateX(0);
+ isolation: isolate;
+ overflow: visible;
}
-.rooms-cards .ant-card:not(.ant-card-bordered):not(:hover) {
- filter: drop-shadow(0px 0px 3px #ccc);
+
+.landing-shell .hero-visual::before {
+ content: none;
}
-.rooms-cards .ant-card-head {
- border-bottom: none !important;
- padding: 0 12px !important;
+
+.landing-shell .hero-visual::after {
+ content: none;
}
-.rooms-cards .ant-card-head .ant-card-head-title,
-.rooms-cards .ant-card-head .ant-card-extra {
- padding-top: 12px !important;
+
+.landing-shell .bbb-classroom-widget {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ animation: cardFloat 7s ease-in-out infinite;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-start;
+ padding: 0;
}
-.rooms-cards .ant-card-head-wrapper {
- align-items: start !important;
+
+.landing-shell .classroom-frame {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ min-height: 470px;
+ padding: 18px 18px 16px;
+ border-radius: 28px;
+ border: 1px solid rgba(94, 139, 255, 0.22);
+ background:
+ radial-gradient(circle at 18% 16%, rgba(42, 124, 255, 0.18), transparent 24%),
+ radial-gradient(circle at 82% 84%, rgba(31, 179, 255, 0.14), transparent 30%),
+ linear-gradient(180deg, rgba(17, 29, 58, 0.94) 0%, rgba(10, 18, 40, 0.98) 100%);
+ box-shadow:
+ 0 34px 80px rgba(2, 6, 23, 0.6),
+ inset 0 1px 0 rgba(255, 255, 255, 0.05);
+ backdrop-filter: blur(16px);
+ -webkit-backdrop-filter: blur(16px);
+ overflow: hidden;
}
-.rooms-cards .anticon-more {
- font-size: 20px;
+
+.landing-shell .classroom-frame::before {
+ content: '';
+ position: absolute;
+ inset: 0;
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.03), transparent 20%),
+ linear-gradient(90deg, rgba(31, 179, 255, 0.05) 0%, transparent 18%, transparent 82%, rgba(31, 179, 255, 0.05) 100%);
+ pointer-events: none;
}
-.rooms-cards .ant-card-body {
- padding: 12px !important;
- padding-top: 0 !important;
+
+.landing-shell .classroom-topbar {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 16px;
+ margin-bottom: 16px;
+ flex-wrap: wrap;
}
-.room-card-title .bbbeasy-btn {
- font-size: 22px !important;
+
+.landing-shell .room-tag {
+ display: inline-flex;
+ align-items: center;
+ gap: 9px;
+ min-height: 34px;
+ padding: 0 14px;
+ border-radius: 12px;
+ border: 1px solid rgba(80, 151, 255, 0.3);
+ background: rgba(19, 35, 73, 0.72);
+ color: #d9ebff;
+ font-size: 11px;
font-weight: 600;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- background-color: #fbbc0b;
+ letter-spacing: 0.02em;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
-.room-card-title .custom-badge-bg {
- -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- background: #fbbc0b;
- width: 25px;
- height: 25px;
+
+.landing-shell .audio-hd-tag {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ min-height: 40px;
+ padding: 0 14px 0 16px;
+ border-radius: 999px;
+ border: 1px solid rgba(80, 151, 255, 0.45);
+ background: linear-gradient(180deg, rgba(30, 52, 101, 0.96), rgba(20, 36, 77, 0.93));
+ color: #f8fbff;
+ font-size: 12px;
+ font-weight: 700;
+ letter-spacing: 0.01em;
+ box-shadow:
+ 0 14px 26px rgba(4, 12, 28, 0.35),
+ inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
-.room-card-title .custom-badge {
- -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- background: white;
- padding: 4.5px;
- position: absolute;
- top: 1px;
- left: 1px;
+
+.landing-shell .room-tag svg,
+.landing-shell .audio-hd-tag svg,
+.landing-shell .mute-icn svg,
+.landing-shell .expand-icn svg,
+.landing-shell .hand-badge svg,
+.landing-shell .act-btn svg,
+.landing-shell .media-circle svg {
+ width: 14px;
+ height: 14px;
}
-.custom-badge .anticon {
- color: #fbbc0b;
+
+.landing-shell .room-tag-prefix {
+ opacity: 0.7;
+ font-family: 'JetBrains Mono', monospace;
}
-.readonly-item input {
- width: 83% !important;
- background-color: var(--bbbeasy-border-gray) !important;
+
+.landing-shell .audio-hd-tag {
+ border-color: rgba(70, 135, 255, 0.72);
}
-.readonly-item button {
- width: 17% !important;
- background-color: var(--bbbeasy-medimum-gray) !important;
+
+.landing-shell .audio-bars {
+ display: inline-flex;
+ align-items: center;
+ gap: 3px;
+ height: 16px;
}
-/**********ROOM DETAILS**********/
-.page-padding {
- padding: 16px 24px !important;
+
+.landing-shell .audio-bars span {
+ width: 3px;
+ border-radius: 999px;
+ background: linear-gradient(180deg, #5ee7ff 0%, #19d1ff 100%);
+ animation: audioWave 1.2s ease-in-out infinite;
+ transform-origin: center bottom;
}
-.gray-bg {
- background: var(--bbbeasy-bg-layout) !important;
+
+.landing-shell .audio-bars span:nth-child(1) {
+ height: 6px;
+ animation-delay: 0s;
}
-.room-details {
- border-radius: 10px !important;
+
+.landing-shell .audio-bars span:nth-child(2) {
+ height: 11px;
+ animation-delay: 0.12s;
}
-.RoomPresentation {
- margin: auto !important;
+
+.landing-shell .audio-bars span:nth-child(3) {
+ height: 8px;
+ animation-delay: 0.24s;
}
-.room-details #room-shortlink.ant-input-rtl {
- font-family: 'Poppins', sans-serif !important;
+
+.landing-shell .classroom-body {
+ position: relative;
+ z-index: 1;
+ width: 100%;
+ display: grid;
+ grid-template-columns: 174px minmax(0, 1fr) 132px;
+ gap: 12px;
+ align-items: stretch;
+ height: calc(100% - 52px);
}
-.room-details .medias {
- justify-content: space-between;
- display: flex;
+
+.landing-shell .classroom-left,
+.landing-shell .classroom-center,
+.landing-shell .classroom-right {
+ min-height: 100%;
}
-.room-details .medias .anticon {
- font-size: 20px;
- color: var(--bbbeasy-darken-gray);
+
+.landing-shell .classroom-left {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
}
-.room-details .bbbeasy-btn {
- font-size: 20px !important;
- font-weight: 600;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- border-radius: 50%;
- background-color: #fbbc0b !important;
+
+.landing-shell .classroom-left > div {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
}
-.room-presentations {
- border-radius: 5px !important;
+
+.landing-shell .sec-title {
+ margin: 0 0 2px;
+ color: rgba(223, 233, 255, 0.58);
+ font-size: 11px;
+ font-weight: 800;
+ text-transform: uppercase;
+ letter-spacing: 0.18em;
+ text-align: center;
}
-.room-presentations h5 {
- margin-bottom: 15px !important;
+
+.landing-shell .classroom-center {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
}
-.room-presentations .upload-file {
- font-size: 12px !important;
+
+.landing-shell .classroom-right {
+ background: rgba(11, 15, 28, 0.45);
+ border: 1px solid rgba(255, 255, 255, 0.06);
+ border-radius: 18px;
+ padding: 14px 10px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ gap: 12px;
}
-.room-presentations .ant-upload-list-item-container,
-.room-presentations .ant-upload.ant-upload-select {
- width: 83px;
- height: 83px;
+
+.landing-shell .video-tile,
+.landing-shell .grid-tile {
+ position: relative;
+ border-radius: 16px;
+ background:
+ radial-gradient(circle at 50% 38%, rgba(20, 48, 104, 0.18), transparent 45%),
+ linear-gradient(180deg, rgba(24, 38, 73, 0.78) 0%, rgba(12, 22, 49, 0.96) 100%);
+ border: 1px solid rgba(69, 111, 200, 0.16);
+ overflow: hidden;
+ box-shadow:
+ inset 0 1px 0 rgba(255, 255, 255, 0.03),
+ 0 10px 24px rgba(2, 6, 23, 0.25);
+ min-height: 150px;
}
-.room-recordings .search-input,
-.room-recordings .search-input input,
-.room-recordings .search-input.ant-input-affix-wrapper:hover,
-.room-recordings .search-input.ant-input-affix-wrapper:focus {
- background: var(--bbbeasy-bg-layout) !important;
+
+.landing-shell .instructor-tile {
+ min-height: 132px;
+ background:
+ radial-gradient(circle at 50% 45%, rgba(20, 48, 104, 0.2), transparent 45%),
+ linear-gradient(180deg, rgba(24, 38, 73, 0.76) 0%, rgba(12, 22, 49, 0.94) 100%);
}
-.bbbeasy-mp4 {
- font-size: 24px !important;
+
+.landing-shell .podium-tile {
+ min-height: 97px;
}
-.rtl .bbbeasy-mp4 {
- transform: scaleX(1) !important;
+
+.landing-shell .grid-tile {
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
-.bbbeasy-ppt {
- font-size: 16px !important;
+
+.landing-shell .tile-avatar {
+ border-radius: 999px;
+ display: grid;
+ place-items: center;
+ color: #09101f;
+ font-weight: 800;
+ box-shadow: 0 10px 24px rgba(3, 8, 20, 0.34);
+ z-index: 1;
+ pointer-events: none;
}
-.room-recordings-body .ant-card {
- border-radius: 8px;
+
+.landing-shell .avatar-inst {
+ width: 58px;
+ height: 58px;
+ font-size: 24px;
+ background: linear-gradient(135deg, #f43f5e 0%, #be123c 100%);
}
-.room-recordings-body .ant-card:not(:hover) {
- box-shadow: 0 1px 2px -2px var(--bbbeasy-border-gray), 0 3px 6px 0 var(--bbbeasy-lighten-gray),
- 0 5px 12px 4px var(--bbbeasy-bg-layout);
+
+.landing-shell .avatar-podium-1,
+.landing-shell .avatar-podium-2 {
+ width: 44px;
+ height: 44px;
+ font-size: 18px;
}
-.recording-box .recording-infos .anticon {
- font-size: 14px;
- padding: 7px;
- color: white;
- background: #fbbc0b;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- border-radius: 50%;
+
+.landing-shell .avatar-podium-1 {
+ background: linear-gradient(135deg, #f59e0b 0%, #b45309 100%);
}
-.recording-box .recording-infos span {
- font-size: 12px;
+
+.landing-shell .avatar-podium-2 {
+ background: linear-gradient(135deg, #10b981 0%, #047857 100%);
}
-.recording-box .share-icon {
- float: right;
+
+.landing-shell .grid-avatar {
position: absolute;
- bottom: -22%;
- right: 20px;
+ top: 50%;
+ left: 50%;
+ display: grid;
+ place-items: center;
+ transform: translate(-50%, -50%);
+ font-weight: 800;
+ line-height: 1;
}
-.recording-box .share-icon.ant-btn-rtl {
- float: left;
- left: 20px;
- right: unset;
+
+.landing-shell .grid-avatar {
+ width: 52px;
+ height: 52px;
+ border-radius: 999px;
+ font-size: 16px;
+ color: #09101f;
+ box-shadow: 0 10px 24px rgba(3, 8, 20, 0.34);
+ z-index: 1;
+ pointer-events: none;
}
-.recording-box img {
- filter: brightness(50%);
- border-radius: 10px 10px 0 0 !important;
+
+.landing-shell .grid-avatar-ta {
+ background: linear-gradient(135deg, #6f7bf7 0%, #4338ca 100%);
+ color: #fff;
}
-.recording-cover {
- position: absolute;
- top: 20px;
- color: white;
- width: 100%;
- padding: 0 20px;
+
+.landing-shell .grid-avatar-a {
+ background: linear-gradient(135deg, #3db5ff 0%, #2f7cff 100%);
}
-.recording-cover .recording-header {
- display: flex;
- justify-content: space-between;
- align-items: baseline;
+
+.landing-shell .grid-avatar-b {
+ background: linear-gradient(135deg, #ff8c26 0%, #ff5f18 100%);
}
-.recording-cover .recording-header .anticon {
- font-size: 22px;
- margin: 0 5px;
+
+.landing-shell .grid-avatar-c {
+ background: linear-gradient(135deg, #dc5fff 0%, #b94cff 100%);
}
-.recording-cover h3 {
- color: white !important;
+
+.landing-shell .grid-avatar-j {
+ background: linear-gradient(135deg, #37dfd6 0%, #2fd08a 100%);
}
-.room-recordings-body .ant-card-body {
- padding: 20px !important;
+
+.landing-shell .hand-badge,
+.landing-shell .tile-float {
+ position: absolute;
+ top: 11px;
+ right: 11px;
+ width: 18px;
+ height: 18px;
+ border-radius: 999px;
+ background: rgba(6, 10, 20, 0.76);
+ color: rgba(237, 244, 255, 0.92);
+ display: grid;
+ place-items: center;
+ box-shadow: 0 10px 18px rgba(2, 6, 23, 0.2);
+ z-index: 2;
+ font-size: 0;
}
-.room-box {
- display: grid !important;
+
+.landing-shell .hand-badge {
+ top: 8px;
+ right: 8px;
+ width: 24px;
+ height: 24px;
+ border-radius: 8px;
+ background: linear-gradient(135deg, rgba(245, 158, 11, 0.96), rgba(245, 158, 11, 0.74));
+ box-shadow: 0 6px 12px rgba(245, 158, 11, 0.28);
+ animation: bounceMini 2s ease-in-out infinite;
}
-.file-size {
- color: var(--bbbeasy-medimum-gray);
- font-size: 13px;
- margin: 0 12px;
+
+.landing-shell .hand-badge svg {
+ width: 13px !important;
+ height: 13px !important;
+ color: #fff;
}
-.actions .file-size {
- font-size: 10px;
- margin: 0;
+
+.landing-shell .tile-float.pink {
+ background: rgba(178, 76, 123, 0.82);
+ animation: speakPulse 2.8s ease-in-out infinite;
}
-/******************ADD MODAL*********************/
-.add-modal .ant-modal-header {
- text-align: center;
+
+.landing-shell .tile-float svg {
+ width: 11px !important;
+ height: 11px !important;
+ display: block;
+ flex-shrink: 0;
}
-.ant-modal-header {
- margin: 0 20px;
+
+.landing-shell .expand-icn {
+ position: absolute;
+ right: 10px;
+ bottom: 8px;
+ width: 14px;
+ height: 14px;
+ color: rgba(255, 255, 255, 0.46);
+ display: grid;
+ place-items: center;
}
-.add-modal .ant-form {
- padding: 0 15px;
+
+.landing-shell .expand-icn:hover {
+ color: rgba(255, 255, 255, 0.9);
}
-.cancel-btn {
- background: var(--bbbeasy-medimum-gray) !important;
- color: white !important;
+
+.landing-shell .tile-footer {
+ position: absolute;
+ left: 12px;
+ right: 12px;
+ bottom: 12px;
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ gap: 6px;
}
-.cancel-btn:hover,
-.cancel-btn:focus {
- border-color: var(--bbbeasy-medimum-hover-gray) !important;
- background: var(--bbbeasy-medimum-hover-gray) !important;
+
+.landing-shell .mute-icn {
+ display: grid;
+ place-items: center;
+ color: #fff;
}
-.large-modal {
- width: 50% !important;
+
+.landing-shell .mute-icn svg {
+ width: 12px !important;
+ height: 12px !important;
}
-.medium-modal {
- width: 45% !important;
+
+.landing-shell .user-lbl {
+ padding: 3px 7px;
+ border-radius: 6px;
+ background: rgba(4, 9, 20, 0.82);
+ color: rgba(237, 244, 255, 0.96);
+ font-size: 9px;
+ font-weight: 600;
}
-/**************DOUBLE CONFIRM DELETE*****************/
-.delete-wrap {
+
+.landing-shell .tab-bar {
+ display: flex;
+ gap: 6px;
+ padding: 6px;
+ border-radius: 12px;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ background: rgba(11, 15, 28, 0.82);
+}
+
+.landing-shell .tab-btn {
+ flex: 1;
+ min-height: 42px;
+ padding: 8px 10px;
+ border: none;
+ border-radius: 10px;
+ background: transparent;
+ color: var(--text-muted);
+ font-size: 11px;
+ font-weight: 700;
text-align: center;
+ cursor: pointer;
+ transition: all 0.25s ease;
}
-.delete-wrap .delete-icon {
- font-size: 35px;
- margin-bottom: 20px;
- color: #fbbc0b;
+
+.landing-shell .tab-btn:hover {
+ color: var(--text-main);
}
-.delete-wrap .ant-modal-confirm-title {
- margin-bottom: 10px;
+
+.landing-shell .tab-btn.active {
+ color: #fff;
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
+ box-shadow: 0 8px 18px rgba(59, 130, 246, 0.34);
}
-.delete-wrap .ant-modal-confirm-btns {
- float: none;
+
+.landing-shell .table-grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ grid-template-rows: repeat(2, 1fr);
+ gap: 10px;
+ flex: 1;
+ min-height: 0;
}
-/***************************TABLE****************************/
-.bbbeasy-table {
- padding: 0 24px 0 10px;
+
+.landing-shell .grid-tile {
+ min-height: 144px;
}
-.bbbeasy-table.ant-table-wrapper-rtl {
- padding: 0 10px 0 24px;
+
+.landing-shell .grid-tile:nth-child(1) {
+ min-height: 148px;
}
-.bbbeasy-table .ant-table-thead > tr > th {
- background: var(--bbbeasy-lighten-gray) !important;
+
+.landing-shell .grid-tile .grid-avatar {
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
}
-.table-actions:not(.editable) a:not(.ant-popover-open):hover,
-.table-actions.editable a:not(.ant-popover-open) {
- color: #fbbc0b !important;
+
+.landing-shell .grid-tile .tile-footer {
+ left: 10px;
+ right: 10px;
+ bottom: 10px;
}
-.table-actions:not(.editable) a {
- color: var(--bbbeasy-medimum-gray) !important;
+
+.landing-shell .add-tile {
+ border: 2px dashed rgba(255, 255, 255, 0.1);
+ background: transparent;
}
-.table-actions a.ant-popover-open {
- color: red !important;
+
+.landing-shell .add-tile:hover {
+ border-color: rgba(255, 255, 255, 0.3);
}
-.bbbeasy-table .ant-table-expanded-row .ant-table-cell {
- padding: 0;
+
+.landing-shell .add-tile svg {
+ width: 22px;
+ height: 22px;
+ color: rgba(255, 255, 255, 0.35);
}
-.bbbeasy-table .ant-pro-card-body {
- padding: 0 !important;
+
+.landing-shell .classroom-right {
+ background: rgba(11, 15, 28, 0.5);
+ border: 1px solid rgba(255, 255, 255, 0.06);
+ border-radius: 18px;
+ padding: 12px 10px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ gap: 12px;
}
-.bbbeasy-table .card-parent {
- background: transparent;
- box-shadow: unset !important;
+
+.landing-shell .raise-hand-main {
+ width: 54px;
+ height: 54px;
+ border-radius: 999px;
+ border: 1px solid rgba(245, 158, 11, 0.45);
+ background: linear-gradient(135deg, rgba(245, 158, 11, 0.18), rgba(245, 158, 11, 0.05));
+ display: grid;
+ place-items: center;
+ color: var(--accent-yellow);
+ cursor: pointer;
+ transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
+ box-shadow: 0 8px 15px rgba(0, 0, 0, 0.18);
}
-.bbbeasy-table .card-parent .ant-card-body {
- padding: 0 !important;
+
+.landing-shell .raise-hand-main:hover {
+ transform: translateY(-2px) scale(1.04);
+ background: linear-gradient(135deg, rgba(245, 158, 11, 0.28), rgba(245, 158, 11, 0.08));
+ box-shadow: 0 10px 22px rgba(245, 158, 11, 0.25);
}
-.card-parent .bordered-card {
- border: 1px solid var(--bbbeasy-border-gray);
- border-radius: 8px;
+
+.landing-shell .raise-hand-main svg {
+ width: 24px;
+ height: 24px;
}
-.card-parent .bordered-card .ant-card:first-child {
- border-radius: 8px 8px 0 0 !important;
+
+.landing-shell .quick-actions-grid {
+ width: 100%;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 8px;
}
-.card-parent .bordered-card .ant-card:not(:first-child):not(:last-child),
-.card-parent .bordered-card .ant-card:not(:first-child) .ant-card-head {
- border-radius: 0 !important;
+
+.landing-shell .act-btn {
+ height: 34px;
+ border-radius: 8px;
+ border: 1px solid rgba(255, 255, 255, 0.06);
+ background: rgba(255, 255, 255, 0.03);
+ color: #cbd5e1;
+ display: grid;
+ place-items: center;
+ cursor: pointer;
+ transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}
-.card-parent .bordered-card .ant-card:last-child {
- border-radius: 0 0 8px 8px !important;
+
+.landing-shell .act-btn:hover {
+ background: rgba(255, 255, 255, 0.08);
+ border-color: rgba(255, 255, 255, 0.14);
+ color: #fff;
}
-.card-parent .bordered-card .ant-card .ant-card-head {
- background: var(--bbbeasy-lighten-gray);
- min-height: auto;
+
+.landing-shell .act-btn svg {
+ width: 15px;
+ height: 15px;
}
-.card-parent .bordered-card .ant-card .ant-card-head .ant-card-head-title,
-.card-parent .bordered-card .ant-card .ant-card-body label {
- font-size: 13px;
+
+.landing-shell .room-mode-box {
+ width: calc(100% + 20px);
+ margin: 0 -10px;
+ padding: 10px 0;
+ text-align: center;
+ background: rgba(0, 0, 0, 0.2);
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
-.card-parent .bordered-card .ant-card .ant-card-head .ant-card-head-title {
- padding: 6px 0;
+
+.landing-shell .mode-title {
+ color: var(--text-main);
+ font-size: 10px;
+ font-weight: 700;
}
-.card-parent .bordered-card .ant-card .ant-card-body {
- padding: 8px 24px !important;
+
+.landing-shell .mode-sub {
+ margin-top: 2px;
+ color: var(--text-muted);
+ font-size: 9px;
}
-.card-parent .bordered-card .ant-card .ant-card-body .ant-form-item {
- margin-bottom: 0;
+
+.landing-shell .bottom-media-bar {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
}
-.card-parent .bordered-card .ant-checkbox-disabled span {
- color: inherit;
+
+.landing-shell .media-circle {
+ width: 32px;
+ height: 32px;
+ border-radius: 999px;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ background: rgba(255, 255, 255, 0.05);
+ display: grid;
+ place-items: center;
+ color: #fff;
+ cursor: pointer;
+ transition: transform 0.2s ease, background 0.2s ease;
}
-.actions-expanded {
- margin-top: 16px;
- float: right;
+
+.landing-shell .media-circle:hover {
+ transform: translateY(-1px);
+ background: rgba(255, 255, 255, 0.1);
}
-.actions-expanded.ant-space-rtl {
- margin-top: 16px;
- float: left;
+
+.landing-shell .media-circle.off {
+ border-color: rgba(239, 68, 68, 0.3);
+ background: rgba(239, 68, 68, 0.05);
}
-/************TABLE SEARCH***************/
-.table-search-bloc {
- padding: 8px;
+
+.landing-shell .media-circle.off svg {
+ color: var(--accent-red);
}
-.table-search-input {
- margin-bottom: 8px !important;
- display: block !important;
+
+.landing-shell .media-circle.main-speaker {
+ width: 38px;
+ height: 38px;
+ background: rgba(255, 255, 255, 0.12);
}
-.search-icon-filtered {
- color: #fbbc0b;
+
+.landing-shell .media-circle.main-speaker svg {
+ width: 16px;
+ height: 16px;
}
-.search-text-highlighted {
- background: #ffcf33;
+
+.landing-shell .encryption-pill {
+ position: absolute;
+ left: 22px;
+ bottom: -16px;
+ z-index: 2;
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ min-height: 42px;
+ padding: 0 16px;
+ border-radius: 14px;
+ border: 1px solid rgba(46, 209, 255, 0.45);
+ background: rgba(9, 20, 44, 0.95);
+ color: #e8f7ff;
+ box-shadow:
+ 0 16px 26px rgba(3, 8, 20, 0.28),
+ 0 0 18px rgba(22, 188, 255, 0.16);
}
-.bbbeasy-table mark {
- padding: 0;
- background-color: #ffcf33;
+
+.landing-shell .encryption-pill svg {
+ width: 14px;
+ height: 14px;
+ color: #38d8ff;
}
-/*************EDIT TABLE****************/
-.input-editable {
- margin-bottom: 0 !important;
+
+.features {
+ position: relative;
+ z-index: 2;
+ max-width: 1440px;
+ margin: 0 auto;
+ padding: 0 0 0;
}
-.input-editable .ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {
- content: '';
- margin-right: 0;
+
+.features-block {
+ position: relative;
+ z-index: 2;
+ max-width: 1440px;
+ margin: 0 auto;
+ padding: 0 0 40px;
}
-.ant-form-item:not(.input-editable) .ant-form-item-label label {
- font-size: 15px;
+
+.features-row {
+ margin-bottom: 24px;
}
-.input-editable .ant-input-suffix button {
- width: 20px !important;
- height: 20px !important;
- font-size: 12px !important;
+
+.features-row-last {
+ max-width: 25%;
+ margin-left: 0;
}
-.input-editable .ant-input-suffix .cell-input-cancel {
- color: var(--bbbeasy-medimum-gray);
- border-color: var(--bbbeasy-medimum-gray);
+
+.card-feat-last {
+ min-width: 290px;
}
-.input-editable .ant-input-suffix .cell-input-cancel:hover {
- color: #fbbc0b !important;
- border-color: #fbbc0b;
+
+@media (min-width: 992px) {
+ .features-row {
+ flex-wrap: nowrap;
+ }
+
+ .features-row > .ant-col {
+ flex: 1 1 0 !important;
+ max-width: none !important;
+ }
+
+ .card-feat-last {
+ min-width: 0;
+ }
}
-.cell-input-cancel {
- color: var(--bbbeasy-medimum-gray) !important;
+
+.section-head {
+ text-align: center;
+ margin: 12px auto 42px;
+ max-width: 820px;
+ animation: heroTextIn 0.9s ease both 0.18s;
}
-.cell-input-cancel:hover {
- color: #ffcf33 !important;
+
+.section-head h2 {
+ color: #eef4ff;
+ font-size: clamp(42px, 4vw, 58px);
+ font-weight: 800;
+ letter-spacing: -0.02em;
+ margin-bottom: 10px;
}
-.cell-edit-icon,
-.edit-btn {
- color: var(--bbbeasy-medimum-gray) !important;
+
+.section-head p {
+ color: #8a97c7;
+ font-size: 16px;
}
-.cell-edit-icon:hover,
-.edit-btn:hover {
- color: #fbbc0b !important;
+
+.gradient-text {
+ background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 55%, #22d3ee 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ color: transparent;
}
-.select-field .ant-select-selection-item {
- text-transform: capitalize;
+
+.features .card-feat {
+ background: rgba(9, 18, 46, 0.6);
+ border: 1px solid rgba(96, 165, 250, 0.16);
+ border-radius: 22px;
+ padding: 28px 24px;
+ backdrop-filter: blur(14px);
+ box-shadow: 0 18px 40px rgba(2, 6, 23, 0.24);
+ transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease, translate 0.3s ease;
+ min-height: 212px;
+ opacity: 0;
+ animation: cardRise 0.8s ease forwards;
}
-/**********************PRESETS*************************/
-.preset-card-title .input-editable {
- width: 80%;
+
+.features .card-feat:nth-child(1) { animation-delay: 0.08s; }
+.features .card-feat:nth-child(2) { animation-delay: 0.16s; }
+.features .card-feat:nth-child(3) { animation-delay: 0.24s; }
+.features .card-feat:nth-child(4) { animation-delay: 0.32s; }
+.features .card-feat:nth-child(5) { animation-delay: 0.42s; }
+
+.features .card-feat:hover {
+ transform: translateY(-8px);
+ border-color: rgba(96, 165, 250, 0.46);
+ box-shadow: 0 24px 50px rgba(59, 130, 246, 0.24);
}
-.presets-modal .presets-body .ant-form-item-control .ant-input {
- width: 80%;
+
+.features .bbbeasy-btn {
+ font-size: 22px !important;
+ margin-bottom: 18px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, #3b82f6 0%, #22d3ee 100%);
+ box-shadow: 0 10px 24px rgba(59, 130, 246, 0.28);
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%) !important;
}
-.help-icon {
- font-size: 17px !important;
+
+.bbbeasy-icon {
+ line-height: inherit !important;
}
-.title-tooltip {
- margin-top: 12px !important;
+
+.features .card-feat p {
+ color: #e6ecff;
+ font-size: 15px;
+ line-height: 1.55;
+ margin-top: 10px;
}
-.title-tooltip h5,
-.install-tooltip h5 {
- margin: 0.25em 0 !important;
+
+.features .card-feat:nth-child(3) {
+ transform: translateY(8px);
}
-.presets-cards {
- padding-top: 16px;
+
+.features .card-feat:nth-child(4) {
+ transform: translateY(8px);
}
-.presets-cards .ant-card {
- border-radius: 10px !important;
+
+.features .card-feat:nth-child(3):hover,
+.features .card-feat:nth-child(4):hover {
+ transform: translateY(0);
}
-.presets-cards .ant-card-head {
- border-bottom: none !important;
+
+@keyframes landingGridShift {
+ from {
+ background-position: 0 0, 0 0;
+ }
+ to {
+ background-position: 48px 48px, 48px 48px;
+ }
}
-.presets-cards .ant-card-body button {
- margin: 6px;
+
+@keyframes landingShellDrift {
+ 0%,
+ 100% {
+ background-position: 0% 0%;
+ }
+ 50% {
+ background-position: 100% 14%;
+ }
}
-.presets-cards .ant-card-body button:disabled .PresetIcon {
- background-color: var(--bbbeasy-medimum-gray);
+
+@keyframes landingShellBreath {
+ 0%,
+ 100% {
+ filter: saturate(1) brightness(1);
+ }
+ 50% {
+ filter: saturate(1.06) brightness(1.03);
+ }
}
-.empty-presets {
- height: 200px !important;
+
+@keyframes landingShellGlow {
+ 0%,
+ 100% {
+ filter: saturate(1) brightness(1);
+ }
+ 50% {
+ filter: saturate(1.08) brightness(1.04);
+ }
}
-.empty-labels {
- height: 40px !important;
- margin-top: 10px !important;
+
+@keyframes landingSparkles {
+ 0% {
+ transform: translate3d(0, 0, 0);
+ opacity: 0.7;
+ }
+ 50% {
+ transform: translate3d(0, -8px, 0);
+ opacity: 1;
+ }
+ 100% {
+ transform: translate3d(0, 0, 0);
+ opacity: 0.7;
+ }
}
-/********************INSTALL********************/
-.success-install-icon {
- font-size: 40px !important;
- padding: 20px !important;
- color: white !important;
- background: #fbbc0b;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- border-radius: 50%;
+
+@keyframes landingSparkleFlow {
+ 0%,
+ 100% {
+ transform: translate3d(0, 0, 0);
+ }
+ 50% {
+ transform: translate3d(0, 6px, 0);
+ }
}
-.button-container {
- margin-top: 24px !important;
+
+@keyframes landingGridPulse {
+ 0%,
+ 100% {
+ opacity: 0.58;
+ }
+ 50% {
+ opacity: 0.76;
+ }
}
-.button-container .ant-row:not(.ant-row-rtl) .prev {
- margin-right: 20px;
+
+@keyframes landingSparkleDrift {
+ 0%,
+ 100% {
+ transform: translate3d(0, 0, 0) scale(1);
+ }
+ 50% {
+ transform: translate3d(6px, -6px, 0) scale(1.02);
+ }
}
-.button-container .ant-row.ant-row-rtl .prev {
- margin-left: 20px;
+
+@keyframes heroTextIn {
+ from {
+ opacity: 0;
+ transform: translateY(18px);
+ filter: blur(4px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ filter: blur(0);
+ }
}
-.button-container .ant-form-item-control-input-content {
- display: flex;
+
+@keyframes heroCardIn {
+ from {
+ opacity: 0;
+ transform: translateX(22px) scale(0.98);
+ filter: blur(4px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0) scale(1);
+ filter: blur(0);
+ }
}
-.install-form .ant-card-body {
- display: flex;
- flex-wrap: wrap;
+
+@keyframes heroCardFloat {
+ 0%,
+ 100% {
+ transform: translateX(-30px) translateY(0);
+ }
+ 50% {
+ transform: translateX(-30px) translateY(-8px);
+ }
}
-/*******STEP2*******/
-.install-form .company-container,
-.install-form .colors-container {
- display: flex;
- flex-wrap: wrap;
+
+@keyframes cardRise {
+ from {
+ opacity: 0;
+ transform: translateY(18px);
+ filter: blur(4px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ filter: blur(0);
+ }
}
-.install-form .box,
-.install-form .colors-container .ant-form-item {
- flex: 0 0 50%;
+
+@keyframes landingFloat {
+ 0%,
+ 100% {
+ transform: translateY(0);
+ }
+ 50% {
+ transform: translateY(-10px);
+ }
}
-.install-form:not(.ant-form-rtl) .box:not(.last),
-.install-form:not(.ant-form-rtl) .colors-container .ant-form-item {
- padding-right: 20px;
+
+@keyframes tagPulse {
+ 0%,
+ 100% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.35;
+ }
}
-.install-form.ant-form-rtl .box:not(.last),
-.install-form.ant-form-rtl .colors-container .ant-form-item {
- padding-left: 20px;
+
+@keyframes tagGlow {
+ 0%,
+ 100% {
+ box-shadow: 0 10px 22px rgba(2, 6, 23, 0.22), 0 0 0 1px rgba(96, 165, 250, 0.12);
+ }
+ 50% {
+ box-shadow: 0 12px 26px rgba(2, 6, 23, 0.24), 0 0 0 1px rgba(96, 165, 250, 0.24);
+ }
}
-.install-form:not(.ant-form-rtl) .box.last {
- padding-left: 20px;
- border-left: 1px solid var(--bbbeasy-border-gray);
+
+@keyframes headerGridShift {
+ from {
+ background-position: 0 0, 0 0;
+ }
+ to {
+ background-position: 44px 44px, 44px 44px;
+ }
}
-.install-form.ant-form-rtl .box.last {
- padding-right: 20px;
- border-right: 1px solid var(--bbbeasy-border-gray);
+
+@keyframes logoPulse {
+ 0%,
+ 100% {
+ transform: translateY(0);
+ filter: drop-shadow(0 0 12px rgba(59, 130, 246, 0.28));
+ }
+ 50% {
+ transform: translateY(-1px);
+ filter: drop-shadow(0 0 18px rgba(56, 189, 248, 0.4));
+ }
}
-.install-form .ant-upload.ant-upload-drag p.ant-upload-hint {
- font-size: 13px !important;
+
+@keyframes heroGlow {
+ 0%,
+ 100% {
+ box-shadow: 0 30px 70px rgba(2, 6, 23, 0.48);
+ }
+ 50% {
+ box-shadow: 0 34px 80px rgba(2, 6, 23, 0.56);
+ }
}
-.install-form .rc-color-picker-trigger {
- width: 85px;
- height: 24px;
- border: 1px solid var(--bbbeasy-border-gray);
+
+@keyframes cardFloat {
+ 0%,
+ 100% {
+ transform: translateY(0);
+ }
+ 50% {
+ transform: translateY(-10px);
+ }
}
-.install-form .rc-color-picker-wrap {
- vertical-align: middle;
+
+@keyframes audioWave {
+ 0%,
+ 100% {
+ transform: scaleY(0.55);
+ opacity: 0.75;
+ }
+ 50% {
+ transform: scaleY(1.12);
+ opacity: 1;
+ }
}
-.install-form .color-palette-picker-value {
- color: gray;
- font-size: 13px;
- font-weight: 500;
+
+@keyframes speakPulse {
+ 0%,
+ 100% {
+ transform: scale(1);
+ opacity: 0.92;
+ }
+ 50% {
+ transform: scale(1.08);
+ opacity: 1;
+ }
}
-.install-form:not(.ant-form-rtl) .color-palette-picker-value {
- margin-left: 10px;
+
+@keyframes avatarFloat {
+ 0%,
+ 100% {
+ transform: translateY(0);
+ }
+ 50% {
+ transform: translateY(-3px);
+ }
+}
+
+@keyframes pulse {
+ 0%,
+ 100% {
+ opacity: 1;
+ transform: scale(1);
+ }
+ 50% {
+ opacity: 0.55;
+ transform: scale(0.82);
+ }
+}
+
+@keyframes floatUi {
+ 0%,
+ 100% {
+ transform: translateY(0);
+ }
+ 50% {
+ transform: translateY(10px);
+ }
+}
+
+@keyframes wave {
+ 0%,
+ 100% {
+ transform: scaleY(0.5);
+ }
+ 50% {
+ transform: scaleY(1);
+ }
+}
+
+@keyframes cardSweep {
+ 0%,
+ 100% {
+ opacity: 0;
+ transform: translateX(-18%) rotate(8deg);
+ }
+ 45% {
+ opacity: 1;
+ }
+ 55% {
+ opacity: 0.8;
+ }
+ 70% {
+ opacity: 0;
+ transform: translateX(8%) rotate(8deg);
+ }
+}
+
+@keyframes visualHalo {
+ 0%,
+ 100% {
+ transform: translate3d(0, 0, 0) scale(1);
+ opacity: 0.84;
+ }
+ 50% {
+ transform: translate3d(0, -8px, 0) scale(1.04);
+ opacity: 1;
+ }
+}
+
+@media (max-width: 1200px) {
+ .landing-shell {
+ margin: -25px -20px 0;
+ padding: 0 20px 70px;
+ }
+
+ .landing-shell .landing-content {
+ padding-top: 96px;
+ flex-direction: column;
+ flex-wrap: wrap;
+ }
+
+ .landing-shell .landing-content > .ant-col:first-child,
+ .landing-shell .landing-content > .ant-col:last-child {
+ flex: 0 0 100%;
+ max-width: 100%;
+ }
+
+ .landing-shell .hero-visual {
+ width: min(100%, 760px);
+ height: 500px;
+ min-height: 500px;
+ margin-top: 20px;
+ transform: none;
+ animation: heroCardIn 1s ease both 0.12s;
+ }
+
+ .features-row-last {
+ max-width: 100%;
+ }
+}
+
+@media (max-width: 768px) {
+ .landing-shell .landing-content {
+ padding: 90px 20px 40px;
+ }
+
+ .landing-shell .landing-content h1 {
+ font-size: clamp(2.8rem, 13vw, 4.4rem) !important;
+ }
+
+ .landing-shell .landing-content .mb-30 {
+ font-size: 16px;
+ }
+
+ .landing-shell .hero-visual {
+ width: min(100%, 760px);
+ height: auto;
+ min-height: 0;
+ }
+
+ .landing-shell .classroom-body {
+ grid-template-columns: 1fr;
+ height: auto;
+ }
+
+ .landing-shell .classroom-left {
+ flex-direction: row;
+ overflow-x: auto;
+ padding-bottom: 2px;
+ }
+
+ .landing-shell .classroom-left > div {
+ min-width: 170px;
+ }
+
+ .landing-shell .table-grid {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ grid-template-rows: repeat(3, minmax(0, 118px));
+ }
+
+ .features {
+ padding: 0 20px 80px;
+ }
+
+ .features-row-last {
+ max-width: 100%;
+ }
+
+ .card-feat-last {
+ min-width: 0;
+ }
+}
+
+@keyframes landingFloat {
+ 0%,
+ 100% {
+ transform: translateY(0px);
+ }
+ 50% {
+ transform: translateY(-10px);
+ }
+}
+/********************LOGIN/REGISTER********************/
+.login-page {
+ position: relative;
+ min-height: calc(100vh - 80px);
+ padding: clamp(44px, 7vh, 80px) clamp(24px, 4vw, 68px) 72px;
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: clamp(32px, 4vw, 72px);
+ overflow: hidden;
+ background: var(--bbbeasy-landing-bg);
+ background-size: 100% 100%;
+ background-repeat: no-repeat;
+}
+
+.login-page::before {
+ content: none;
+}
+
+.login-page::after {
+ content: none;
+}
+
+.login-page.ant-row {
+ position: relative;
+ z-index: 1;
+ width: 100%;
+ min-height: calc(100vh - 200px);
+ justify-content: space-between;
+ align-items: flex-start;
+}
+
+.login-page .login-hero-column {
+ display: flex;
+ align-items: center;
+ min-height: calc(100vh - 200px);
+ padding: 0 !important;
+ flex: 1 1 0 !important;
+ min-width: 0;
+}
+
+.login-page .login-hero {
+ max-width: 640px;
+ padding-left: clamp(24px, 4vw, 76px);
+ padding-right: clamp(8px, 2vw, 24px);
+ padding-top: clamp(20px, 5vh, 72px);
+ animation: loginHeroFloat 8s ease-in-out infinite alternate;
+}
+
+.login-page .login-hero-tag {
+ display: inline-flex;
+ align-items: center;
+ gap: 12px;
+ margin-bottom: 28px;
+ color: #8ab9ff;
+ font-size: 13px;
+ font-weight: 700;
+ letter-spacing: 0.35em;
+ text-transform: uppercase;
+}
+
+.login-page .login-hero-tag-line {
+ width: 34px;
+ height: 3px;
+ border-radius: 999px;
+ background: #f6b51b;
+ box-shadow: 0 0 18px rgba(246, 181, 27, 0.35);
+}
+
+.login-page .login-hero-title {
+ margin: 0 !important;
+ line-height: 0.96 !important;
+ font-weight: 800 !important;
+ color: #f8fbff !important;
+ letter-spacing: -0.03em;
+}
+
+.login-page .login-hero-title .login-hero-title-main,
+.login-page .login-hero-title .login-hero-title-accent {
+ display: block;
+}
+
+.login-page .login-hero-title .login-hero-title-main {
+ color: #f8fbff;
+}
+
+.login-page .login-hero-title .login-hero-title-accent {
+ color: #f6b51b;
+ margin-top: 6px;
+}
+
+.login-page .login-hero-description {
+ margin-top: 18px !important;
+ margin-bottom: 34px !important;
+ font-size: 18px;
+ line-height: 1.7;
+ color: rgba(191, 210, 248, 0.9) !important;
+ max-width: 580px;
+}
+
+.login-page .login-hero-points {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 28px;
+ margin-top: 14px;
+}
+
+.login-page .login-hero-point {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ color: #dbeafe;
+ font-size: 14px;
+ font-weight: 600;
+}
+
+.login-page .login-hero-point-icon {
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ border: 1px solid rgba(245, 181, 27, 0.45);
+ color: #f6b51b;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 14px;
+ line-height: 1;
+ box-shadow: 0 0 12px rgba(246, 181, 27, 0.14);
+ flex-shrink: 0;
+}
+
+.login-page .section-top {
+ padding: 0 !important;
+ margin-left: auto !important;
+ margin-right: clamp(12px, 4vw, 72px) !important;
+ margin-top: clamp(-8px, 1vh, 8px) !important;
+ flex: 0 0 500px !important;
+ max-width: 500px !important;
+ width: 500px !important;
+}
+
+.login-page .login-form-column {
+ display: flex;
+ justify-content: flex-end;
+ align-items: flex-start;
+ min-height: calc(100vh - 200px);
+}
+
+.login-page .login-form-column .form-content {
+ margin-top: clamp(-12px, -1vh, 0px);
+ transform: translateY(-18px);
+ width: min(100%, 520px);
+}
+
+.login-page .password-install {
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+.register-page .login-form-column {
+ min-height: calc(100vh - 240px);
+}
+
+.register-page .login-form-column .form-content {
+ margin-top: clamp(-28px, -3vh, -12px);
+ transform: translateY(-28px);
+ width: min(100%, 460px);
+}
+
+.register-page .password-install {
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+.section-top {
+ padding: 50px 0 !important;
+}
+.form-content {
+ padding: 34px 34px 30px !important;
+ border: 1px solid rgba(148, 163, 184, 0.18) !important;
+ border-radius: 28px !important;
+ box-shadow:
+ 0 32px 70px rgba(2, 6, 23, 0.38),
+ 0 0 0 1px rgba(255, 255, 255, 0.04) inset !important;
+ background: rgba(255, 255, 255, 0.97) !important;
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+}
+.form-header {
+ margin-bottom: 40px !important;
+ margin-top: 20px !important;
+}
+.form-img {
+ width: 55px;
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+ margin-bottom: 15px;
+}
+.form-agree label {
+ font-size: 95% !important;
+}
+.alert-msg {
+ margin-bottom: 20px !important;
+}
+.form-footer .ant-typography {
+ color: #5b667a !important;
+}
+
+@media (max-width: 992px) {
+ .login-page {
+ justify-content: center;
+ padding-inline: 20px;
+ gap: 28px;
+ }
+
+ .login-page .login-hero-column,
+ .login-page .section-top {
+ flex: 1 1 100% !important;
+ max-width: 100% !important;
+ width: 100% !important;
+ margin-right: 0 !important;
+ }
+
+ .login-page .login-hero-column {
+ min-height: auto;
+ justify-content: center;
+ }
+
+ .login-page .login-hero {
+ max-width: 720px;
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ .login-page .login-form-column {
+ justify-content: center;
+ min-height: auto;
+ }
+
+ .login-page .login-form-column .form-content {
+ transform: none;
+ margin-top: 0;
+ }
+}
+
+@media (max-width: 576px) {
+ .login-page {
+ padding-top: 36px;
+ padding-bottom: 56px;
+ }
+
+ .login-page .login-hero {
+ padding-top: 0;
+ }
+
+ .login-page .login-hero-title {
+ font-size: 44px !important;
+ }
+
+ .login-page .login-hero-description {
+ font-size: 16px;
+ }
+
+ .login-page .login-hero-points {
+ gap: 16px;
+ }
+
+ .login-page .section-top {
+ max-width: 100% !important;
+ }
+
+ .form-content {
+ padding: 28px 20px 24px !important;
+ border-radius: 22px !important;
+ }
+}
+
+@keyframes loginHeroFloat {
+ 0% {
+ transform: translateY(0);
+ }
+ 100% {
+ transform: translateY(-10px);
+ }
+}
+/*******************ROOMS*********************/
+.home-guide {
+ margin-top: 80px !important;
+}
+.home-guide .ant-row {
+ margin: 60px 0;
+}
+.home-guide .ant-row .ant-col {
+ padding: 15px 0;
+}
+.home-guide .ant-row:not(.ant-row-rtl) .ant-col:not(:first-child) {
+ border-left: 1px solid var(--bbbeasy-border-gray);
+}
+.home-guide .ant-row.ant-row-rtl .ant-col:not(:first-child) {
+ border-right: 1px solid var(--bbbeasy-border-gray);
+}
+.home-guide .bbbeasy-btn {
+ font-size: 45px !important;
+ font-weight: 600;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ margin-bottom: 20px;
+ border-radius: 50%;
+ background: #fbbc0b !important;
+}
+.home-guide h4 {
+ font-size: 16px !important;
+}
+.home-guide button {
+ width: 25%;
+}
+.custom-col-5 {
+ flex: 0 0 20% !important;
+ max-width: 20% !important;
+}
+.rooms-cards .ant-card {
+ border-radius: 10px !important;
+}
+.rooms-cards .ant-card:not(.ant-card-bordered):not(:hover) {
+ filter: drop-shadow(0px 0px 3px #ccc);
+}
+.rooms-cards .ant-card-head {
+ border-bottom: none !important;
+ padding: 0 12px !important;
+}
+.rooms-cards .ant-card-head .ant-card-head-title,
+.rooms-cards .ant-card-head .ant-card-extra {
+ padding-top: 12px !important;
+}
+.rooms-cards .ant-card-head-wrapper {
+ align-items: start !important;
+}
+.rooms-cards .anticon-more {
+ font-size: 20px;
+}
+.rooms-cards .ant-card-body {
+ padding: 12px !important;
+ padding-top: 0 !important;
+}
+/*****************ROOMS CARDS - BLUE DESIGN*****************/
+.rooms-cards .ant-card {
+ border-radius: 14px !important;
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.18);
+ transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
+}
+.rooms-cards .ant-card:not(.ant-card-bordered):not(:hover) {
+ filter: none !important;
+}
+.rooms-cards .ant-card.ant-card-hoverable:hover {
+ border-color: rgba(96, 165, 250, 0.55) !important;
+ box-shadow: 0 16px 44px rgba(37, 99, 235, 0.32) !important;
+ transform: translateY(-3px);
+}
+.rooms-cards .room-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.rooms-cards .anticon-more {
+ color: #93c5fd;
+}
+.rooms-cards .anticon-more:hover {
+ color: #fbbc0b;
+}
+.rooms-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
+}
+.rooms-search-input input,
+.rooms-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.rooms-search-input .ant-input-clear-icon,
+.rooms-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.recordings-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
+}
+.recordings-search-input input,
+.recordings-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.recordings-search-input .ant-input-clear-icon,
+.recordings-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.labels-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
+}
+.labels-search-input input,
+.labels-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.labels-search-input .ant-input-clear-icon,
+.labels-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.room-card-title .bbbeasy-btn {
+ font-size: 22px !important;
+ font-weight: 600;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ background-color: #fbbc0b;
+}
+.room-card-title .custom-badge-bg {
+ -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ background: #fbbc0b;
+ width: 25px;
+ height: 25px;
+}
+.room-card-title .custom-badge {
+ -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ background: white;
+ padding: 4.5px;
+ position: absolute;
+ top: 1px;
+ left: 1px;
+}
+.custom-badge .anticon {
+ color: #fbbc0b;
+}
+.readonly-item input {
+ width: 83% !important;
+ background-color: var(--bbbeasy-border-gray) !important;
+}
+.readonly-item button {
+ width: 17% !important;
+ background-color: var(--bbbeasy-medimum-gray) !important;
+}
+/**********ROOM DETAILS**********/
+.page-padding {
+ padding: 16px 24px !important;
+}
+.gray-bg {
+ background: var(--bbbeasy-bg-layout) !important;
+}
+.room-details {
+ border-radius: 10px !important;
+}
+.RoomPresentation {
+ margin: auto !important;
+}
+.room-details #room-shortlink.ant-input-rtl {
+ font-family: 'Poppins', sans-serif !important;
+}
+.room-details .medias {
+ justify-content: space-between;
+ display: flex;
+}
+.room-details .medias .anticon {
+ font-size: 20px;
+ color: var(--bbbeasy-darken-gray);
+}
+.room-details .bbbeasy-btn {
+ font-size: 20px !important;
+ font-weight: 600;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ border-radius: 50%;
+ background-color: #fbbc0b !important;
+}
+.room-presentations {
+ border-radius: 5px !important;
+}
+.room-presentations h5 {
+ margin-bottom: 15px !important;
+}
+.room-presentations .upload-file {
+ font-size: 12px !important;
+}
+.room-presentations .ant-upload-list-item-container,
+.room-presentations .ant-upload.ant-upload-select {
+ width: 83px;
+ height: 83px;
+}
+.room-recordings .search-input,
+.room-recordings .search-input input,
+.room-recordings .search-input.ant-input-affix-wrapper:hover,
+.room-recordings .search-input.ant-input-affix-wrapper:focus {
+ background: var(--bbbeasy-bg-layout) !important;
+}
+.bbbeasy-mp4 {
+ font-size: 24px !important;
+}
+.rtl .bbbeasy-mp4 {
+ transform: scaleX(1) !important;
+}
+.bbbeasy-ppt {
+ font-size: 16px !important;
+}
+.room-recordings-body .ant-card {
+ border-radius: 8px;
+}
+.room-recordings-body .ant-card:not(:hover) {
+ box-shadow: 0 1px 2px -2px var(--bbbeasy-border-gray), 0 3px 6px 0 var(--bbbeasy-lighten-gray),
+ 0 5px 12px 4px var(--bbbeasy-bg-layout);
+}
+.recording-box .recording-infos .anticon {
+ font-size: 14px;
+ padding: 7px;
+ color: white;
+ background: #fbbc0b;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ border-radius: 50%;
+}
+.recording-box .recording-infos span {
+ font-size: 12px;
+}
+.recording-box .share-icon {
+ float: right;
+ position: absolute;
+ bottom: -22%;
+ right: 20px;
+}
+.recording-box .share-icon.ant-btn-rtl {
+ float: left;
+ left: 20px;
+ right: unset;
+}
+.recording-box img {
+ filter: brightness(50%);
+ border-radius: 10px 10px 0 0 !important;
+}
+.recording-cover {
+ position: absolute;
+ top: 20px;
+ color: white;
+ width: 100%;
+ padding: 0 20px;
+}
+.recording-cover .recording-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: baseline;
+}
+.recording-cover .recording-header .anticon {
+ font-size: 22px;
+ margin: 0 5px;
+}
+.recording-cover h3 {
+ color: white !important;
+}
+.room-recordings-body .ant-card-body {
+ padding: 20px !important;
+}
+.room-box {
+ display: grid !important;
+}
+.file-size {
+ color: var(--bbbeasy-medimum-gray);
+ font-size: 13px;
+ margin: 0 12px;
+}
+.actions .file-size {
+ font-size: 10px;
+ margin: 0;
+}
+/******************ADD MODAL*********************/
+.add-modal .ant-modal-header {
+ text-align: center;
+}
+.ant-modal-header {
+ margin: 0 20px;
+}
+.add-modal .ant-form {
+ padding: 0 15px;
+}
+.cancel-btn {
+ background: var(--bbbeasy-medimum-gray) !important;
+ color: white !important;
+}
+.cancel-btn:hover,
+.cancel-btn:focus {
+ border-color: var(--bbbeasy-medimum-hover-gray) !important;
+ background: var(--bbbeasy-medimum-hover-gray) !important;
+}
+.large-modal {
+ width: 50% !important;
+}
+.medium-modal {
+ width: 45% !important;
+}
+/**************DOUBLE CONFIRM DELETE*****************/
+.delete-wrap {
+ text-align: center;
+}
+.delete-wrap .delete-icon {
+ font-size: 35px;
+ margin-bottom: 20px;
+ color: #fbbc0b;
+}
+.delete-wrap .ant-modal-confirm-title {
+ margin-bottom: 10px;
+}
+.delete-wrap .ant-modal-confirm-btns {
+ float: none;
+}
+/***************************TABLE****************************/
+.bbbeasy-table {
+ padding: 0 24px 0 10px;
+}
+.bbbeasy-table.ant-table-wrapper-rtl {
+ padding: 0 10px 0 24px;
+}
+.bbbeasy-table .ant-table-thead > tr > th {
+ background: var(--bbbeasy-lighten-gray) !important;
+}
+/*****************RECORDINGS TABLE - BLUE DESIGN*****************/
+.recordings-table .ant-table {
+ background: transparent;
+ border-radius: 14px;
+ overflow: hidden;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.22);
+}
+.recordings-table .ant-table-container {
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+}
+.recordings-table .ant-table-thead > tr > th {
+ background: linear-gradient(135deg, #172554 0%, #1d4ed8 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.35) !important;
+}
+.recordings-table .ant-table-thead > tr > th .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.45);
+}
+.recordings-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.9);
+}
+.recordings-table .ant-table-thead > tr > th .ant-table-filter-trigger {
+ color: rgba(255, 255, 255, 0.65);
+}
+.recordings-table .ant-table-thead > tr > th .ant-table-filter-trigger:hover {
+ color: #ffffff;
+}
+.recordings-table .ant-table-thead > tr > th .ant-table-filter-trigger.active {
+ color: #fbbc0b;
+}
+.recordings-table .ant-table-tbody > tr > td {
+ background: #0d1b33 !important;
+ color: #cbd5e1 !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.recordings-table .ant-table-tbody > tr.ant-table-row:nth-child(even) > td {
+ background: #0f1f3d !important;
+}
+.recordings-table .ant-table-tbody > tr.ant-table-row:hover > td,
+.recordings-table .ant-table-tbody > tr.ant-table-row:hover > td.ant-table-cell-row-hover,
+.recordings-table .ant-table-tbody > tr > td.ant-table-cell-row-hover {
+ background: rgba(37, 99, 235, 0.24) !important;
+}
+.recordings-table .ant-table-tbody > tr.ant-table-placeholder > td {
+ background: #0d1b33 !important;
+}
+.recordings-table .ant-table-placeholder .ant-empty-description {
+ color: #94a3b8;
+}
+.recordings-table .table-actions:not(.editable) a {
+ color: #93c5fd !important;
+}
+.recordings-table .table-actions:not(.editable) a:hover {
+ color: #fbbc0b !important;
+}
+.recordings-table .recording-formats .anticon {
+ color: #93c5fd;
+}
+.recordings-table .recording-formats .icon-disabled {
+ color: #475569 !important;
+}
+.recordings-table .ant-input {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.recordings-table .ant-input::placeholder {
+ color: #64748b !important;
+}
+.recordings-table .ant-select:not(.ant-select-disabled) .ant-select-selector {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.recordings-table .ant-pagination .ant-pagination-item,
+.recordings-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.recordings-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ background: transparent !important;
+ border-color: rgba(96, 165, 250, 0.35) !important;
+}
+.recordings-table .ant-pagination .ant-pagination-item a {
+ color: #93c5fd !important;
+}
+.recordings-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.recordings-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ color: #93c5fd !important;
+}
+.recordings-table .ant-pagination .ant-pagination-item-active {
+ background: #1d4ed8 !important;
+ border-color: #1d4ed8 !important;
+}
+.recordings-table .ant-pagination .ant-pagination-item-active a {
+ color: #ffffff !important;
+}
+.recordings-table .ant-table-cell mark {
+ background-color: #ffcf33;
+ color: #1e293b;
+}
+/*****************LABELS TABLE - BLUE DESIGN*****************/
+.labels-table .ant-table {
+ background: transparent;
+ border-radius: 14px;
+ overflow: hidden;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.22);
+}
+.labels-table .ant-table-container {
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+}
+.labels-table .ant-table-thead > tr > th {
+ background: linear-gradient(135deg, #172554 0%, #1d4ed8 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.35) !important;
+}
+.labels-table .ant-table-thead > tr > th .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.45);
+}
+.labels-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.9);
+}
+.labels-table .ant-table-thead > tr > th .ant-table-filter-trigger {
+ color: rgba(255, 255, 255, 0.65);
+}
+.labels-table .ant-table-thead > tr > th .ant-table-filter-trigger:hover {
+ color: #ffffff;
+}
+.labels-table .ant-table-thead > tr > th .ant-table-filter-trigger.active {
+ color: #fbbc0b;
+}
+.labels-table .ant-table-tbody > tr > td {
+ background: #0d1b33 !important;
+ color: #cbd5e1 !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.labels-table .ant-table-tbody > tr.ant-table-row:nth-child(even) > td {
+ background: #0f1f3d !important;
+}
+.labels-table .ant-table-tbody > tr.ant-table-row:hover > td,
+.labels-table .ant-table-tbody > tr.ant-table-row:hover > td.ant-table-cell-row-hover,
+.labels-table .ant-table-tbody > tr > td.ant-table-cell-row-hover {
+ background: rgba(37, 99, 235, 0.24) !important;
+}
+.labels-table .ant-table-tbody > tr.ant-table-placeholder > td {
+ background: #0d1b33 !important;
+}
+.labels-table .ant-table-placeholder .ant-empty-description {
+ color: #94a3b8;
+}
+.labels-table .table-actions:not(.editable) a {
+ color: #93c5fd !important;
+}
+.labels-table .table-actions:not(.editable) a:hover {
+ color: #fbbc0b !important;
+}
+.labels-table .ant-input {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.labels-table .ant-input::placeholder {
+ color: #64748b !important;
+}
+.labels-table .ant-pagination .ant-pagination-item,
+.labels-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.labels-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ background: transparent !important;
+ border-color: rgba(96, 165, 250, 0.35) !important;
+}
+.labels-table .ant-pagination .ant-pagination-item a {
+ color: #93c5fd !important;
+}
+.labels-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.labels-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ color: #93c5fd !important;
+}
+.labels-table .ant-pagination .ant-pagination-item-active {
+ background: #1d4ed8 !important;
+ border-color: #1d4ed8 !important;
+}
+.labels-table .ant-pagination .ant-pagination-item-active a {
+ color: #ffffff !important;
+}
+.labels-table .ant-table-cell mark {
+ background-color: #ffcf33;
+ color: #1e293b;
+}
+.table-actions:not(.editable) a:not(.ant-popover-open):hover,
+.table-actions.editable a:not(.ant-popover-open) {
+ color: #fbbc0b !important;
+}
+.table-actions:not(.editable) a {
+ color: var(--bbbeasy-medimum-gray) !important;
+}
+.table-actions a.ant-popover-open {
+ color: red !important;
+}
+.bbbeasy-table .ant-table-expanded-row .ant-table-cell {
+ padding: 0;
+}
+.bbbeasy-table .ant-pro-card-body {
+ padding: 0 !important;
+}
+.bbbeasy-table .card-parent {
+ background: transparent;
+ box-shadow: unset !important;
+}
+.bbbeasy-table .card-parent .ant-card-body {
+ padding: 0 !important;
+}
+.card-parent .bordered-card {
+ border: 1px solid var(--bbbeasy-border-gray);
+ border-radius: 8px;
+}
+.card-parent .bordered-card .ant-card:first-child {
+ border-radius: 8px 8px 0 0 !important;
+}
+.card-parent .bordered-card .ant-card:not(:first-child):not(:last-child),
+.card-parent .bordered-card .ant-card:not(:first-child) .ant-card-head {
+ border-radius: 0 !important;
+}
+.card-parent .bordered-card .ant-card:last-child {
+ border-radius: 0 0 8px 8px !important;
+}
+.card-parent .bordered-card .ant-card .ant-card-head {
+ background: var(--bbbeasy-lighten-gray);
+ min-height: auto;
+}
+.card-parent .bordered-card .ant-card .ant-card-head .ant-card-head-title,
+.card-parent .bordered-card .ant-card .ant-card-body label {
+ font-size: 13px;
+}
+.card-parent .bordered-card .ant-card .ant-card-head .ant-card-head-title {
+ padding: 6px 0;
+}
+.card-parent .bordered-card .ant-card .ant-card-body {
+ padding: 8px 24px !important;
+}
+.card-parent .bordered-card .ant-card .ant-card-body .ant-form-item {
+ margin-bottom: 0;
+}
+.card-parent .bordered-card .ant-checkbox-disabled span {
+ color: inherit;
+}
+.actions-expanded {
+ margin-top: 16px;
+ float: right;
+}
+.actions-expanded.ant-space-rtl {
+ margin-top: 16px;
+ float: left;
+}
+/************TABLE SEARCH***************/
+.table-search-bloc {
+ padding: 8px;
+}
+.table-search-input {
+ margin-bottom: 8px !important;
+ display: block !important;
+}
+.search-icon-filtered {
+ color: #fbbc0b;
+}
+.search-text-highlighted {
+ background: #ffcf33;
+}
+.bbbeasy-table mark {
+ padding: 0;
+ background-color: #ffcf33;
+}
+/*************EDIT TABLE****************/
+.input-editable {
+ margin-bottom: 0 !important;
+}
+.input-editable .ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {
+ content: '';
+ margin-right: 0;
+}
+.ant-form-item:not(.input-editable) .ant-form-item-label label {
+ font-size: 15px;
+}
+.input-editable .ant-input-suffix button {
+ width: 20px !important;
+ height: 20px !important;
+ font-size: 12px !important;
+}
+.input-editable .ant-input-suffix .cell-input-cancel {
+ color: var(--bbbeasy-medimum-gray);
+ border-color: var(--bbbeasy-medimum-gray);
+}
+.input-editable .ant-input-suffix .cell-input-cancel:hover {
+ color: #fbbc0b !important;
+ border-color: #fbbc0b;
+}
+.cell-input-cancel {
+ color: var(--bbbeasy-medimum-gray) !important;
+}
+.cell-input-cancel:hover {
+ color: #ffcf33 !important;
+}
+.cell-edit-icon,
+.edit-btn {
+ color: var(--bbbeasy-medimum-gray) !important;
+}
+.cell-edit-icon:hover,
+.edit-btn:hover {
+ color: #fbbc0b !important;
+}
+.select-field .ant-select-selection-item {
+ text-transform: capitalize;
+}
+/**********************PRESETS*************************/
+.preset-card-title .input-editable {
+ width: 80%;
+}
+.presets-modal .presets-body .ant-form-item-control .ant-input {
+ width: 80%;
+}
+.help-icon {
+ font-size: 17px !important;
+}
+.title-tooltip {
+ margin-top: 12px !important;
+}
+.title-tooltip h5,
+.install-tooltip h5 {
+ margin: 0.25em 0 !important;
+}
+.presets-cards {
+ padding-top: 16px;
+}
+.presets-cards .ant-card {
+ border-radius: 10px !important;
+}
+.presets-cards .ant-card-head {
+ border-bottom: none !important;
+}
+.presets-cards .ant-card-body button {
+ margin: 6px;
+}
+.presets-cards .ant-card-body button:disabled .PresetIcon {
+ background-color: var(--bbbeasy-medimum-gray);
+}
+.presets-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
+}
+.presets-search-input input,
+.presets-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.presets-search-input .ant-input-clear-icon,
+.presets-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+/*****************PRESETS CARDS - BLUE DESIGN*****************/
+.presets-cards .ant-card {
+ border-radius: 14px !important;
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.18);
+ transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
+}
+.presets-cards .ant-card:hover {
+ border-color: rgba(96, 165, 250, 0.55) !important;
+ box-shadow: 0 16px 44px rgba(37, 99, 235, 0.32);
+ transform: translateY(-3px);
+}
+.presets-cards .ant-card-head {
+ background: transparent !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.presets-cards .preset-name {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.presets-cards .ant-card-head .anticon-more {
+ color: #93c5fd;
+ font-size: 20px;
+}
+.presets-cards .ant-card-head .anticon-more:hover {
+ color: #fbbc0b;
+}
+.presets-cards .preset-card-title .input-editable .ant-input {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.presets-cards .ant-card-body button:disabled .PresetIcon {
+ background-color: rgba(71, 85, 105, 0.35) !important;
+}
+.empty-presets {
+ height: 200px !important;
+}
+.empty-labels {
+ height: 40px !important;
+ margin-top: 10px !important;
+}
+/********************INSTALL********************/
+.success-install-icon {
+ font-size: 40px !important;
+ padding: 20px !important;
+ color: white !important;
+ background: #fbbc0b;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ border-radius: 50%;
+}
+.button-container {
+ margin-top: 24px !important;
+}
+.button-container .ant-row:not(.ant-row-rtl) .prev {
+ margin-right: 20px;
+}
+.button-container .ant-row.ant-row-rtl .prev {
+ margin-left: 20px;
+}
+.button-container .ant-form-item-control-input-content {
+ display: flex;
+}
+.modal-submit-btn .ant-btn-primary {
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+ color: #ffffff !important;
+}
+.modal-submit-btn .ant-btn-primary:hover,
+.modal-submit-btn .ant-btn-primary:focus {
+ background: #4096ff !important;
+ border-color: #4096ff !important;
+ color: #ffffff !important;
+}
+
+.ant-page-header .ant-btn-primary,
+.site-page-header .ant-btn-primary {
+ background: #1677ff !important;
+ border-color: #1677ff !important;
+ color: #ffffff !important;
+}
+
+.ant-page-header .ant-btn-primary:hover,
+.ant-page-header .ant-btn-primary:focus,
+.site-page-header .ant-btn-primary:hover,
+.site-page-header .ant-btn-primary:focus {
+ background: #4096ff !important;
+ border-color: #4096ff !important;
+ color: #ffffff !important;
+}
+.install-form .ant-card-body {
+ display: flex;
+ flex-wrap: wrap;
+}
+/*******STEP2*******/
+.install-form .company-container,
+.install-form .colors-container {
+ display: flex;
+ flex-wrap: wrap;
+}
+.install-form .box,
+.install-form .colors-container .ant-form-item {
+ flex: 0 0 50%;
+}
+.install-form:not(.ant-form-rtl) .box:not(.last),
+.install-form:not(.ant-form-rtl) .colors-container .ant-form-item {
+ padding-right: 20px;
+}
+.install-form.ant-form-rtl .box:not(.last),
+.install-form.ant-form-rtl .colors-container .ant-form-item {
+ padding-left: 20px;
+}
+.install-form:not(.ant-form-rtl) .box.last {
+ padding-left: 20px;
+ border-left: 1px solid var(--bbbeasy-border-gray);
+}
+.install-form.ant-form-rtl .box.last {
+ padding-right: 20px;
+ border-right: 1px solid var(--bbbeasy-border-gray);
+}
+.install-form .ant-upload.ant-upload-drag p.ant-upload-hint {
+ font-size: 13px !important;
+}
+.install-form .rc-color-picker-trigger {
+ width: 85px;
+ height: 24px;
+ border: 1px solid var(--bbbeasy-border-gray);
+}
+.install-form .rc-color-picker-wrap {
+ vertical-align: middle;
+}
+.install-form .color-palette-picker-value {
+ color: gray;
+ font-size: 13px;
+ font-weight: 500;
+}
+.install-form:not(.ant-form-rtl) .color-palette-picker-value {
+ margin-left: 10px;
+}
+.install-form.ant-form-rtl .color-palette-picker-value {
+ margin-right: 10px;
+}
+/*******STEP3*******/
+.final-form-header {
+ margin: 20px 0 !important;
+}
+.settings-info {
+ margin: 20px !important;
+}
+.install-form .ant-card:not(.ant-card-bordered) {
+ box-shadow: unset !important;
+}
+.install-form .ant-card:not(.ant-card-bordered) .ant-card-body {
+ padding: unset !important;
+}
+.presets-grid {
+ width: 25% !important;
+ box-shadow: none !important;
+}
+.presets-grid .ant-card-meta {
+ align-items: center;
+ display: inline-flex !important;
+}
+/*.presets-grid .ant-card-meta .ant-card-meta-avatar {
+ width: 38px !important;
+ height: 38px !important;
+}*/
+.presets-grid .ant-card-meta .ant-card-meta-title {
+ white-space: unset;
+ text-overflow: unset;
+ font-weight: unset;
+ font-size: 14.5px;
+}
+.presets-grid.ant-card-grid-hoverable:hover {
+ background: #fffce6;
+ cursor: pointer;
+ border-radius: 10px;
+}
+.PresetIcon {
+ font-size: 18px !important;
+ padding: 10px;
+ color: white;
+ background: #fbbc0b;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ border-radius: 50%;
+}
+/*.PresetIcon img {
+ width: 19px;
+}*/
+.presets-modal {
+ width: 35% !important;
+}
+.white-space {
+ white-space: pre-wrap;
+ text-align: left;
+ width: 260px;
+}
+.presets-modal .ant-modal-content {
+ margin: 0 30px;
+}
+.presets-modal label {
+ color: var(--bbbeasy-darken-gray) !important;
+ font-weight: 500;
+}
+.presets-modal label::after {
+ content: '' !important;
+}
+.presets-modal .presets-body {
+ padding: 20px;
+}
+.presets-modal .presets-body .ant-form-item-control:not(.ant-col-rtl) {
+ text-align: right;
+}
+.presets-modal .presets-body .ant-form-item-control.ant-col-rtl {
+ text-align: left;
+}
+.presets-modal .ant-modal-footer {
+ text-align: center !important;
+ border-top: unset;
+}
+.presets-modal .ant-modal-footer button {
+ width: 70%;
+}
+/*******************PAGE NOT FOUND*************/
+.page-not-found {
+ padding: 60px 32px !important;
+}
+/**********************NOTIFICATIONS*******************/
+.progress-bar {
+ height: 8px;
+ margin-top: 15px;
+}
+.percentage {
+ display: block;
+ height: 100%;
+ width: 100%;
+ background-color: var(--bbbeasy-medimum-gray);
+ animation: progress 4500ms ease-in 1;
+}
+.percentage.notif-login {
+ animation: progress 2500ms ease-in 1;
+}
+@keyframes progress {
+ from {
+ width: 0;
+ }
+}
+/***********************BRANDINGS**********************/
+.branding-row,
+.preset-settings-row {
+ align-items: center;
+ min-height: 50vh;
+}
+.button-padding {
+ padding: 0 20% !important;
+}
+/***********************PROFILE***********************************/
+.site-page-form {
+ padding: 16px 24px !important;
+}
+.profile-form .bbbeasy-btn {
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ background-color: #fbbc0b;
+ color: black;
+}
+.profile-form .custom-badge-bg {
+ -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ background: #fbbc0b;
+ font-size: 19px !important;
+ margin-top: 16px;
+ right: 32px !important;
+}
+.profile-form .ant-badge-rtl .custom-badge-bg {
+ left: 32px !important;
+}
+.profile-form .custom-badge {
+ -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ background: white;
+ position: absolute;
+ top: 0.5px;
+ left: 0.5px;
+ right: 0.5px;
+ bottom: 0.5px;
+ width: 38px;
+ height: 38px;
+ border-radius: 50%;
+}
+
+/*********************RECORDINGS********************/
+.recording-formats .icon-bbbeasy-playback-presentation,
+.recording-formats .icon-bbbeasy-playback-podcast,
+.recording-formats .anticon-desktop,
+.recording-formats .icon-bbbeasy-activity-reports {
+ font-size: 17px;
+}
+
+.recording-formats .icon-bbbeasy-mp4 {
+ font-size: 24px;
+}
+
+.recording-formats .icon-desktop {
+ height: 12px;
+}
+
+.recording-formats .icon-disabled {
+ color: var(--bbbeasy-medimum-gray) !important;
+}
+
+.share-modal {
+ padding: 0 30px !important;
+ text-align: center !important;
+}
+
+.share-modal .modal-content {
+ width: 80% !important;
+}
+
+.share-modal .recording-formats .anticon:not(.icon-disabled) .icon-bbbeasy-playback-presentation,
+.share-modal .recording-formats .anticon:not(.icon-disabled) .icon-bbbeasy-playback-podcast,
+.share-modal .recording-formats .anticon-desktop:not(.icon-disabled),
+.share-modal .recording-formats .anticon:not(.icon-disabled) .icon-bbbeasy-activity-reports {
+ font-size: 25px;
+}
+.share-modal .recording-formats .icon-disabled .icon-bbbeasy-playback-presentation,
+.share-modal .recording-formats .icon-disabled .icon-bbbeasy-playback-podcast,
+.share-modal .recording-formats .anticon-desktop.icon-disabled,
+.share-modal .recording-formats .icon-disabled .icon-bbbeasy-activity-reports {
+ font-size: 22px;
+}
+
+.share-modal .recording-formats .icon-bbbeasy-mp4 {
+ font-size: 29px;
+}
+
+.share-modal .recording-formats .icon-disabled .icon-bbbeasy-mp4 {
+ font-size: 26px;
+}
+
+.share-modal .recording-formats .icon-desktop:not(.disabled) {
+ height: 23px;
+}
+
+.share-modal .recording-formats .icon-desktop.disabled {
+ height: 20px;
+}
+
+.share-modal .bbbeasy-btn .ant-avatar-string {
+ position: unset !important;
+}
+
+.share-modal .bbbeasy-btn:not(:hover) .bbbeasy-white-btn {
+ -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+}
+
+.profile-form .ant-image .ant-image-img {
+ width: 100%;
+}
+
+.profile-form .ant-image .ant-image-mask {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: #fff;
+ background: rgba(0, 0, 0, 0.5);
+ cursor: pointer;
+ opacity: 0;
+ transition: opacity 0.3s;
+}
+
+.profile-form .ant-image .ant-image-mask:hover {
+ opacity: 1;
+}
+
+.delete-button-color {
+ color: #ff4d4f !important;
+}
+.edit-button-color {
+ color: var(--bbbeasy-medimum-gray) !important;
+}
+.edit-button-color:hover {
+ color: #fbbc0b !important;
+}
+.labels-table a.delete-button-color {
+ color: #93c5fd !important;
+}
+.labels-table a.delete-button-color:hover {
+ color: #ff4d4f !important;
+}
+.labels-table a.edit-button-color {
+ color: #93c5fd !important;
+}
+.labels-table a.edit-button-color:hover {
+ color: #fbbc0b !important;
+}
+.recordings-table .table-actions:not(.editable) a.delete-button-color:hover {
+ color: #ff4d4f !important;
+}
+.ant-alert-content {
+ margin-right: 5px;
+}
+.ant-input-number-rtl {
+ padding-right: 20px !important;
+}
+.space-color-picker {
+ color: rgba(0, 0, 0, 0.25);
+
+ opacity: 1;
+
+ width: 200px;
+
+ background-color: #ffffff;
+ background-image: none;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #dddfe1;
+ border-radius: 6px;
+ padding: 4px 11px;
+}
+
+#administration_form {
+ padding: 50px 30px !important;
+}
+#administration_form .ant-col {
+ text-align: right;
+}
+#administration_form .ant-col-rtl {
+ text-align: left !important;
+}
+.loading {
+ margin-left: 50% !important;
+}
+#administration_form #submit-btn {
+ margin-top: 25px;
+}
+
+.ant-upload-list-item {
+ width: 80% !important;
+}
+.ant-upload-drag {
+ width: 80% !important;
+}
+.space-color-picker-branding {
+ color: rgba(0, 0, 0, 0.25);
+
+ opacity: 1;
+
+ width: 150px;
+
+ background-color: #ffffff;
+ background-image: none;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #dddfe1;
+ border-radius: 6px;
+ padding: 4px 11px;
+}
+
+.code-color-picker-edit-label {
+ background: transparent;
+ border-radius: 3px;
+ width: 90px;
+}
+
+.input-status-presets {
+ background: transparent;
+ border: transparent;
+ width: 50px;
+}
+
+.space-color-picker-add-label {
+ position: relative;
+ display: inline-flex;
+ width: 95% !important;
+ min-width: 0;
+ padding: 4px 11px !important;
+ color: rgba(0, 0, 0, 0.88);
+ font-size: 14px;
+ line-height: 1.8714285714285714;
+ background-color: #ffffff;
+ background-image: none;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #d9d9d9;
+ border-radius: 6px;
+ transition: all 0.2s;
+ opacity: 1;
+}
+
+.space-presets-border {
+ border: 1px solid #999;
+
+ display: inline-block;
+
+ border-radius: 2px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+ box-shadow: 0 0 0 2px #fff inset;
+}
+.input-editable .ant-input-suffix .cell-input-cancel-record {
+ width: 100% !important;
+ height: 100% !important;
+}
+.input-editable .ant-input-suffix .cell-input-save-record {
+ width: 100% !important;
+ height: 100% !important;
+}
+.room-details .disableStart {
+ font-size: 20px !important;
+ font-weight: 600;
+ clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+ border-radius: 50%;
+ background-color: #d4d4d4 !important;
+ cursor: not-allowed;
+}
+.edit-room-form {
+ display: block !important;
+}
+.room-title {
+ max-width: 150px !important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.room-labels {
+ word-break: break-all;
+ max-width: max-content !important;
+ overflow: hidden;
+ text-overflow: unset;
+ max-height: 24px;
+}
+.room-label {
+ max-width: 120px !important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+div.error-message-Label {
+ max-width: max-content;
+ margin-bottom: 10px;
+ margin-left: 10px;
+}
+.preset-name {
+ max-width: 120px !important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.ant-table-cell {
+ max-width: 150px !important;
+}
+/*****************ROOM DETAILS PAGE - BLUE DESIGN*****************/
+/* Main room card */
+.room-details.gray-bg {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.18);
+}
+.room-details h3.ant-typography {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.room-details .ant-form-item-label label {
+ color: #cbd5e1 !important;
+}
+.room-details .ant-input,
+.room-details .ant-input-affix-wrapper {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.room-details .ant-input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.room-details .ant-input-affix-wrapper .anticon:not(.text-success) {
+ color: #93c5fd !important;
+}
+.room-details .ant-select-selector {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+}
+.room-details .ant-select-selection-item {
+ color: #e2e8f0 !important;
+}
+.room-details .edit-btn {
+ color: #93c5fd !important;
+}
+.room-details .edit-btn:hover {
+ color: #fbbc0b !important;
+}
+.room-details .medias .anticon {
+ color: #93c5fd !important;
+}
+.room-details .medias .anticon:hover {
+ color: #fbbc0b !important;
+}
+.room-details .medias .social-icon {
+ width: 20px !important;
+ height: 20px !important;
+ display: block;
+ border-radius: 4px;
+ transition: transform 0.2s ease, filter 0.2s ease;
+}
+.room-details .medias a:hover .social-icon {
+ transform: scale(1.12);
+ filter: drop-shadow(0 0 6px rgba(96, 165, 250, 0.55));
+}
+/* Presentations card */
+.room-presentations.gray-bg {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.18);
+}
+.room-presentations h5.ant-typography {
+ color: #ffffff !important;
+}
+.room-presentations .ant-upload.ant-upload-select {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.35) !important;
+}
+.room-presentations .ant-upload.ant-upload-select .anticon-plus,
+.room-presentations .ant-upload.ant-upload-select .upload-file {
+ color: #93c5fd !important;
+}
+/* Recordings section title + filter */
+.room-recordings h4.ant-typography {
+ color: #ffffff !important;
+}
+.room-recordings .search-input,
+.room-recordings .search-input input,
+.room-recordings .search-input.ant-input-affix-wrapper:hover,
+.room-recordings .search-input.ant-input-affix-wrapper:focus {
+ background: rgba(8, 18, 46, 0.9) !important;
+ border: 1px solid rgba(96, 165, 250, 0.16);
+ box-shadow: 0 12px 24px rgba(2, 6, 23, 0.16);
+}
+.room-recordings .search-input.ant-input-affix-wrapper-focused {
+ border-color: rgba(56, 189, 248, 0.72) !important;
+ box-shadow: 0 0 0 4px rgba(56, 189, 248, 0.08);
+}
+.room-recordings .search-input input,
+.room-recordings .search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.room-recordings .search-input .anticon-search,
+.room-recordings .search-input .ant-input-clear-icon {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+/* Recording cards */
+.room-recordings-body .ant-card {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
+}
+.room-recordings-body .ant-card:not(:hover) {
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.18);
+}
+.room-recordings-body .ant-card:hover {
+ border-color: rgba(96, 165, 250, 0.55) !important;
+ box-shadow: 0 16px 44px rgba(37, 99, 235, 0.32);
+ transform: translateY(-3px);
+}
+.room-recordings-body .file-size {
+ color: #94a3b8 !important;
+}
+.room-recordings .ant-empty-description {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.room-details-search-input input,
+.room-details-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.room-details-search-input .ant-input-clear-icon,
+.room-details-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+/*****************NEW ROOM MODAL - BLUE DESIGN*****************/
+.add-modal.large-modal .ant-modal-content {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 14px 44px rgba(37, 99, 235, 0.28);
+}
+.add-modal.large-modal .ant-modal-header {
+ background: transparent !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.add-modal.large-modal .ant-modal-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.add-modal.large-modal .ant-modal-close {
+ color: #93c5fd !important;
+}
+.add-modal.large-modal .ant-modal-close:hover {
+ color: #fbbc0b !important;
+}
+.add-modal.large-modal .ant-form-item-label label {
+ color: #cbd5e1 !important;
+}
+.add-modal.large-modal .ant-input,
+.add-modal.large-modal .ant-input-affix-wrapper {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.add-modal.large-modal .ant-input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.add-modal.large-modal .ant-input-group-addon {
+ background: #0f1f3d !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #93c5fd !important;
+}
+.add-modal.large-modal .readonly-item input {
+ background-color: #0b1526 !important;
+ color: #e2e8f0 !important;
+}
+.add-modal.large-modal .readonly-item button {
+ background-color: #0f1f3d !important;
+ color: #93c5fd !important;
+}
+.add-modal.large-modal .readonly-item button:hover {
+ color: #fbbc0b !important;
+}
+.add-modal.large-modal .ant-select-selector {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+}
+.add-modal.large-modal .ant-select-selection-item,
+.add-modal.large-modal .ant-select-selection-placeholder {
+ color: #e2e8f0 !important;
+}
+.add-modal.large-modal .ant-select-arrow {
+ color: #93c5fd !important;
+}
+.add-modal.large-modal .cancel-btn {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
+}
+.add-modal.large-modal .cancel-btn:hover,
+.add-modal.large-modal .cancel-btn:focus {
+ background: rgba(71, 85, 105, 0.6) !important;
+ color: #ffffff !important;
+}
+.add-modal.large-modal .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
+}
+.add-modal.large-modal .ant-btn-primary:hover,
+.add-modal.large-modal .ant-btn-primary:focus {
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
+ border-color: #3b82f6 !important;
+}
+/* Blurred dark mask behind the New Room modal */
+.ant-modal-root:has(.ant-modal.add-modal.large-modal) > .ant-modal-mask {
+ background-color: rgba(2, 6, 23, 0.55) !important;
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+}
+/*****************NEW PRESET / NEW LABEL MODALS - BLUE DESIGN*****************/
+.preset-add-modal .ant-modal-content,
+.label-add-modal .ant-modal-content {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 14px 44px rgba(37, 99, 235, 0.28);
+}
+.preset-add-modal .ant-modal-header,
+.label-add-modal .ant-modal-header {
+ background: transparent !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.preset-add-modal .ant-modal-title,
+.label-add-modal .ant-modal-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.preset-add-modal .ant-modal-close,
+.label-add-modal .ant-modal-close {
+ color: #93c5fd !important;
+}
+.preset-add-modal .ant-modal-close:hover,
+.label-add-modal .ant-modal-close:hover {
+ color: #fbbc0b !important;
+}
+.preset-add-modal .ant-form-item-label label,
+.label-add-modal .ant-form-item-label label {
+ color: #cbd5e1 !important;
+}
+.preset-add-modal .ant-input,
+.preset-add-modal .ant-input-affix-wrapper,
+.label-add-modal .ant-input,
+.label-add-modal .ant-input-affix-wrapper {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.preset-add-modal .ant-input::placeholder,
+.label-add-modal .ant-input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.preset-add-modal .space-color-picker-add-label,
+.label-add-modal .space-color-picker-add-label {
+ background-color: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.preset-add-modal .cancel-btn,
+.label-add-modal .cancel-btn {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
+}
+.preset-add-modal .cancel-btn:hover,
+.preset-add-modal .cancel-btn:focus,
+.label-add-modal .cancel-btn:hover,
+.label-add-modal .cancel-btn:focus {
+ background: rgba(71, 85, 105, 0.6) !important;
+ color: #ffffff !important;
+}
+.preset-add-modal .ant-btn-primary,
+.label-add-modal .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
+}
+.preset-add-modal .ant-btn-primary:hover,
+.preset-add-modal .ant-btn-primary:focus,
+.label-add-modal .ant-btn-primary:hover,
+.label-add-modal .ant-btn-primary:focus {
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
+ border-color: #3b82f6 !important;
+}
+/* Blurred dark mask behind the New Preset / New Label modals */
+.ant-modal-root:has(.ant-modal.preset-add-modal) > .ant-modal-mask,
+.ant-modal-root:has(.ant-modal.label-add-modal) > .ant-modal-mask {
+ background-color: rgba(2, 6, 23, 0.55) !important;
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+}
+/*****************NEW USER MODAL - BLUE DESIGN*****************/
+.user-add-modal .ant-modal-content {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 14px 44px rgba(37, 99, 235, 0.28);
+}
+.user-add-modal .ant-modal-header {
+ background: transparent !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.user-add-modal .ant-modal-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.user-add-modal .ant-modal-close {
+ color: #93c5fd !important;
+}
+.user-add-modal .ant-modal-close:hover {
+ color: #fbbc0b !important;
+}
+.user-add-modal .ant-form-item-label label {
+ color: #cbd5e1 !important;
+}
+.user-add-modal .ant-input,
+.user-add-modal .ant-input-affix-wrapper {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.user-add-modal .ant-input::placeholder,
+.user-add-modal .ant-input-affix-wrapper input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.user-add-modal .ant-input-affix-wrapper input {
+ background: transparent !important;
+ color: #e2e8f0 !important;
+}
+/* Make the password field exactly the same size as the email field */
+.user-add-modal .ant-input-affix-wrapper {
+ height: 32px !important;
+ padding: 4px 11px !important;
+ line-height: 22px !important;
+ font-size: 14px !important;
+ box-sizing: border-box !important;
+ align-items: center !important;
+}
+.user-add-modal .ant-input-affix-wrapper .ant-input {
+ height: auto !important;
+ padding: 0 !important;
+ line-height: 22px !important;
+}
+/* Gray eye icon (show/hide password) */
+.user-add-modal .ant-input-suffix,
+.user-add-modal .ant-input-password-icon {
+ color: rgba(148, 163, 184, 0.9) !important;
+ font-size: 15px;
}
-.install-form.ant-form-rtl .color-palette-picker-value {
- margin-right: 10px;
+.user-add-modal .ant-input-password-icon:hover {
+ color: #fbbc0b !important;
}
-/*******STEP3*******/
-.final-form-header {
- margin: 20px 0 !important;
+/* Reset the installer padding on the password Form.Item so the field
+ has exactly the same width as the email field */
+.user-add-modal .password-install {
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+.user-add-modal .ant-select-selector {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+}
+.user-add-modal .ant-select-selection-item,
+.user-add-modal .ant-select-selection-placeholder {
+ color: #e2e8f0 !important;
+}
+.user-add-modal .ant-select-arrow {
+ color: #93c5fd !important;
+}
+.user-add-modal .cancel-btn {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
+}
+.user-add-modal .cancel-btn:hover,
+.user-add-modal .cancel-btn:focus {
+ background: rgba(71, 85, 105, 0.6) !important;
+ color: #ffffff !important;
+}
+.user-add-modal .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
+}
+.user-add-modal .ant-btn-primary:hover,
+.user-add-modal .ant-btn-primary:focus {
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
+ border-color: #3b82f6 !important;
+}
+/* Blurred dark mask behind the New User modal */
+.ant-modal-root:has(.ant-modal.user-add-modal) > .ant-modal-mask {
+ background-color: rgba(2, 6, 23, 0.55) !important;
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+}
+/*****************BRANDING PAGE - WHITE TITLES / GRAY DETAILS*****************/
+.branding-page .form-header .ant-typography {
+ color: #ffffff !important;
+ font-weight: 600;
}
-.settings-info {
- margin: 20px !important;
+.branding-page .ant-form-item-label label {
+ color: #ffffff !important;
+}
+.branding-page .ant-upload.ant-upload-drag p.ant-upload-hint,
+.branding-page .ant-upload.ant-upload-drag .ant-typography,
+.branding-page .ant-upload-drag-icon .anticon,
+.branding-page .ant-upload-list-item-name,
+.branding-page .ant-upload-list-item .anticon,
+.branding-page .ant-upload-list-item-card-actions .anticon {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.branding-page .space-color-picker-branding {
+ background-color: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.branding-search-input input,
+.branding-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.branding-search-input .ant-input-clear-icon,
+.branding-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.branding-page .ant-input,
+.branding-page .ant-input-affix-wrapper,
+.branding-page .ant-input-number {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.branding-page .ant-input:hover,
+.branding-page .ant-input:focus,
+.branding-page .ant-input-focused,
+.branding-page .ant-input-affix-wrapper:hover,
+.branding-page .ant-input-affix-wrapper:focus,
+.branding-page .ant-input-affix-wrapper-focused,
+.branding-page .ant-input-number:hover,
+.branding-page .ant-input-number-focused {
+ border-color: rgba(56, 189, 248, 0.72) !important;
+ box-shadow: 0 0 0 3px rgba(56, 189, 248, 0.12);
+}
+.branding-page .ant-input::placeholder,
+.branding-page .ant-input-number-input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.branding-page .ant-input-number .ant-input-number-handler-wrap {
+ background: #0f1f3d !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+}
+.branding-page .ant-input-number-handler-up-inner,
+.branding-page .ant-input-number-handler-down-inner {
+ color: #93c5fd !important;
+}
+.branding-page .ant-input-number-handler-up:hover,
+.branding-page .ant-input-number-handler-down:hover {
+ height: 50% !important;
+}
+.branding-page .ant-input:disabled,
+.branding-page .ant-input-number-disabled {
+ background: rgba(15, 23, 42, 0.6) !important;
+ color: #64748b !important;
+}
+.preset-settings-search-input input,
+.preset-settings-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.preset-settings-search-input .ant-input-clear-icon,
+.preset-settings-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+/*****************BIGBLUEBUTTON SETTINGS - BLUE DESIGN (v2)*****************/
+.preset-settings-row .final-form-header .ant-typography {
+ color: #ffffff !important;
+ font-weight: 600;
}
-.install-form .ant-card:not(.ant-card-bordered) {
- box-shadow: unset !important;
+.preset-settings-row .settings-info.ant-alert-warning {
+ background: rgba(15, 23, 42, 0.55) !important;
+ border: 1px solid rgba(96, 165, 250, 0.18) !important;
+ border-radius: 12px !important;
}
-.install-form .ant-card:not(.ant-card-bordered) .ant-card-body {
- padding: unset !important;
+.preset-settings-row .settings-info .ant-alert-message {
+ color: #cbd5e1 !important;
}
-.presets-grid {
- width: 25% !important;
+.preset-settings-row .settings-info .ant-alert-close-icon,
+.preset-settings-row .settings-info .ant-alert-close-icon * {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.preset-settings-row .install-form .ant-card:not(.ant-card-bordered) {
+ background: transparent !important;
+ border: none !important;
box-shadow: none !important;
+ padding: 0;
}
-.presets-grid .ant-card-meta {
- align-items: center;
- display: inline-flex !important;
+.preset-settings-row .presets-grid {
+ width: calc(25% - 20px) !important;
+ margin: 10px;
+ background: linear-gradient(145deg, #16264a 0%, #0e1c36 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.22) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 8px 24px rgba(2, 6, 23, 0.35);
+ transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
+}
+.preset-settings-row .presets-grid:hover {
+ border-color: rgba(96, 165, 250, 0.55) !important;
+ box-shadow: 0 14px 36px rgba(37, 99, 235, 0.3);
+ transform: translateY(-4px);
+}
+.preset-settings-row .presets-grid .ant-card-meta-title {
+ color: #ffffff !important;
+ font-weight: 600;
}
-/*.presets-grid .ant-card-meta .ant-card-meta-avatar {
- width: 38px !important;
- height: 38px !important;
-}*/
-.presets-grid .ant-card-meta .ant-card-meta-title {
- white-space: unset;
- text-overflow: unset;
- font-weight: unset;
- font-size: 14.5px;
+.preset-settings-row .presets-grid .PresetIcon {
+ box-shadow: 0 4px 14px rgba(251, 188, 11, 0.35);
}
-.presets-grid.ant-card-grid-hoverable:hover {
- background: #fffce6;
- cursor: pointer;
- border-radius: 10px;
+/* Preset settings modal (scoped to this page only) */
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-modal-content {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 14px 44px rgba(37, 99, 235, 0.28);
}
-.PresetIcon {
- font-size: 18px !important;
- padding: 10px;
- color: white;
- background: #fbbc0b;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- border-radius: 50%;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-modal-title {
+ color: #ffffff !important;
+ font-weight: 600;
}
-/*.PresetIcon img {
- width: 19px;
-}*/
-.presets-modal {
- width: 35% !important;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) label {
+ color: #ffffff !important;
}
-.white-space {
- white-space: pre-wrap;
- text-align: left;
- width: 260px;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-switch {
+ background: #0f1f3d !important;
+ border: 1px solid rgba(96, 165, 250, 0.4) !important;
}
-.presets-modal .ant-modal-content {
- margin: 0 30px;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-switch-checked {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.35);
}
-.presets-modal label {
- color: var(--bbbeasy-darken-gray) !important;
- font-weight: 500;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-switch .ant-switch-handle::before,
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-switch-checked .ant-switch-handle::before {
+ background-color: #ffffff !important;
}
-.presets-modal label::after {
- content: '' !important;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .input-status-presets {
+ background: transparent !important;
+ border: transparent !important;
+ color: #cbd5e1 !important;
+ width: 50px;
}
-.presets-modal .presets-body {
- padding: 20px;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-modal-header {
+ background: transparent !important;
}
-.presets-modal .presets-body .ant-form-item-control:not(.ant-col-rtl) {
- text-align: right;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-modal-close {
+ color: rgba(148, 163, 184, 0.9) !important;
}
-.presets-modal .presets-body .ant-form-item-control.ant-col-rtl {
- text-align: left;
+/*****************USERS PAGE - BLUE DESIGN*****************/
+.users-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
}
-.presets-modal .ant-modal-footer {
- text-align: center !important;
- border-top: unset;
+.users-search-input input,
+.users-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
}
-.presets-modal .ant-modal-footer button {
- width: 70%;
+.users-search-input .ant-input-clear-icon,
+.users-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
}
-/*******************PAGE NOT FOUND*************/
-.page-not-found {
- padding: 60px 32px !important;
+.users-table .ant-table {
+ background: transparent;
+ border-radius: 14px;
+ overflow: hidden;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.22);
}
-/**********************NOTIFICATIONS*******************/
-.progress-bar {
- height: 8px;
- margin-top: 15px;
+.users-table .ant-table-container {
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
}
-.percentage {
- display: block;
- height: 100%;
- width: 100%;
- background-color: var(--bbbeasy-medimum-gray);
- animation: progress 4500ms ease-in 1;
+.users-table .ant-table-thead > tr > th {
+ background: linear-gradient(135deg, #172554 0%, #1d4ed8 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.35) !important;
}
-.percentage.notif-login {
- animation: progress 2500ms ease-in 1;
+.users-table .ant-table-thead > tr > th .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.45);
}
-@keyframes progress {
- from {
- width: 0;
- }
+.users-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.9);
}
-/***********************BRANDINGS**********************/
-.branding-row,
-.preset-settings-row {
- align-items: center;
- min-height: 50vh;
+.users-table .ant-table-thead > tr > th .ant-table-filter-trigger {
+ color: rgba(255, 255, 255, 0.65);
}
-.button-padding {
- padding: 0 20% !important;
+.users-table .ant-table-thead > tr > th .ant-table-filter-trigger:hover {
+ color: #ffffff;
}
-/***********************PROFILE***********************************/
-.site-page-form {
- padding: 16px 24px !important;
+.users-table .ant-table-thead > tr > th .ant-table-filter-trigger.active {
+ color: #fbbc0b;
}
-.profile-form .bbbeasy-btn {
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- background-color: #fbbc0b;
- color: black;
+.users-table .ant-table-tbody > tr > td {
+ background: #0d1b33 !important;
+ color: #cbd5e1 !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
}
-.profile-form .custom-badge-bg {
- -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- background: #fbbc0b;
- font-size: 19px !important;
- margin-top: 16px;
- right: 32px !important;
+.users-table .ant-table-tbody > tr.ant-table-row:nth-child(even) > td {
+ background: #0f1f3d !important;
}
-.profile-form .ant-badge-rtl .custom-badge-bg {
- left: 32px !important;
+.users-table .ant-table-tbody > tr.ant-table-row:hover > td,
+.users-table .ant-table-tbody > tr.ant-table-row:hover > td.ant-table-cell-row-hover,
+.users-table .ant-table-tbody > tr > td.ant-table-cell-row-hover {
+ background: rgba(37, 99, 235, 0.24) !important;
}
-.profile-form .custom-badge {
- -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- background: white;
- position: absolute;
- top: 0.5px;
- left: 0.5px;
- right: 0.5px;
- bottom: 0.5px;
- width: 38px;
- height: 38px;
+.users-table .ant-table-tbody > tr.ant-table-placeholder > td {
+ background: #0d1b33 !important;
+}
+.users-table .ant-table-placeholder .ant-empty-description {
+ color: #94a3b8;
+}
+.users-table a.edit-button-color {
+ color: #93c5fd !important;
+}
+.users-table a.edit-button-color:hover {
+ color: #fbbc0b !important;
+}
+.users-table a.delete-button-color {
+ color: #93c5fd !important;
+}
+.users-table a.delete-button-color:hover {
+ color: #ff4d4f !important;
+}
+.users-table .ant-input {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.users-table .ant-input::placeholder {
+ color: #64748b !important;
+}
+.users-table .ant-pagination .ant-pagination-item,
+.users-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.users-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ background: transparent !important;
+ border-color: rgba(96, 165, 250, 0.35) !important;
+}
+.users-table .ant-pagination .ant-pagination-item a {
+ color: #93c5fd !important;
+}
+.users-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.users-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ color: #93c5fd !important;
+}
+.users-table .ant-pagination .ant-pagination-item-active {
+ background: #1d4ed8 !important;
+ border-color: #1d4ed8 !important;
+}
+.users-table .ant-pagination .ant-pagination-item-active a {
+ color: #ffffff !important;
+}
+.users-table .ant-table-cell mark {
+ background-color: #ffcf33;
+ color: #1e293b;
+}
+.users-table .ant-tag {
+ border-radius: 999px;
+ padding: 2px 14px;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ border: 1px solid;
+ text-transform: capitalize;
+}
+.users-table .ant-tag-success {
+ background: rgba(34, 197, 94, 0.16) !important;
+ border-color: rgba(34, 197, 94, 0.55) !important;
+ color: #4ade80 !important;
+}
+.users-table .ant-tag-error {
+ background: rgba(239, 68, 68, 0.16) !important;
+ border-color: rgba(239, 68, 68, 0.55) !important;
+ color: #f87171 !important;
+}
+.users-table .ant-tag-warning {
+ background: rgba(245, 158, 11, 0.16) !important;
+ border-color: rgba(245, 158, 11, 0.55) !important;
+ color: #fbbf24 !important;
+}
+.users-table .ant-tag-default {
+ background: rgba(148, 163, 184, 0.16) !important;
+ border-color: rgba(148, 163, 184, 0.45) !important;
+ color: #94a3b8 !important;
+}
+.users-table .ant-tag-success::before,
+.users-table .ant-tag-error::before,
+.users-table .ant-tag-warning::before {
+ content: '';
+ display: inline-block;
+ width: 7px;
+ height: 7px;
border-radius: 50%;
+ margin-right: 7px;
+ vertical-align: middle;
+ box-shadow: 0 0 8px currentColor;
}
-
-/*********************RECORDINGS********************/
-.recording-formats .icon-bbbeasy-playback-presentation,
-.recording-formats .icon-bbbeasy-playback-podcast,
-.recording-formats .anticon-desktop,
-.recording-formats .icon-bbbeasy-activity-reports {
- font-size: 17px;
+.users-table .ant-tag-success::before {
+ background: #4ade80;
}
-
-.recording-formats .icon-bbbeasy-mp4 {
- font-size: 24px;
+.users-table .ant-tag-error::before {
+ background: #f87171;
}
-
-.recording-formats .icon-desktop {
- height: 12px;
+.users-table .ant-tag-warning::before {
+ background: #fbbf24;
}
-
-.recording-formats .icon-disabled {
- color: var(--bbbeasy-medimum-gray) !important;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-modal-footer .cancel-btn {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
}
-
-.share-modal {
- padding: 0 30px !important;
- text-align: center !important;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) .ant-modal-footer .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
}
-
-.share-modal .modal-content {
- width: 80% !important;
+.ant-modal-root:has(.ant-modal.preset-settings-modal) > .ant-modal-mask {
+ background-color: rgba(2, 6, 23, 0.55) !important;
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
}
-
-.share-modal .recording-formats .anticon:not(.icon-disabled) .icon-bbbeasy-playback-presentation,
-.share-modal .recording-formats .anticon:not(.icon-disabled) .icon-bbbeasy-playback-podcast,
-.share-modal .recording-formats .anticon-desktop:not(.icon-disabled),
-.share-modal .recording-formats .anticon:not(.icon-disabled) .icon-bbbeasy-activity-reports {
- font-size: 25px;
+/*****************ROLES PAGE - BLUE DESIGN*****************/
+.roles-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
}
-.share-modal .recording-formats .icon-disabled .icon-bbbeasy-playback-presentation,
-.share-modal .recording-formats .icon-disabled .icon-bbbeasy-playback-podcast,
-.share-modal .recording-formats .anticon-desktop.icon-disabled,
-.share-modal .recording-formats .icon-disabled .icon-bbbeasy-activity-reports {
- font-size: 22px;
+.roles-search-input input,
+.roles-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.roles-search-input .ant-input-clear-icon,
+.roles-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.roles-table .ant-table {
+ background: transparent;
+ border-radius: 14px;
+ overflow: hidden;
+ box-shadow: 0 10px 34px rgba(37, 99, 235, 0.22);
+}
+.roles-table .ant-table-container {
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+}
+.roles-table .ant-table-thead > tr > th {
+ background: linear-gradient(135deg, #172554 0%, #1d4ed8 100%) !important;
+ color: #ffffff !important;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.35) !important;
+}
+.roles-table .ant-table-thead > tr > th .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.45);
+}
+.roles-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter {
+ color: rgba(255, 255, 255, 0.9);
+}
+.roles-table .ant-table-thead > tr > th .ant-table-filter-trigger {
+ color: rgba(255, 255, 255, 0.65);
+}
+.roles-table .ant-table-thead > tr > th .ant-table-filter-trigger:hover {
+ color: #ffffff;
+}
+.roles-table .ant-table-thead > tr > th .ant-table-filter-trigger.active {
+ color: #fbbc0b;
+}
+.roles-table .ant-table-tbody > tr > td {
+ background: #0d1b33 !important;
+ color: #cbd5e1 !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.roles-table .ant-table-tbody > tr.ant-table-row:nth-child(even) > td {
+ background: #0f1f3d !important;
+}
+.roles-table .ant-table-tbody > tr.ant-table-row:hover > td,
+.roles-table .ant-table-tbody > tr.ant-table-row:hover > td.ant-table-cell-row-hover,
+.roles-table .ant-table-tbody > tr > td.ant-table-cell-row-hover {
+ background: rgba(37, 99, 235, 0.24) !important;
+}
+.roles-table .ant-table-tbody > tr.ant-table-placeholder > td {
+ background: #0d1b33 !important;
+}
+.roles-table .ant-table-placeholder .ant-empty-description {
+ color: #94a3b8;
+}
+.roles-table a.edit-button-color,
+.roles-table .table-actions a {
+ color: #93c5fd !important;
+}
+.roles-table .table-actions a.permissions-link:hover {
+ color: #fbbc0b !important;
+}
+.roles-table a.delete-button-color:hover {
+ color: #ff4d4f !important;
+}
+.roles-table .ant-input {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.roles-table .ant-input::placeholder {
+ color: #64748b !important;
+}
+.roles-table .ant-pagination .ant-pagination-item,
+.roles-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.roles-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ background: transparent !important;
+ border-color: rgba(96, 165, 250, 0.35) !important;
+}
+.roles-table .ant-pagination .ant-pagination-item a {
+ color: #93c5fd !important;
+}
+.roles-table .ant-pagination .ant-pagination-prev .ant-pagination-item-link,
+.roles-table .ant-pagination .ant-pagination-next .ant-pagination-item-link {
+ color: #93c5fd !important;
+}
+.roles-table .ant-pagination .ant-pagination-item-active {
+ background: #1d4ed8 !important;
+ border-color: #1d4ed8 !important;
+}
+.roles-table .ant-pagination .ant-pagination-item-active a {
+ color: #ffffff !important;
+}
+.roles-table .ant-table-cell mark {
+ background-color: #ffcf33;
+ color: #1e293b;
+}
+/* Expanded permissions panel */
+.roles-table .ant-table-expanded-row > td {
+ background: #0d1b33 !important;
+}
+.roles-table .ant-table-expanded-row .bordered-card {
+ background: transparent;
+ border: none;
+ border-radius: 0;
+}
+.roles-table .ant-table-expanded-row .ant-card,
+.roles-add-modal .bordered-card .ant-card {
+ background: #0f1f3d !important;
+ border: 1px solid rgba(96, 165, 250, 0.22) !important;
+ border-radius: 10px !important;
+ margin-bottom: 10px !important;
+}
+.roles-table .ant-table-expanded-row .ant-card-head,
+.roles-add-modal .bordered-card .ant-card-head {
+ background: transparent !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.18) !important;
+}
+.roles-table .ant-table-expanded-row .ant-card-head-title,
+.roles-add-modal .bordered-card .ant-card-head-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled),
+.roles-add-modal .bordered-card .ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled) {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-wrapper.ant-checkbox-wrapper-disabled,
+.roles-add-modal .bordered-card .ant-checkbox-wrapper.ant-checkbox-wrapper-disabled {
+ color: rgba(148, 163, 184, 0.45) !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-wrapper .ant-checkbox-label,
+.roles-add-modal .bordered-card .ant-checkbox-wrapper .ant-checkbox-label {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-wrapper.ant-checkbox-wrapper-disabled .ant-checkbox-label,
+.roles-add-modal .bordered-card .ant-checkbox-wrapper.ant-checkbox-wrapper-disabled .ant-checkbox-label {
+ color: rgba(148, 163, 184, 0.45) !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-inner,
+.roles-add-modal .bordered-card .ant-checkbox-inner {
+ background-color: #1e293b !important;
+ border-color: rgba(148, 163, 184, 0.6) !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-wrapper:hover .ant-checkbox-inner,
+.roles-add-modal .bordered-card .ant-checkbox-wrapper:hover .ant-checkbox-inner {
+ border-color: rgba(148, 163, 184, 0.9) !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-checked .ant-checkbox-inner,
+.roles-add-modal .bordered-card .ant-checkbox-checked .ant-checkbox-inner {
+ background-color: #2563eb !important;
+ border-color: #2563eb !important;
+}
+.roles-table .ant-table-expanded-row .ant-checkbox-checked .ant-checkbox-inner::after,
+.roles-add-modal .bordered-card .ant-checkbox-checked .ant-checkbox-inner::after {
+ border-color: #ffffff !important;
+}
+.roles-table .ant-table-expanded-row .actions-expanded .cell-input-cancel {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
+}
+.roles-table .ant-table-expanded-row .actions-expanded .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+}
+/* New Role modal - blue design (same as other add modals) */
+.roles-add-modal .ant-modal-content {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 14px 44px rgba(37, 99, 235, 0.28);
+}
+.roles-add-modal .ant-modal-header {
+ background: transparent !important;
+ border-bottom: 1px solid rgba(96, 165, 250, 0.14) !important;
+}
+.roles-add-modal .ant-modal-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.roles-add-modal .ant-modal-close {
+ color: #93c5fd !important;
+}
+.roles-add-modal .ant-modal-close:hover {
+ color: #fbbc0b !important;
+}
+.roles-add-modal .ant-form-item-label label {
+ color: #cbd5e1 !important;
+}
+.roles-add-modal .ant-input {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
+}
+.roles-add-modal .ant-input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.roles-add-modal .cancel-btn {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
+}
+.roles-add-modal .cancel-btn:hover,
+.roles-add-modal .cancel-btn:focus {
+ background: rgba(71, 85, 105, 0.6) !important;
+ color: #ffffff !important;
+}
+.roles-add-modal .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
+}
+.roles-add-modal .ant-btn-primary:hover,
+.roles-add-modal .ant-btn-primary:focus {
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
+ border-color: #3b82f6 !important;
+}
+.roles-add-modal .ant-form-item-label > label {
+ color: #cbd5e1 !important;
+}
+/* Blurred dark mask behind the New Role modal */
+.ant-modal-root:has(.ant-modal.roles-add-modal) > .ant-modal-mask {
+ background-color: rgba(2, 6, 23, 0.55) !important;
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+}
+/*****************ADMINISTRATION PAGE - BLUE DESIGN*****************/
+.administration-page-header .ant-page-header-heading-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.administration-search-input input,
+.administration-search-input input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
+ -webkit-text-fill-color: rgba(148, 163, 184, 0.9);
+}
+.administration-search-input .ant-input-clear-icon,
+.administration-search-input .anticon-search {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.administration-page .step1 {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.35) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 18px 45px rgba(2, 6, 23, 0.55), inset 0 0 0 1px rgba(96, 165, 250, 0.08) !important;
+}
+.administration-page .ant-form-item-label label {
+ color: #ffffff !important;
+ font-weight: 500;
+}
+.administration-page .ant-switch {
+ background: #0f1f3d !important;
+ border: 1px solid rgba(96, 165, 250, 0.4) !important;
+}
+.administration-page .ant-switch-checked {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.35);
+}
+.administration-page .ant-switch .ant-switch-handle::before,
+.administration-page .ant-switch-checked .ant-switch-handle::before {
+ background-color: #ffffff !important;
+}
+.administration-page #submit-btn {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ color: #ffffff !important;
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
+}
+.administration-page #submit-btn:hover,
+.administration-page #submit-btn:focus {
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
+ border-color: #3b82f6 !important;
+ color: #ffffff !important;
+}
+/*****************PRESETS EDIT POPUP - BLUE DESIGN*****************/
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-modal-content {
+ background: linear-gradient(145deg, #10203f 0%, #0d1b33 100%) !important;
+ border: 1px solid rgba(96, 165, 250, 0.25) !important;
+ border-radius: 14px !important;
+ box-shadow: 0 14px 44px rgba(37, 99, 235, 0.28);
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-modal-header {
+ background: transparent !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-modal-title {
+ color: #ffffff !important;
+ font-weight: 600;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-modal-close {
+ color: rgba(148, 163, 184, 0.9) !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) label {
+ color: #ffffff !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-switch {
+ background: #0f1f3d !important;
+ border: 1px solid rgba(96, 165, 250, 0.4) !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-switch-checked {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.35);
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-switch .ant-switch-handle::before,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-switch-checked .ant-switch-handle::before {
+ background-color: #ffffff !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input-number,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-select .ant-select-selector {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #e2e8f0 !important;
}
-
-.share-modal .recording-formats .icon-bbbeasy-mp4 {
- font-size: 29px;
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input::placeholder,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input-number-input::placeholder {
+ color: rgba(148, 163, 184, 0.9) !important;
}
-
-.share-modal .recording-formats .icon-disabled .icon-bbbeasy-mp4 {
- font-size: 26px;
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-select .ant-select-selector .ant-select-selection-item,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input-number-input {
+ color: #e2e8f0 !important;
}
-
-.share-modal .recording-formats .icon-desktop:not(.disabled) {
- height: 23px;
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-select .ant-select-arrow {
+ color: #93c5fd !important;
}
-
-.share-modal .recording-formats .icon-desktop.disabled {
- height: 20px;
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input-number .ant-input-number-handler-wrap {
+ background: #0f1f3d !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
}
-
-.share-modal .bbbeasy-btn .ant-avatar-string {
- position: unset !important;
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input-number-handler-up-inner,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-input-number-handler-down-inner {
+ color: #93c5fd !important;
}
-
-.share-modal .bbbeasy-btn:not(:hover) .bbbeasy-white-btn {
- -webkit-clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .input-status-presets {
+ background: transparent !important;
+ border: transparent !important;
+ color: #cbd5e1 !important;
+ width: 50px;
}
-
-.profile-form .ant-image .ant-image-img {
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .space-presets-border {
+ background: #0b1526 !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .ant-upload button {
+ background: #0f1f3d !important;
+ border-color: rgba(96, 165, 250, 0.4) !important;
+ color: #cbd5e1 !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .button-container .cancel-btn {
+ background: rgba(71, 85, 105, 0.4) !important;
+ border-color: rgba(96, 165, 250, 0.25) !important;
+ color: #cbd5e1 !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .button-container .cancel-btn:hover,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .button-container .cancel-btn:focus {
+ background: rgba(71, 85, 105, 0.6) !important;
+ color: #ffffff !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .button-container .ant-btn-primary {
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%) !important;
+ border-color: #2563eb !important;
+ box-shadow: 0 6px 18px rgba(37, 99, 235, 0.35);
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .button-container .ant-btn-primary:hover,
+.ant-modal-root:has(.ant-modal.presets-edit-modal) .button-container .ant-btn-primary:focus {
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
+ border-color: #3b82f6 !important;
+}
+.ant-modal-root:has(.ant-modal.presets-edit-modal) > .ant-modal-mask {
+ background-color: rgba(2, 6, 23, 0.55) !important;
+ -webkit-backdrop-filter: blur(5px);
+ backdrop-filter: blur(5px);
+}
+/*****************LANDING PAGE - SALLE MOCKUP (v2)*****************/
+.landing-shell .bbb-classroom-widget {
+ perspective: 1400px;
+}
+.landing-shell .salle-mockup {
+ position: relative;
width: 100%;
+ height: 100%;
+ background: linear-gradient(180deg, #111830 0%, #0d1224 100%);
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ border-radius: 20px;
+ padding: 16px;
+ box-shadow: 0 40px 80px -30px rgba(0, 0, 0, 0.7), inset 0 0 0 1px rgba(255, 255, 255, 0.02);
+ transition: transform 0.35s cubic-bezier(0.2, 0.8, 0.2, 1);
+ transform-style: preserve-3d;
+ overflow: hidden;
}
-
-.profile-form .ant-image .ant-image-mask {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
+.landing-shell .salle-topbar {
display: flex;
align-items: center;
- justify-content: center;
- color: #fff;
- background: rgba(0, 0, 0, 0.5);
- cursor: pointer;
- opacity: 0;
- transition: opacity 0.3s;
+ justify-content: space-between;
+ gap: 12px;
+ margin-bottom: 14px;
}
-
-.profile-form .ant-image .ant-image-mask:hover {
- opacity: 1;
+.landing-shell .salle-room-pill {
+ display: inline-flex;
+ align-items: center;
+ gap: 7px;
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 12px;
+ color: #5ec8ff;
+ background: rgba(94, 200, 255, 0.08);
+ border: 1px solid rgba(94, 200, 255, 0.18);
+ padding: 6px 12px;
+ border-radius: 100px;
+ white-space: nowrap;
+}
+.landing-shell .salle-live-dot {
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ background: #5ec8ff;
+ animation: sallePulseDot 2s ease-out infinite;
}
-
-.delete-button-color {
- color: #ff4d4f !important;
+@keyframes sallePulseDot {
+ 0% { box-shadow: 0 0 0 0 rgba(94, 200, 255, 0.5); }
+ 70% { box-shadow: 0 0 0 7px rgba(94, 200, 255, 0); }
+ 100% { box-shadow: 0 0 0 0 rgba(94, 200, 255, 0); }
}
-.edit-button-color {
- color: var(--bbbeasy-medimum-gray) !important;
+.landing-shell .salle-audio-pill {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ font-size: 12px;
+ color: #8a93b3;
+ background: #161e3a;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ padding: 6px 12px;
+ border-radius: 100px;
+ white-space: nowrap;
+}
+.landing-shell .salle-eq {
+ display: flex;
+ align-items: flex-end;
+ gap: 2px;
+ height: 11px;
}
-.edit-button-color:hover {
- color: #fbbc0b !important;
+.landing-shell .salle-eq i {
+ width: 2.5px;
+ background: #2fb673;
+ border-radius: 2px;
+ animation: salleEqBounce 1.1s ease-in-out infinite;
+}
+.landing-shell .salle-eq i:nth-child(1) { height: 40%; animation-delay: 0s; }
+.landing-shell .salle-eq i:nth-child(2) { height: 100%; animation-delay: 0.15s; }
+.landing-shell .salle-eq i:nth-child(3) { height: 65%; animation-delay: 0.3s; }
+.landing-shell .salle-eq i:nth-child(4) { height: 85%; animation-delay: 0.45s; }
+@keyframes salleEqBounce {
+ 0%, 100% { transform: scaleY(0.35); }
+ 50% { transform: scaleY(1); }
+}
+.landing-shell .salle-body {
+ display: grid;
+ grid-template-columns: 148px minmax(0, 1fr) 122px;
+ gap: 12px;
+ height: calc(100% - 80px);
+}
+.landing-shell .salle-side-label {
+ font-family: 'JetBrains Mono', monospace;
+ font-size: 9px;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ color: #5c6488;
+ margin: 0 0 6px 2px;
}
-.ant-alert-content {
- margin-right: 5px;
+.landing-shell .salle-side {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ min-width: 0;
}
-.ant-input-number-rtl {
- padding-right: 20px !important;
+.landing-shell .salle-side .salle-side-label:not(:first-child) {
+ margin-top: 8px;
}
-.space-color-picker {
- color: rgba(0, 0, 0, 0.25);
-
- opacity: 1;
-
- width: 200px;
-
- background-color: #ffffff;
- background-image: none;
- border-width: 1px;
- border-style: solid;
- border-color: #dddfe1;
- border-radius: 6px;
- padding: 4px 11px;
+.landing-shell .salle-tile {
+ background: #161e3a;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ border-radius: 12px;
+ padding: 12px 8px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 8px;
+ position: relative;
}
-
-#administration_form {
- padding: 50px 30px !important;
+.landing-shell .salle-avatar {
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ display: grid;
+ place-items: center;
+ font-family: 'Sora', sans-serif;
+ font-weight: 700;
+ font-size: 13px;
+ color: #fff;
+ position: relative;
+ animation: salleFloatY 4.5s ease-in-out infinite;
+}
+.landing-shell .salle-avatar-lg { width: 48px; height: 48px; font-size: 17px; }
+.landing-shell .salle-avatar-instructor { background: linear-gradient(160deg, #f0507a, #c23a5f); box-shadow: 0 0 0 2px rgba(239, 77, 134, 0.25); }
+.landing-shell .salle-avatar-j { background: linear-gradient(160deg, #f5a941, #c97e1f); }
+.landing-shell .salle-avatar-a { background: linear-gradient(160deg, #2fb673, #1c8354); }
+.landing-shell .salle-avatar-b { background: linear-gradient(160deg, #ef4d86, #c22f65); }
+.landing-shell .salle-avatar-c { background: linear-gradient(160deg, #ef4444, #b12f2f); }
+.landing-shell .salle-avatar-ta { background: #111830; border: 2px solid #8b7bff; color: #8b7bff; }
+@keyframes salleFloatY {
+ 0%, 100% { transform: translateY(0); }
+ 50% { transform: translateY(-4px); }
+}
+.landing-shell .salle-tile-name {
+ font-size: 10px;
+ color: #8a93b3;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ white-space: nowrap;
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
-#administration_form .ant-col {
- text-align: right;
+.landing-shell .salle-mic-dot {
+ width: 11px;
+ height: 11px;
+ border-radius: 50%;
+ background: #ef4444;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
}
-#administration_form .ant-col-rtl {
- text-align: left !important;
+.landing-shell .salle-mic-dot::before {
+ content: '';
+ width: 4px;
+ height: 4px;
+ border-radius: 1px;
+ background: #fff;
}
-.loading {
- margin-left: 50% !important;
+.landing-shell .salle-raise-badge {
+ position: absolute;
+ top: -5px;
+ right: -5px;
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ background: #f5a941;
+ display: grid;
+ place-items: center;
+ box-shadow: 0 0 0 3px #161e3a;
+ animation: salleBadgePulse 2.2s ease-in-out infinite;
+ z-index: 2;
}
-#administration_form #submit-btn {
- margin-top: 25px;
+.landing-shell .salle-raise-badge svg {
+ width: 10px;
+ height: 10px;
+ color: #0d1224;
}
-
-.ant-upload-list-item {
- width: 80% !important;
+@keyframes salleBadgePulse {
+ 0%, 100% { transform: scale(1); }
+ 50% { transform: scale(1.15); }
}
-.ant-upload-drag {
- width: 80% !important;
+.landing-shell .salle-center {
+ min-width: 0;
+ display: flex;
+ flex-direction: column;
}
-.space-color-picker-branding {
- color: rgba(0, 0, 0, 0.25);
-
- opacity: 1;
-
- width: 150px;
-
- background-color: #ffffff;
- background-image: none;
- border-width: 1px;
- border-style: solid;
- border-color: #dddfe1;
- border-radius: 6px;
- padding: 4px 11px;
+.landing-shell .salle-tabs {
+ display: flex;
+ gap: 5px;
+ background: #161e3a;
+ padding: 4px;
+ border-radius: 10px;
+ margin-bottom: 10px;
}
-
-.code-color-picker-edit-label {
+.landing-shell .salle-tab {
+ flex: 1;
+ text-align: center;
+ font-size: 10.5px;
+ font-family: 'Inter', sans-serif;
+ color: #8a93b3;
+ padding: 7px 4px;
+ border-radius: 7px;
+ border: none;
background: transparent;
- border-radius: 3px;
- width: 90px;
+ user-select: none;
}
-
-.input-status-presets {
+.landing-shell .salle-tab.active {
+ background: #5ec8ff;
+ color: #04101c;
+ font-weight: 600;
+}
+.landing-shell .salle-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 8px;
+ flex: 1;
+}
+.landing-shell .salle-grid .salle-tile {
+ padding: 10px 6px;
+}
+.landing-shell .salle-add-tile {
+ border: 1.5px dashed rgba(255, 255, 255, 0.08);
background: transparent;
- border: transparent;
- width: 50px;
+ display: grid;
+ place-items: center;
+ color: #5c6488;
+ font-size: 18px;
+ min-height: 74px;
}
-
-.space-color-picker-add-label {
- position: relative;
- display: inline-flex;
- width: 95% !important;
+.landing-shell .salle-right {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 10px;
min-width: 0;
- padding: 4px 11px !important;
- color: rgba(0, 0, 0, 0.88);
- font-size: 14px;
- line-height: 1.8714285714285714;
- background-color: #ffffff;
- background-image: none;
- border-width: 1px;
- border-style: solid;
- border-color: #d9d9d9;
- border-radius: 6px;
- transition: all 0.2s;
- opacity: 1;
}
-
-.space-presets-border {
- border: 1px solid #999;
-
- display: inline-block;
-
- border-radius: 2px;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- width: 20px;
- height: 20px;
+.landing-shell .salle-raise-hub {
+ width: 100%;
+ background: #161e3a;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ border-radius: 12px;
+ padding: 14px 6px 12px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 6px;
+}
+.landing-shell .salle-ring-wrap {
+ position: relative;
+ width: 46px;
+ height: 46px;
+ display: grid;
+ place-items: center;
+}
+.landing-shell .salle-ring {
+ position: absolute;
+ inset: 0;
+ border-radius: 50%;
+ border: 1.5px solid #f5a941;
+ animation: salleRingPulse 2.4s ease-out infinite;
+ opacity: 0;
+}
+.landing-shell .salle-ring:nth-child(2) {
+ animation-delay: 0.8s;
+}
+@keyframes salleRingPulse {
+ 0% { transform: scale(0.7); opacity: 0.55; }
+ 100% { transform: scale(1.7); opacity: 0; }
+}
+.landing-shell .salle-hand {
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ background: radial-gradient(circle at 35% 30%, #ffcf80, #f5a941);
+ display: grid;
+ place-items: center;
+ box-shadow: 0 0 18px rgba(245, 169, 65, 0.5);
+ z-index: 1;
+}
+.landing-shell .salle-hand svg {
+ width: 16px;
+ height: 16px;
+ color: #0d1224;
+}
+.landing-shell .salle-raise-count {
+ font-size: 9.5px;
+ color: #8a93b3;
+ font-family: 'JetBrains Mono', monospace;
+}
+.landing-shell .salle-icon-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 6px;
+ width: 100%;
+}
+.landing-shell .salle-icon-btn {
+ aspect-ratio: 1;
+ background: #161e3a;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ border-radius: 9px;
+ display: grid;
+ place-items: center;
+ font-size: 13px;
+ color: #8a93b3;
cursor: pointer;
- box-shadow: 0 0 0 2px #fff inset;
+ padding: 0;
+ transition: color 0.2s, border-color 0.2s;
}
-.input-editable .ant-input-suffix .cell-input-cancel-record {
- width: 100% !important;
- height: 100% !important;
+.landing-shell .salle-icon-btn svg {
+ width: 14px;
+ height: 14px;
}
-.input-editable .ant-input-suffix .cell-input-save-record {
- width: 100% !important;
- height: 100% !important;
+.landing-shell .salle-icon-btn:hover {
+ color: #eef1fb;
+ border-color: rgba(94, 200, 255, 0.4);
}
-.room-details .disableStart {
- font-size: 20px !important;
+.landing-shell .salle-mode {
+ width: 100%;
+ text-align: center;
+ font-size: 9.5px;
+ color: #5c6488;
+ padding: 8px 4px;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ border-radius: 9px;
+ line-height: 1.5;
+}
+.landing-shell .salle-mode b {
+ display: block;
+ color: #eef1fb;
+ font-size: 10.5px;
font-weight: 600;
- clip-path: polygon(48% 0, 52% 0, 95% 25%, 95% 75%, 52% 100%, 48% 100%, 5% 75%, 5% 25%);
- border-radius: 50%;
- background-color: #d4d4d4 !important;
- cursor: not-allowed;
}
-.edit-room-form {
- display: block !important;
+.landing-shell .salle-bottom {
+ display: flex;
+ gap: 6px;
}
-.room-title {
- max-width: 150px !important;
- overflow: hidden;
- text-overflow: ellipsis;
+.landing-shell .salle-round {
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ background: #161e3a;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ display: grid;
+ place-items: center;
+ font-size: 12px;
+ color: #8a93b3;
}
-.room-labels {
- word-break: break-all;
- max-width: max-content !important;
- overflow: hidden;
- text-overflow: unset;
- max-height: 24px;
+.landing-shell .salle-round svg {
+ width: 12px;
+ height: 12px;
}
-.room-label {
- max-width: 120px !important;
- overflow: hidden;
- text-overflow: ellipsis;
+.landing-shell .salle-round.warn {
+ background: rgba(239, 68, 68, 0.15);
+ border-color: rgba(239, 68, 68, 0.3);
+ color: #ef4444;
}
-div.error-message-Label {
- max-width: max-content;
- margin-bottom: 10px;
- margin-left: 10px;
+.landing-shell .salle-encryption {
+ position: absolute;
+ left: 24px;
+ bottom: -18px;
+ display: inline-flex;
+ align-items: center;
+ gap: 7px;
+ background: #0d1224;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ padding: 9px 16px;
+ border-radius: 100px;
+ font-size: 11.5px;
+ color: #8a93b3;
+ white-space: nowrap;
+ box-shadow: 0 20px 40px -20px rgba(0, 0, 0, 0.6);
+ z-index: 3;
+}
+.landing-shell .salle-encryption svg {
+ width: 12px;
+ height: 12px;
+ color: #5ec8ff;
}
-.preset-name {
- max-width: 120px !important;
- overflow: hidden;
- text-overflow: ellipsis;
+@media (max-width: 991px) {
+ .landing-shell .salle-body {
+ grid-template-columns: 1fr;
+ }
+ .landing-shell .salle-side,
+ .landing-shell .salle-right {
+ display: none;
+ }
}
-.ant-table-cell {
- max-width: 150px !important;
+@media (prefers-reduced-motion: reduce) {
+ .landing-shell .salle-mockup *,
+ .landing-shell .salle-encryption * {
+ animation: none !important;
+ transition: none !important;
+ }
}
diff --git a/bbbeasy-frontend/src/App.tsx b/bbbeasy-frontend/src/App.tsx
index 009d3c00..2deaae3c 100644
--- a/bbbeasy-frontend/src/App.tsx
+++ b/bbbeasy-frontend/src/App.tsx
@@ -53,9 +53,10 @@ interface IProps {
}
const App: React.FC = ({ routes, isSider, logs }) => {
- const [currentUser, setCurrentUser] = React.useState(null);
- const [currentSession, setCurrentSession] = React.useState(null);
- const [isLogged, setIsLogged] = React.useState(false);
+ const [currentUser, setCurrentUser] = React.useState(() => AuthService.getCurrentUser());
+ const [currentSession, setCurrentSession] = React.useState(() => AuthService.getCurrentSession());
+ const [isLogged, setIsLogged] = React.useState(() => Boolean(AuthService.getCurrentUser() && AuthService.getCurrentSession()));
+ const isAuthenticated = Boolean(AuthService.getCurrentUser() && AuthService.getCurrentSession());
const [dataRooms, setDataRooms] = React.useState([]);
const [dataLabels, setDataLabels] = React.useState([]);
@@ -70,6 +71,7 @@ const App: React.FC = ({ routes, isSider, logs }) => {
() => ({ isLogged, setIsLogged, currentUser, setCurrentUser, currentSession, setCurrentSession }),
[isLogged, currentUser, currentSession]
);
+ const authViewKey = isLogged ? 'authenticated' : 'anonymous';
const customTheme = {
token: {
@@ -125,7 +127,7 @@ const App: React.FC = ({ routes, isSider, logs }) => {
setCurrentSession(session);
setIsLogged(true);
- const allowedGroups = Object.keys(user.permissions);
+ const allowedGroups = Object.keys(user.permissions ?? {});
if (allowedGroups.length > 0) {
if (AuthService.isAllowedGroup(allowedGroups, 'logs')) {
Logger.info(logs);
@@ -152,9 +154,9 @@ const App: React.FC = ({ routes, isSider, logs }) => {
direction={LocaleService.direction}
componentSize="large"
>
-
+
- {isLogged && isSider && }
+ {isAuthenticated && isSider && }
diff --git a/bbbeasy-frontend/src/components/AddLabelForm.tsx b/bbbeasy-frontend/src/components/AddLabelForm.tsx
index 93d1e481..a0682987 100644
--- a/bbbeasy-frontend/src/components/AddLabelForm.tsx
+++ b/bbbeasy-frontend/src/components/AddLabelForm.tsx
@@ -99,7 +99,7 @@ export const AddLabelForm = (props: Props) => {
<>
}
- className="add-modal"
+ className="add-modal label-add-modal"
centered
open={props.isModalShow}
onOk={handleAdd}
diff --git a/bbbeasy-frontend/src/components/AddPresetForm.tsx b/bbbeasy-frontend/src/components/AddPresetForm.tsx
index d345af17..1ee6c065 100644
--- a/bbbeasy-frontend/src/components/AddPresetForm.tsx
+++ b/bbbeasy-frontend/src/components/AddPresetForm.tsx
@@ -91,7 +91,7 @@ export const AddPresetForm = (props: Props) => {
<>
}
- className="add-modal"
+ className="add-modal preset-add-modal"
centered
open={props.isModalShow}
onOk={handleAdd}
diff --git a/bbbeasy-frontend/src/components/Administration.tsx b/bbbeasy-frontend/src/components/Administration.tsx
index db9cba27..20123416 100644
--- a/bbbeasy-frontend/src/components/Administration.tsx
+++ b/bbbeasy-frontend/src/components/Administration.tsx
@@ -102,9 +102,9 @@ export const Administration = () => {
) : (
<>
- } />
+ } />
-
+
-
-
- )}
+ }
+ />
+ ) : (
+ <>
+
+
+
+
+
+
+
+ {message && (
+ EN_US[elem] == message)} />
+ }
+ showIcon
+ />
+ )}
+
+
+ value
+ ? Promise.resolve()
+ : Promise.reject(new Error(t('accept-agreement'))),
+ },
+ ]}
+ >
+
+
+
+ {' '}
+
+ {' '}
+
+
+ {' '}
+
+
+
+
+
+
+
+
+
+ >
+ )}
+
+
);
};
diff --git a/bbbeasy-frontend/src/components/layout/AppHeader.tsx b/bbbeasy-frontend/src/components/layout/AppHeader.tsx
index 54b16275..6e0e70f1 100644
--- a/bbbeasy-frontend/src/components/layout/AppHeader.tsx
+++ b/bbbeasy-frontend/src/components/layout/AppHeader.tsx
@@ -76,20 +76,32 @@ const AppHeader = () => {
const location = useLocation();
const [searchForm] = Form.useForm();
const isRoomsSearch = location.pathname.includes('rooms');
+ const isRecordingsSearch = location.pathname.includes('recordings');
+ const isLabelsSearch = location.pathname.includes('labels');
+ const isPresetsSearch = location.pathname.includes('presets');
+ const isRoomDetailsSearch = location.pathname.startsWith('/r/');
+ const isBrandingSearch = location.pathname.includes('branding');
+ const isPresetSettingsSearch = location.pathname.includes('bigbluebutton');
+ const isUsersSearch = location.pathname.includes('users');
+ const isRolesSearch = location.pathname.includes('roles');
+ const isAdministrationSearch = location.pathname.includes('administration');
const [logo, setLogo] = React.useState('');
const isLoginPage = location.pathname.includes('login');
- if (isLoginPage) {
- setIsLogged(false);
- }
- settingsService
- .collect_settings()
- .then((response) => {
- const settings: SettingsType = response.data;
- setLogo(settings.logo);
- })
- .catch((error) => {
- console.log(error);
- });
+ const storedUser = AuthService.getCurrentUser();
+ const storedSession = AuthService.getCurrentSession();
+ const isAuthenticated = Boolean(storedUser && storedSession);
+
+ useEffect(() => {
+ settingsService
+ .collect_settings()
+ .then((response) => {
+ const settings: SettingsType = response.data;
+ setLogo(settings.logo);
+ })
+ .catch((error) => {
+ console.log(error);
+ });
+ }, []);
const logout = () => {
AuthService.logout()
.catch((error) => {
@@ -187,6 +199,7 @@ const AppHeader = () => {
);
+ const activeUser = currentUser ?? storedUser;
const menuProfile = {
items: [
{
@@ -194,9 +207,9 @@ const AppHeader = () => {
className: 'username-item',
label: (
<>
- {currentUser?.username}
+ {activeUser?.username}
- {currentUser?.email}
+ {activeUser?.email}
>
),
},
@@ -220,7 +233,7 @@ const AppHeader = () => {
return (
<>
- {!isLogged ? (
+ {!isAuthenticated || isLoginPage ? (
{
{
useEffect(() => {
const user: UserType = AuthService.getCurrentUser();
- const menuSider = MenuService.getMenuSider(user.permissions);
+ const menuSider = MenuService.getMenuSider(user?.permissions ?? {});
setMenuItems(menuSider.items);
setNewMenuItems(menuSider.news);
diff --git a/bbbeasy-frontend/src/lib/AxiosInstance.ts b/bbbeasy-frontend/src/lib/AxiosInstance.ts
index abdddf8d..628f4d13 100644
--- a/bbbeasy-frontend/src/lib/AxiosInstance.ts
+++ b/bbbeasy-frontend/src/lib/AxiosInstance.ts
@@ -17,30 +17,22 @@
*/
import axios, { AxiosRequestHeaders } from 'axios';
+import AuthService from '../services/auth.service';
export const axiosInstance = axios.create();
axiosInstance.interceptors.request.use((config) => {
try {
- const sessionStr = localStorage.getItem('session');
- if (sessionStr) {
- const session = JSON.parse(sessionStr);
- if (session?.expiresAt && Date.parse(session.expiresAt) < Date.now()) {
- localStorage.removeItem('user');
- localStorage.removeItem('session');
- return config;
- }
-
- if (session?.accessToken && session?.tokenType) {
- config.headers = (config.headers || {}) as AxiosRequestHeaders;
- Object.assign(config.headers, {
- Authorization: `${session.tokenType} ${session.accessToken}`,
- });
- }
+ const session = AuthService.getCurrentSession();
+ if (session?.accessToken) {
+ config.headers = (config.headers || {}) as AxiosRequestHeaders;
+ Object.assign(config.headers, {
+ Authorization: `${session.tokenType ?? 'Bearer'} ${session.accessToken}`,
+ });
}
} catch (error) {
- console.warn('Failed to process session from localStorage:', error);
- localStorage.removeItem('session');
+ console.warn('Failed to process auth state from localStorage:', error);
+ AuthService.clearAuth();
}
return config;
diff --git a/bbbeasy-frontend/src/locale/ar-TN.json b/bbbeasy-frontend/src/locale/ar-TN.json
index 83e00058..a7bdfe6e 100644
--- a/bbbeasy-frontend/src/locale/ar-TN.json
+++ b/bbbeasy-frontend/src/locale/ar-TN.json
@@ -66,6 +66,19 @@
"username-already-exist": "اسم المستخدم موجود مسبقا",
"email-already-exist": "البريد الإلكتروني موجود مسبقا",
"welcome-app": "مرحبا بعودتك",
+ "login-hero-tag": "مساحة عمل احترافية",
+ "login-hero-title-main": "كل ما تحتاجه.",
+ "login-hero-title-accent": "بكل بساطة.",
+ "login-hero-description": "مرحبًا بك في BBBEasy. سجّل الدخول للمتابعة إلى مساحة عملك وإدارة نشاطك في تجربة آمنة وواضحة وفعّالة.",
+ "login-hero-point-1": "وصول آمن",
+ "login-hero-point-2": "سير عمل بسيط",
+ "sign-up-hero-tag": "ابدأ الآن",
+ "sign-up-hero-title-main": "أنشئ",
+ "sign-up-hero-title-accent": "حساب BBBEasy",
+ "sign-up-hero-description": "أنشئ حسابك وابدأ باستخدام مساحة عمل آمنة وعصرية مصممة للتعاون بسرعة وسهولة.",
+ "sign-up-hero-point-1": "تسجيل سريع وبسيط",
+ "sign-up-hero-point-2": "وصول آمن إلى الحساب",
+ "sign-up-hero-point-3": "جاهز للاستعمال في ثوانٍ",
"welcome": "رسالة ترحيب",
"accept-agreement": "يجب قبول الاتفاق",
"agree": "أوافق على",
diff --git a/bbbeasy-frontend/src/locale/en-US.json b/bbbeasy-frontend/src/locale/en-US.json
index b5b2c410..fd49515b 100644
--- a/bbbeasy-frontend/src/locale/en-US.json
+++ b/bbbeasy-frontend/src/locale/en-US.json
@@ -66,6 +66,19 @@
"username-already-exist": "Username already exists",
"email-already-exist": "Email already exists",
"welcome-app": "Welcome back",
+ "login-hero-tag": "Professional workspace",
+ "login-hero-title-main": "Everything you need.",
+ "login-hero-title-accent": "Simply.",
+ "login-hero-description": "Welcome to BBBEasy. Sign in to continue to your workspace and manage your activity through a secure, clear and efficient experience.",
+ "login-hero-point-1": "Secure access",
+ "login-hero-point-2": "Simple workflow",
+ "sign-up-hero-tag": "Get started",
+ "sign-up-hero-title-main": "Create your",
+ "sign-up-hero-title-accent": "BBBEasy account.",
+ "sign-up-hero-description": "Set up your account and access a secure, modern workspace built for fast collaboration and simple onboarding.",
+ "sign-up-hero-point-1": "Quick and simple registration",
+ "sign-up-hero-point-2": "Secure account access",
+ "sign-up-hero-point-3": "Ready to use in seconds",
"welcome": "Welcome",
"accept-agreement": "Should accept agreement",
"agree": "I agree to the",
diff --git a/bbbeasy-frontend/src/locale/fr-FR.json b/bbbeasy-frontend/src/locale/fr-FR.json
index 7fffb4b2..ae365c72 100644
--- a/bbbeasy-frontend/src/locale/fr-FR.json
+++ b/bbbeasy-frontend/src/locale/fr-FR.json
@@ -67,6 +67,19 @@
"username-already-exist": "Ce nom d’utilisateur existe déjà",
"email-already-exist": "Cette adresse e-mail existe déjà",
"welcome-app": "Bon retour",
+ "login-hero-tag": "Espace professionnel",
+ "login-hero-title-main": "Tout ce qu'il vous faut.",
+ "login-hero-title-accent": "Simplement.",
+ "login-hero-description": "Bienvenue sur BBBEasy. Connectez-vous pour continuer vers votre espace de travail et gérer votre activité dans un environnement sécurisé, clair et efficace.",
+ "login-hero-point-1": "Accès sécurisé",
+ "login-hero-point-2": "Flux de travail simple",
+ "sign-up-hero-tag": "Commencer",
+ "sign-up-hero-title-main": "Créez votre",
+ "sign-up-hero-title-accent": "compte BBBEasy.",
+ "sign-up-hero-description": "Créez votre compte et accédez à un espace de travail sécurisé et moderne, pensé pour collaborer rapidement et commencer facilement.",
+ "sign-up-hero-point-1": "Inscription rapide et simple",
+ "sign-up-hero-point-2": "Accès sécurisé au compte",
+ "sign-up-hero-point-3": "Prêt à utiliser en quelques secondes",
"welcome": "Message de Bienvenue",
"accept-agreement": "Devrait accepter l'accord",
"agree": "J'accepte les",
diff --git a/bbbeasy-frontend/src/services/auth.service.ts b/bbbeasy-frontend/src/services/auth.service.ts
index 375e0065..17926b0e 100644
--- a/bbbeasy-frontend/src/services/auth.service.ts
+++ b/bbbeasy-frontend/src/services/auth.service.ts
@@ -21,7 +21,70 @@ import { apiRoutes } from '../routing/backend-config';
import { UserType } from '../types/UserType';
import { SessionType } from '../types/SessionType';
+type AuthState = {
+ user?: UserType;
+ session?: SessionType;
+};
+
class AuthService {
+ private readonly authStorageKey = 'auth';
+
+ private readStoredAuth(): AuthState {
+ const authStr = localStorage.getItem(this.authStorageKey);
+ if (authStr) {
+ try {
+ const authData = JSON.parse(authStr);
+ return authData && typeof authData === 'object' ? authData : {};
+ } catch {
+ localStorage.removeItem(this.authStorageKey);
+ }
+ }
+
+ return {};
+ }
+
+ private migrateLegacyAuth(): AuthState {
+ const legacyUserStr = localStorage.getItem('user');
+ const legacySessionStr = localStorage.getItem('session');
+ if (!legacyUserStr && !legacySessionStr) {
+ return {};
+ }
+
+ try {
+ const authState: AuthState = {
+ user: legacyUserStr ? (JSON.parse(legacyUserStr) as UserType) : undefined,
+ session: legacySessionStr ? (JSON.parse(legacySessionStr) as SessionType) : undefined,
+ };
+ localStorage.setItem(this.authStorageKey, JSON.stringify(authState));
+ localStorage.removeItem('user');
+ localStorage.removeItem('session');
+
+ return authState;
+ } catch {
+ localStorage.removeItem('user');
+ localStorage.removeItem('session');
+ return {};
+ }
+ }
+
+ private readAuth(): AuthState {
+ const storedAuth = this.readStoredAuth();
+ if (storedAuth.user || storedAuth.session) {
+ return storedAuth;
+ }
+
+ return this.migrateLegacyAuth();
+ }
+
+ private writeAuth(nextAuth: AuthState): void {
+ if (!nextAuth.user && !nextAuth.session) {
+ localStorage.removeItem(this.authStorageKey);
+ return;
+ }
+
+ localStorage.setItem(this.authStorageKey, JSON.stringify(nextAuth));
+ }
+
register(data: object) {
return axiosInstance.post(apiRoutes.REGISTER_URL, {
data,
@@ -61,57 +124,59 @@ class AuthService {
}
addCurrentUser(user: UserType) {
- localStorage.setItem('user', JSON.stringify(user));
+ const auth = this.readAuth();
+ this.writeAuth({
+ user,
+ session: auth.session,
+ });
}
addCurrentSession(session: SessionType) {
- localStorage.setItem('session', JSON.stringify(session));
+ const auth = this.readAuth();
+ this.writeAuth({
+ user: auth.user,
+ session,
+ });
}
- getCurrentUser() {
- const userStr: string = localStorage.getItem('user');
- if (userStr) {
- try {
- return JSON.parse(userStr);
- } catch {
- this.clearAuth();
- }
+ getCurrentUser(): UserType | null {
+ const auth = this.readAuth();
+ if (auth.user) {
+ return auth.user;
}
+
return null;
}
- getCurrentSession() {
- const sessionStr: string = localStorage.getItem('session');
- if (sessionStr) {
- try {
- const session: SessionType = JSON.parse(sessionStr);
- if (session.expiresAt && Date.parse(session.expiresAt) < Date.now()) {
- this.clearAuth();
- return null;
- }
-
- return session;
- } catch {
+ getCurrentSession(): SessionType | null {
+ const auth = this.readAuth();
+ if (auth.session) {
+ if (auth.session.expiresAt && Date.parse(auth.session.expiresAt) < Date.now()) {
this.clearAuth();
+ return null;
}
+
+ return auth.session;
}
+
return null;
}
getAccessToken(): string | null {
- const currentSession: SessionType = this.getCurrentSession();
+ const currentSession = this.getCurrentSession();
return currentSession ? currentSession.accessToken : null;
}
clearAuth() {
+ localStorage.removeItem(this.authStorageKey);
localStorage.removeItem('user');
localStorage.removeItem('session');
}
updateCurrentUser(username: string, email: string, avatar: string) {
- const userStr: string = localStorage.getItem('user');
- if (userStr) {
- const userObj: UserType = JSON.parse(userStr);
+ const auth = this.readAuth();
+ if (auth.user) {
+ const userObj: UserType = auth.user;
userObj.username = username;
userObj.email = email;
userObj.avatar = avatar;
@@ -121,8 +186,10 @@ class AuthService {
}
getActionsPermissionsByGroup(group: string): string[] {
- const currentUser: UserType = this.getCurrentUser();
- if (currentUser) return currentUser.permissions[group];
+ const currentUser = this.getCurrentUser();
+ if (currentUser?.permissions && currentUser.permissions[group]) {
+ return currentUser.permissions[group] as string[];
+ }
return [];
}
diff --git a/bbbeasy-frontend/src/services/menu.service.ts b/bbbeasy-frontend/src/services/menu.service.ts
index cbcb9de7..d331f4d1 100644
--- a/bbbeasy-frontend/src/services/menu.service.ts
+++ b/bbbeasy-frontend/src/services/menu.service.ts
@@ -111,7 +111,7 @@ const addSettings = (keys: string[], items: MenuType[]) => {
};
class MenuService {
- getMenuSider(userPermissions: object): MenuSiderType {
+ getMenuSider(userPermissions: Record = {}): MenuSiderType {
const items: MenuType[] = [];
const news: string[] = [];
let defaultRoute = '';
@@ -120,7 +120,7 @@ class MenuService {
const keys = Object.keys(userPermissions);
const addActionExist = (key: string) => {
- if (userPermissions[key].includes('add')) {
+ if (Array.isArray(userPermissions[key]) && userPermissions[key].includes('add')) {
news.push(key);
}
};
diff --git a/bbbeasy-frontend/vite.config.ts b/bbbeasy-frontend/vite.config.ts
index d9b90695..3e83f882 100644
--- a/bbbeasy-frontend/vite.config.ts
+++ b/bbbeasy-frontend/vite.config.ts
@@ -43,11 +43,11 @@ export default defineConfig(({ mode }) => {
sourcemap: env.GENERATE_SOURCEMAP !== 'false',
emptyOutDir: true,
},
- server: {
+ server: {
host: true,
port: 3300,
- strictPort: true,
- allowedHosts: ['bbbeasy.test', 'localhost', '127.0.0.1'],
+ strictPort: true,
+ allowedHosts: ['bbbeasy.test', 'localhost', '127.0.0.1',"snooper-foe-cosigner.ngrok-free.dev"],
open: env.NODE_ENV === 'development' ? 'http://bbbeasy.test/' : false,
proxy: {
'/api': {
diff --git a/vagrant/dev/nginx/bbbeasy.conf b/vagrant/dev/nginx/bbbeasy.conf
index 3486b74f..860e63ef 100644
--- a/vagrant/dev/nginx/bbbeasy.conf
+++ b/vagrant/dev/nginx/bbbeasy.conf
@@ -69,6 +69,7 @@ server {
fastcgi_index index.php;
fastcgi_read_timeout 60;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
+ fastcgi_param HTTP_AUTHORIZATION $http_authorization;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
access_log /var/log/nginx/bbbeasy-backend-access.log;
@@ -124,8 +125,8 @@ server {
proxy_read_timeout 300s;
}
- # Deny access to dot-files.
- location ~ /\. {
+ # Deny access to dot-files, except the Vite/Yarn PnP virtual folders needed by dev mode.
+ location ~ /\.(?!yarn/|vite/) {
deny all;
access_log off;
log_not_found off;