diff --git a/.gitignore b/.gitignore
index d77fabab..0ea92227 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,7 @@
data/logs.json
+data/avatar/*
+!data/avatar/avt.default
+!data/avatar/*.php
.cache
# Byte-compiled / optimized / DLL files
diff --git a/api/config.php b/api/config.php
index 6ebe3ca2..780d63c0 100644
--- a/api/config.php
+++ b/api/config.php
@@ -84,49 +84,20 @@ function setting(String $key, &$target, $type) {
setting("app_description" , $rawConfig["app"]["description"] , $TYPE_STRING);
setting("uploadDir" , $rawConfig["uploadDir"] , $TYPE_STRING);
setting("time_zone" , $rawConfig["time"]["zone"] , $TYPE_STRING);
- setting("time_begin_seconds" , $rawConfig["time"]["begin"]["seconds"] , $TYPE_NUMBER);
- setting("time_begin_minutes" , $rawConfig["time"]["begin"]["minutes"] , $TYPE_NUMBER);
- setting("time_begin_hours" , $rawConfig["time"]["begin"]["hours"] , $TYPE_NUMBER);
- setting("time_begin_days" , $rawConfig["time"]["begin"]["days"] , $TYPE_NUMBER);
- setting("time_begin_months" , $rawConfig["time"]["begin"]["months"] , $TYPE_NUMBER);
- setting("time_begin_years" , $rawConfig["time"]["begin"]["years"] , $TYPE_NUMBER);
- setting("time_during" , $rawConfig["time"]["during"] , $TYPE_NUMBER);
- setting("time_offset" , $rawConfig["time"]["offset"] , $TYPE_NUMBER);
setting("pageTitle" , $rawConfig["pageTitle"] , $TYPE_STRING);
- setting("publish" , $rawConfig["publish"] , $TYPE_BOOL );
- setting("submit" , $rawConfig["submit"] , $TYPE_BOOL );
- setting("submitInProblems" , $rawConfig["submitInProblems"] , $TYPE_BOOL );
setting("allowRegister" , $rawConfig["allowRegister"] , $TYPE_BOOL );
setting("edit_name" , $rawConfig["edit"]["name"] , $TYPE_BOOL );
setting("edit_password" , $rawConfig["edit"]["password"] , $TYPE_BOOL );
setting("edit_avatar" , $rawConfig["edit"]["avatar"] , $TYPE_BOOL );
- setting("viewRank" , $rawConfig["viewRank"] , $TYPE_BOOL );
- setting("viewRankTask" , $rawConfig["viewRankTask"] , $TYPE_BOOL );
- setting("viewRankHideDisabled" , $rawConfig["viewRankHideDisabled"] , $TYPE_BOOL );
- setting("viewLog" , $rawConfig["viewLog"] , $TYPE_BOOL );
- setting("viewLogOther" , $rawConfig["viewLogOther"] , $TYPE_BOOL );
- setting("publicProblems" , $rawConfig["publicProblems"] , $TYPE_BOOL );
setting("clientConfig_sounds" , $rawConfig["clientConfig"]["sounds"] , $TYPE_BOOL );
setting("clientConfig_nightmode" , $rawConfig["clientConfig"]["nightmode"] , $TYPE_BOOL );
setting("clientConfig_showMs" , $rawConfig["clientConfig"]["showMs"] , $TYPE_BOOL );
setting("clientConfig_transition" , $rawConfig["clientConfig"]["transition"] , $TYPE_BOOL );
- setting("clientConfig_dialogProblem", $rawConfig["clientConfig"]["dialogProblem"] , $TYPE_BOOL );
- setting("clientConfig_rankUpdate" , $rawConfig["clientConfig"]["rankUpdate"] , $TYPE_BOOL );
- setting("clientConfig_logsUpdate" , $rawConfig["clientConfig"]["logsUpdate"] , $TYPE_BOOL );
- setting("clientConfig_updateDelay" , $rawConfig["clientConfig"]["updateDelay"] , $TYPE_NUMBER);
setting("ratelimit_maxRequest" , $rawConfig["ratelimit"]["maxRequest"] , $TYPE_NUMBER);
setting("ratelimit_time" , $rawConfig["ratelimit"]["time"] , $TYPE_NUMBER);
setting("ratelimit_banTime" , $rawConfig["ratelimit"]["banTime"] , $TYPE_NUMBER);
setting("cache_contestRank" , $rawConfig["cache"]["contestRank"] , $TYPE_NUMBER);
- if ($rawConfig["publish"] !== true) {
- $rawConfig["viewRank"] = false;
- $rawConfig["viewLog"] = false;
- }
-
- if ($rawConfig["viewRankTask"] !== true)
- $rawConfig["viewLogOther"] = false;
-
if ($changed === false)
stop(102, "Woah nothing happened.", 200);
diff --git a/api/contest/rank.php b/api/contest/rank.php
index e3bd41c8..31fe73c6 100644
--- a/api/contest/rank.php
+++ b/api/contest/rank.php
@@ -118,8 +118,8 @@
});
foreach ($res as $value) {
- $total[$user] = $value["total"];
- $overall += $total[$user];
+ $total[$value["username"]] = $value["total"];
+ $overall += $total[$value["username"]];
}
if ($export) {
diff --git a/api/info.php b/api/info.php
index e8130d78..0d7bc65e 100644
--- a/api/info.php
+++ b/api/info.php
@@ -16,6 +16,9 @@
$username = reqQuery("u");
require_once $_SERVER["DOCUMENT_ROOT"] ."/data/xmldb/account.php";
+ if ($username !== preg_replace("/[^a-zA-Z0-9]+/", "", $username))
+ stop(-1, "Tên người dùng chỉ được phép dùng các kí tự trong khoảng a-zA-Z0-9", 400);
+
if (!$data = getUserData($username))
stop(13, "Không tìm thấy tên người dùng \"$username\"!", 404, Array( "username" => $username ));
diff --git a/api/login.php b/api/login.php
index 64ab7927..ee7b1e9b 100644
--- a/api/login.php
+++ b/api/login.php
@@ -1,48 +1,229 @@
$_SESSION["apiToken"],
- "sessid" => session_id(),
- "redirect" => "/",
- "user" => Array(
- "id" => $udata["id"],
- "name" => $udata["name"]
- )
- ));
- }
- else if ($res === LOGIN_WRONGPASSWORD)
- stop(14, "Sai mật khẩu!", 403);
- else if ($res === LOGIN_USERNAMENOTFOUND)
- stop(13, "Sai tên đăng nhập!", 403);
- else
- stop(-1, "Lỗi không rõ.", 500);
\ No newline at end of file
+ //? |-----------------------------------------------------------------------------------------------|
+ //? | login.php |
+ //? | |
+ //? | Copyright (c) 2018-2020 Belikhun. All right reserved |
+ //? | Licensed under the MIT License. See LICENSE in the project root for license information. |
+ //? |-----------------------------------------------------------------------------------------------|
+
+ // SET PAGE TYPE
+ define("PAGE_TYPE", "NORMAL");
+
+ require_once $_SERVER["DOCUMENT_ROOT"] ."/lib/belibrary.php";
+ require_once $_SERVER["DOCUMENT_ROOT"] ."/data/config.php";
+ header("Cache-Control: max-age=0, must-revalidate", true);
+
+?>
+
+
+
+
+
+
+
+
+ Đăng nhập
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![](/api/images/landing)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/register.php b/api/register.php
index 675b911a..1958447e 100644
--- a/api/register.php
+++ b/api/register.php
@@ -19,7 +19,7 @@
if ($config["allowRegister"] !== true)
stop(21, "Đăng kí tài khoản đã bị tắt!", 403);
- $username = reqForm("username");
+ $username = preg_replace("/[^a-zA-Z0-9]+/", "", reqForm("username"));
$password = reqForm("password");
$captcha = reqForm("captcha");
diff --git a/assets/css/default.css b/assets/css/default.css
index 3b6ea459..744dc3b2 100644
--- a/assets/css/default.css
+++ b/assets/css/default.css
@@ -89,7 +89,7 @@ body.dark pre {
timer {
position: relative;
display: inline-block;
- font-family: Segoe UI;
+ font-family: "Segoe UI", "Calibri";
font-weight: bold;
font-size: 21px;
letter-spacing: .5px;
@@ -105,6 +105,14 @@ body.dark timer[data-color = "red"] {
color: rgb(255, 169, 169);
}
+timer[data-color = "yellow"] {
+ color: rgb(190, 166, 29);
+}
+
+body.dark timer[data-color = "yellow"] {
+ color: rgb(239, 241, 80);
+}
+
timer[data-color = "green"] {
color: rgb(12, 184, 41);
}
diff --git a/assets/css/loginPage.css b/assets/css/loginPage.css
index 106a7d5c..971b6a9f 100644
--- a/assets/css/loginPage.css
+++ b/assets/css/loginPage.css
@@ -148,7 +148,6 @@ body.dark {
width: 100%;
box-sizing: border-box;
- padding: 0 20px;
overflow-x: hidden;
overflow-y: auto;
}
@@ -228,7 +227,7 @@ body.dark {
.rightPanel .center .formBox .inputForm .progress .indicator > .item {
position: relative;
display: inline-block;
- width: 100px;
+ width: 120px;
padding-top: 24px;
font-family: Nunito;
font-size: 12px;
diff --git a/assets/css/progressBar.css b/assets/css/progressBar.css
index 7801eac0..33822fba 100644
--- a/assets/css/progressBar.css
+++ b/assets/css/progressBar.css
@@ -140,7 +140,7 @@
}
.progressBar > .bar[data-color="yellow"] {
- background-color: #d4d23f;
+ background-color: #c7c545;
}
.progressBar > .bar[data-color="pink"] {
diff --git a/assets/css/switch.css b/assets/css/switch.css
index a523f87b..b3d24ddd 100644
--- a/assets/css/switch.css
+++ b/assets/css/switch.css
@@ -175,7 +175,6 @@
.sq-checkbox input {
position: absolute;
display: none;
- cursor: pointer;
height: 0;
width: 0;
}
@@ -197,20 +196,20 @@
width: 42px;
}
-.sq-checkbox:hover input ~ .checkmark {
+.sq-checkbox:hover > input ~ .checkmark {
background-color: rgba(68, 170, 221, 0.4);
border-color: rgb(160, 220, 250);
}
-.sq-checkbox input:checked ~ .checkmark {
+.sq-checkbox > input:checked ~ .checkmark {
background-color: rgb(68, 170, 221);
}
-.sq-checkbox:hover input:checked ~ .checkmark {
+.sq-checkbox:hover > input:checked ~ .checkmark {
background-color: rgb(160, 220, 250);
}
-.sq-checkbox input:disabled ~ .checkmark {
+.sq-checkbox > input:disabled ~ .checkmark {
filter: brightness(0.8);
cursor: not-allowed;
}
@@ -219,15 +218,94 @@
border-color: rgb(255, 102, 170);
}
-.sq-checkbox.pink:hover input ~ .checkmark {
+.sq-checkbox.pink:hover > input ~ .checkmark {
background-color: rgba(255, 102, 171, 0.4);
border-color: rgb(255, 194, 214);
}
-.sq-checkbox.pink input:checked ~ .checkmark {
+.sq-checkbox.pink > input:checked ~ .checkmark {
background-color: rgb(255, 102, 170);
}
-.sq-checkbox.pink:hover input:checked ~ .checkmark {
+.sq-checkbox.pink:hover > input:checked ~ .checkmark {
background-color: rgb(255, 194, 214);
+}
+
+.circleCheckbox {
+ position: relative;
+ display: inline-block;
+ width: 28px;
+ height: 28px;
+ user-select: none;
+}
+
+.circleCheckbox > input {
+ position: absolute;
+ display: none;
+ height: 0;
+ width: 0;
+}
+
+.circleCheckbox > .checkmark {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 2px solid rgb(34, 34, 34);
+ border-radius: 50%;
+ box-sizing: border-box;
+ font-size: 15px;
+ font-weight: bold;
+ cursor: pointer;
+
+ transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);
+}
+
+.circleCheckbox > input:disabled + .checkmark {
+ cursor: not-allowed;
+}
+
+.circleCheckbox > input:checked + .checkmark,
+.circleCheckbox[data-force="true"] > input + .checkmark {
+ background-color: rgb(34, 34, 34);
+ border-width: 0;
+ color: rgb(228, 228, 228);
+}
+
+.circleCheckbox[data-color="green"] > input:checked + .checkmark,
+.circleCheckbox[data-color="green"][data-force="true"] > input + .checkmark {
+ background-color: rgb(55, 228, 55);
+ color: rgb(44, 44, 44);
+}
+
+.circleCheckbox[data-color="red"] > input:checked + .checkmark,
+.circleCheckbox[data-color="red"][data-force="true"] > input + .checkmark {
+ background-color: rgb(255, 125, 125);
+ color: rgb(44, 44, 44);
+}
+
+.circleCheckbox[data-color="blue"] > input:checked + .checkmark,
+.circleCheckbox[data-color="blue"][data-force="true"] > input + .checkmark {
+ background-color: rgb(44, 224, 248);
+ color: rgb(44, 44, 44);
+}
+
+.circleCheckbox[data-color="yellow"] > input:checked + .checkmark,
+.circleCheckbox[data-color="yellow"][data-force="true"] > input + .checkmark {
+ background-color: rgb(217, 230, 47);
+ color: rgb(44, 44, 44);
+}
+
+body.dark .circleCheckbox > .checkmark {
+ border-color: rgb(65, 65, 65);
+}
+
+body.dark .circleCheckbox > input:checked + .checkmark,
+body.dark .circleCheckbox[data-force="true"] > input + .checkmark {
+ background-color: rgb(168, 168, 168);
+ color: rgb(46, 46, 46);
}
\ No newline at end of file
diff --git a/assets/fonts/segoeui/SegoeUI-Bold.woff2 b/assets/fonts/segoeui/SegoeUI-Bold.woff2
new file mode 100644
index 00000000..b32ea039
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-Bold.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-BoldItalic.woff2 b/assets/fonts/segoeui/SegoeUI-BoldItalic.woff2
new file mode 100644
index 00000000..b4d26249
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-BoldItalic.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-Italic.woff2 b/assets/fonts/segoeui/SegoeUI-Italic.woff2
new file mode 100644
index 00000000..fd0f5d82
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-Italic.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-Light.woff2 b/assets/fonts/segoeui/SegoeUI-Light.woff2
new file mode 100644
index 00000000..bc8abd01
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-Light.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-LightItalic.woff2 b/assets/fonts/segoeui/SegoeUI-LightItalic.woff2
new file mode 100644
index 00000000..2a49fba6
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-LightItalic.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-Semibold.woff2 b/assets/fonts/segoeui/SegoeUI-Semibold.woff2
new file mode 100644
index 00000000..b1b2f249
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-Semibold.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-SemiboldItalic.woff2 b/assets/fonts/segoeui/SegoeUI-SemiboldItalic.woff2
new file mode 100644
index 00000000..07193b7c
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-SemiboldItalic.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-Semilight.woff2 b/assets/fonts/segoeui/SegoeUI-Semilight.woff2
new file mode 100644
index 00000000..21a762f2
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-Semilight.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI-SemilightItalic.woff2 b/assets/fonts/segoeui/SegoeUI-SemilightItalic.woff2
new file mode 100644
index 00000000..02533cb1
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI-SemilightItalic.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUI.woff2 b/assets/fonts/segoeui/SegoeUI.woff2
new file mode 100644
index 00000000..f420bcf5
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUI.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUIBlack-Italic.woff2 b/assets/fonts/segoeui/SegoeUIBlack-Italic.woff2
new file mode 100644
index 00000000..a6687eff
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUIBlack-Italic.woff2 differ
diff --git a/assets/fonts/segoeui/SegoeUIBlack.woff2 b/assets/fonts/segoeui/SegoeUIBlack.woff2
new file mode 100644
index 00000000..f91e7c47
Binary files /dev/null and b/assets/fonts/segoeui/SegoeUIBlack.woff2 differ
diff --git a/assets/fonts/segoeui/segoeui.css b/assets/fonts/segoeui/segoeui.css
new file mode 100644
index 00000000..1b17270e
--- /dev/null
+++ b/assets/fonts/segoeui/segoeui.css
@@ -0,0 +1,105 @@
+/*
+? |-----------------------------------------------------------------------------------------------|
+? | /assets/fonts/segoeui/segoeui.css |
+? | |
+? | Copyright (c) 2018-2020 Belikhun. All right reserved |
+? | Licensed under the MIT License. See LICENSE in the project root for license information. |
+? |-----------------------------------------------------------------------------------------------|
+*/
+
+@font-face {
+ font-family: "Segoe UI Semilight";
+ src: local("Segoe UI Semilight Italic"), local("SegoeUI-SemilightItalic"),
+ url("SegoeUI-SemilightItalic.woff2") format("woff2");
+ font-weight: 300;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Segoe UI Semilight";
+ src: local("Segoe UI Semilight"), local("SegoeUI-Semilight"),
+ url("SegoeUI-Semilight.woff2") format("woff2");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Black"), local("SegoeUIBlack"),
+ url("SegoeUIBlack.woff2") format("woff2");
+ font-weight: 900;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Light Italic"), local("SegoeUI-LightItalic"),
+ url("SegoeUI-LightItalic.woff2") format("woff2");
+ font-weight: 300;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Bold Italic"), local("SegoeUI-BoldItalic"),
+ url("SegoeUI-BoldItalic.woff2") format("woff2");
+ font-weight: bold;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Light"), local("SegoeUI-Light"),
+ url("SegoeUI-Light.woff2") format("woff2");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI"), local("SegoeUI"),
+ url("SegoeUI.woff2") format("woff2");
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Bold"), local("SegoeUI-Bold"),
+ url("SegoeUI-Bold.woff2") format("woff2");
+ font-weight: bold;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Semibold Italic"), local("SegoeUI-SemiboldItalic"),
+ url("SegoeUI-SemiboldItalic.woff2") format("woff2");
+ font-weight: 600;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Italic"), local("SegoeUI-Italic"),
+ url("SegoeUI-Italic.woff2") format("woff2");
+ font-weight: normal;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Semibold"), local("SegoeUI-Semibold"),
+ url("SegoeUI-Semibold.woff2") format("woff2");
+ font-weight: 600;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Segoe UI";
+ src: local("Segoe UI Black Italic"), local("SegoeUIBlack-Italic"),
+ url("SegoeUIBlack-Italic.woff2") format("woff2");
+ font-weight: 900;
+ font-style: italic;
+}
+
diff --git a/assets/img/chrome-icon.png b/assets/img/chrome-icon.png
new file mode 100644
index 00000000..0cbe1db3
Binary files /dev/null and b/assets/img/chrome-icon.png differ
diff --git a/assets/img/coccoc-icon.png b/assets/img/coccoc-icon.png
new file mode 100644
index 00000000..62a7f497
Binary files /dev/null and b/assets/img/coccoc-icon.png differ
diff --git a/assets/js/errorHandler.js b/assets/js/errorHandler.js
index 0e8be311..9d3a8af6 100644
--- a/assets/js/errorHandler.js
+++ b/assets/js/errorHandler.js
@@ -11,19 +11,19 @@ const errorHandler = async (error, returnable = true) => {
if (!popup || !popup.initialized)
return;
- let e = (error.code && error.data.code)
+ let e = (error.code && error.data && error.data.code)
? `[${error.code} ${error.data.code}]`
: error.code ? `[${error.code}]`
: error.name
|| error.data.name
|| `${error.data.data.file}:${error.data.data.line}`
- let d = (error.description && error.data.description)
+ let d = (error.description && error.data && error.data.description)
? `${error.description} (${error.data.description}) ${(error.data.data.file) ? `${error.data.data.file}:${error.data.data.line}` : ""}`
: error.message
+ || error.description
|| error.data.message
|| error.data.description
- || error.description
let returnBtn = {}
@@ -31,14 +31,13 @@ const errorHandler = async (error, returnable = true) => {
returnBtn.back = { text: "Quay lại", color: "green" }
let errorBox = document.createElement("pre");
- errorBox.classList.add("dark", "break");
+ errorBox.classList.add(document.body.classList.contains("dark") ? "dark" : "light", "break");
errorBox.innerText = `${e} >>> ${d}`;
errorBox.style.fontSize = "16px";
- splash.change({ description: "Lỗi đã sảy ra!" });
await popup.show({
windowTitle: "Error Handler",
- title: "Oops!",
+ title: "Toang rồi ông Giáo ạ!",
message: "ERROR OCCURED",
description: "Một lỗi không mong muốn đã sảy ra!",
level: "error",
diff --git a/assets/js/login.js b/assets/js/login.js
index 8935dda2..016f491b 100644
--- a/assets/js/login.js
+++ b/assets/js/login.js
@@ -20,7 +20,8 @@ const login = {
allowRegister: false,
async init() {
- await sounds.init();
+ if (!(/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream))
+ await sounds.init();
let server = await myajax({ url: "/api/server", method: "GET" });
this.allowRegister = server.data.config.allowRegister;
diff --git a/assets/js/sounds.js b/assets/js/sounds.js
index 4a853c8d..f30993cb 100644
--- a/assets/js/sounds.js
+++ b/assets/js/sounds.js
@@ -7,6 +7,7 @@
const sounds = {
+ disabled: false,
initialized: false,
soundsLoaded: false,
ROOT_DIR: "/assets/sounds",
@@ -78,6 +79,13 @@ const sounds = {
},
async init(set = () => {}) {
+ if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
+ clog("WARN", "Sounds does not support on iPhone devices, disabling...");
+ cookie.set("__s_m", false);
+ this.disabled = true;
+ return false;
+ }
+
set(0, "Taking Cookies 🍪");
this.enable.master = cookie.get("__s_m", false) == "true";
this.enable.mouseOver = cookie.get("__s_mo", true) == "true";
@@ -105,6 +113,9 @@ const sounds = {
},
async loadSound(set = () => {}) {
+ if (this.disabled)
+ throw { code: -1, description: "Sounds Module Disabled" }
+
for (var i = 0; i < this.soundList.length; i++) {
const item = this.soundList[i];
set((i / (this.soundList.length - 1)) * 100, item.name);
@@ -113,6 +124,9 @@ const sounds = {
},
async __loadSoundAsync(url, volume = 0.6) {
+ if (this.disabled)
+ throw { code: -1, description: "Sounds Module Disabled" }
+
var sound = new Audio();
sound.src = (typeof chrome !== "undefined" && chrome.extension) ? chrome.extension.getURL(url) : url;
clog("DEBG", `Loading sound: ${url}`);
@@ -146,6 +160,9 @@ const sounds = {
},
select(variation = 0) {
+ if (this.disabled || !this.initialized)
+ return;
+
let sound = [
this.sounds.select,
this.sounds.selectSoft
@@ -156,6 +173,9 @@ const sounds = {
},
confirm(variation = 0) {
+ if (this.disabled || !this.initialized)
+ return;
+
let sound = [
this.sounds.confirm,
this.sounds.confirm2,
@@ -167,6 +187,9 @@ const sounds = {
},
toggle(variation = 0) {
+ if (this.disabled || !this.initialized)
+ return;
+
let sound = [
this.sounds.overlayPopIn,
this.sounds.overlayPopOut
@@ -177,16 +200,25 @@ const sounds = {
},
notification() {
+ if (this.disabled || !this.initialized)
+ return;
+
if (this.enable.master && this.enable.notification)
this.__soundToggle(this.sounds.notification);
},
warning() {
+ if (this.disabled || !this.initialized)
+ return;
+
if (this.enable.master && this.enable.others)
this.__soundToggle(this.sounds.warning);
},
scan() {
+ if (this.disabled)
+ throw { code: -1, description: "Sounds Module Disabled" }
+
const list = document.getElementsByClassName("sound");
for (var item of list) {
@@ -202,7 +234,7 @@ const sounds = {
},
applySound(item) {
- if (!item.nodeType || item.nodeType <= 0 || item.dataset.soundApplied || !this.soundsLoaded)
+ if (!item.nodeType || item.nodeType <= 0 || item.dataset.soundApplied || !this.soundsLoaded || this.disabled || !this.initialized)
return false;
if (typeof item.dataset.soundhover !== "undefined")
diff --git a/assets/js/splash.js b/assets/js/splash.js
index c124d758..ec264d71 100644
--- a/assets/js/splash.js
+++ b/assets/js/splash.js
@@ -51,11 +51,11 @@ class splash {
// Footer
this.tree.footer.icon.innerHTML = `
-
![](/assets/img/chrome-icon.webp)
+
-
![](/assets/img/coccoc-icon.webp)
+
`
this.tree.footer.text.innerText = "Trang web hoạt động tốt nhất trên trình duyệt chrome và coccoc.";
diff --git a/config.php b/config.php
index 52cc1afc..21d2634c 100644
--- a/config.php
+++ b/config.php
@@ -28,7 +28,7 @@
-
+
@@ -418,7 +418,7 @@
-
+
diff --git a/data/problems/problem.php b/data/problems/problem.php
index 53778738..bf08e398 100644
--- a/data/problems/problem.php
+++ b/data/problems/problem.php
@@ -9,11 +9,8 @@
require_once $_SERVER["DOCUMENT_ROOT"] ."/lib/belibrary.php";
$problemList = Array();
-
- foreach(glob(PROBLEM_DIR ."/*", GLOB_ONLYDIR) as $i => $path) {
- $data = json_decode((new fip($path ."/data.json")) -> read(), true);
- $problemList[basename($path)] = $data;
- }
+ foreach(glob(PROBLEM_DIR ."/*", GLOB_ONLYDIR) as $i => $path)
+ $problemList[basename($path)] = json_decode((new fip($path ."/data.json")) -> read(), true);
// Return Code
define("PROBLEM_OKAY", 0);
diff --git a/index.php b/index.php
index 13ae9ecd..c024c2bf 100644
--- a/index.php
+++ b/index.php
@@ -68,15 +68,15 @@
-
-
+
+
-
-
+
+
@@ -892,7 +892,7 @@
-
+
diff --git a/assets/css/configPage.css b/static/css/configPage.css
similarity index 98%
rename from assets/css/configPage.css
rename to static/css/configPage.css
index 8b0f0f21..4f376122 100644
--- a/assets/css/configPage.css
+++ b/static/css/configPage.css
@@ -1,6 +1,6 @@
/*
? |-----------------------------------------------------------------------------------------------|
-? | /assets/css/configPage.css |
+? | /static/css/configPage.css |
? | |
? | Copyright (c) 2018-2020 Belikhun. All right reserved |
? | Licensed under the MIT License. See LICENSE in the project root for license information. |
diff --git a/assets/css/core.css b/static/css/core.css
similarity index 95%
rename from assets/css/core.css
rename to static/css/core.css
index 0c438f10..17ee34eb 100644
--- a/assets/css/core.css
+++ b/static/css/core.css
@@ -1,2672 +1,2672 @@
-/*
-? |-----------------------------------------------------------------------------------------------|
-? | /assets/css/core.css |
-? | |
-? | Copyright (c) 2018-2020 Belikhun. All right reserved |
-? | Licensed under the MIT License. See LICENSE in the project root for license information. |
-? |-----------------------------------------------------------------------------------------------|
-*/
-
-body {
- position: relative;
- background-color: #666666;
- font-family: "Open Sans", "Segoe UI", "Calibri", Tahoma, Geneva, Verdana, sans-serif;
- margin: 0 0 20px;
- overflow: hidden;
- width: 100vw;
- height: 100vh;
-}
-
-/* Change Autocomplete styles in Chrome*/
-input:-webkit-autofill {
- background-color: rgba(0, 0, 0, 0);
-}
-
-body #container {
- position: absolute;
- display: block;
- width: 100vw;
- top: 56px;
- bottom: 0;
- background-color: #ebebeb;
- box-sizing: border-box;
- padding: 5px;
- overflow-x: hidden;
- overflow-y: auto;
- transition:
- transform 0.4s ease,
- filter 0.4s ease;
-}
-
-body #container .flexRow {
- position: relative;
- display: flex;
- flex-direction: row;
- height: 100%;
- min-height: 420px;
-}
-
-body #container .flexColumn {
- position: relative;
- display: flex;
- flex-direction: column;
-}
-
-body #container .flexColumn.large {
- flex-grow: 1;
-}
-
-body #container .flexColumn.small {
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.navBar.showBottom ~ #userSettings,
-.navBar.showBottom ~ #container {
- top: 94px;
-}
-
-.contestTimer {
- display: none;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- box-sizing: border-box;
- padding: 4px 0 8px;
-}
-
-.navBar.showBottom .contestTimer {
- display: flex;
- height: 38px;
-}
-
-.contestTimer::before {
- content: "";
- position: absolute;
- display: block;
- top: 0;
- left: 10px;
- right: 10px;
- height: 1px;
- background-color: rgba(122, 122, 122, 0.2);
-}
-
-.contestTimer #contestTimeState {
- position: relative;
- font-size: 13px;
- text-align: center;
- text-transform: uppercase;
- letter-spacing: .4px;
- color: rgb(90, 90, 90);
-}
-
-.contestTimer .reload {
- position: relative;
- display: inline-block;
- font-size: 18px;
- font-weight: bold;
- cursor: pointer;
- color: rgba(98, 98, 98, 0.54);
- transition: color 0.2s ease;
-}
-
-.contestTimer #contestTimeState,
-.contestTimer .reload,
-.contestTimer separator {
- margin-top: 4px;
-}
-
-.contestTimer .reload:hover {
- color: rgba(98, 98, 98, 0.82);
-}
-
-.contestTimer .progressBar {
- position: absolute;
- bottom: 0;
- width: 100%;
- margin-top: 28px;
- height: 4px;
-}
-
-.contestTimer .progressBar > .left,
-.contestTimer .progressBar > .right {
- transform: translateY(calc(-100% - 4px));
-}
-
-.contestTimer .progressBar > .left {
- left: 10px;
-}
-
-.contestTimer .progressBar > .right {
- right: 10px;
-}
-
-@media only screen and (max-width: 800px) {
- .navBar.showBottom .contestTimer #contestTimeState,
- .navBar.showBottom .contestTimer #contestTimeState + separator {
- display: none;
- }
-}
-
-panel {
- position: relative;
- display: flex;
- flex-direction: column;
- width: 350px;
- height: auto;
- background-color: white;
- box-shadow: 0 0 5px rgba(98, 98, 98, 0.2);
- margin: 5px;
- box-sizing: border-box;
-}
-
-panel .head {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: center;
- width: 100%;
- height: 40px;
- padding: 10px 10px 10px 20px;
- box-sizing: border-box;
- background-color: rgb(238, 240, 243);
- border-bottom: 1px solid #e6e6e6;
-}
-
-panel .head .le {
- position: relative;
- display: inline-block;
- flex: 1 1 0;
-
- font-family: Calibri;
- font-size: 16px;
- font-weight: bold;
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- color: rgba(56, 56, 56, 0.8);
-}
-
-panel .head .ri {
- position: relative;
- display: flex;
- align-items: center;
- flex: 0 0 0;
-}
-
-panel .head .ri > i {
- position: relative;
- display: inline;
- font-size: 18px;
- font-weight: bold;
- color: rgba(98, 98, 98, 0.54);
- padding: 0 2px;
- cursor: pointer;
- transition: color 0.2s ease;
-}
-
-panel .head .ri > i.bak {
- font-size: 20px;
-}
-
-panel .head .ri > i:hover {
- color: rgba(98, 98, 98, 0.82);
-}
-
-panel .main {
- position: relative;
- display: inline-block;
- width: 100%;
- height: calc(100% - 40px);
- margin: unset;
- padding: unset;
- overflow: auto;
- box-sizing: border-box;
- background-color: #fafafa;
-}
-
-panel .main:empty::before,
-panel .main .showEmpty:empty::before {
- content: "\f51b";
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translate(-50%, calc(-50% - 22px));
- font-family: "Font Awesome 5 Free";
- font-weight: 900;
- font-size: 72px;
- color: rgb(192, 192, 192);
-}
-
-panel .main:empty::after,
-panel .main .showEmpty:empty::after {
- content: "Không có dữ liệu";
- position: absolute;
- display: block;
- width: calc(100% - 20px);
- top: 50%;
- transform: translateY(calc(-50% + 38px));
- font-weight: 600;
- font-size: 14px;
- text-align: center;
- color: rgb(192, 192, 192);
-}
-
-/** Pannel Layout: Logged in */
-
-#problemp {
- flex-grow: 1;
- width: auto;
- height: calc(100% - 10px);
-}
-
-#uploadp {
- height: 190px;
-}
-
-#logp {
- flex-grow: 1;
- height: calc(100% - 220px);
-}
-
-#rankp {
- flex-grow: 1;
-}
-
-@media only screen and (max-width: 1130px) {
- body #container .flexRow {
- flex-wrap: wrap;
- height: auto;
- }
-
- body #container .flexRow:first-child {
- min-height: 100%;
- }
-
- body #container .flexRow:first-child > .flexColumn.large {
- min-height: calc(100vh - 90px);
- }
-
- body #container .flexRow:last-child {
- height: 100%;
- }
-
- body #container .flexRow:last-child > #rankp {
- max-height: calc(100% - 10px);
- }
-
- body #container .flexColumn {
- width: 100%;
- }
-
- #uploadp,
- #logp {
- width: auto;
- }
-
- #logp {
- height: auto;
- max-height: calc(100vh - 90px);
- }
-}
-
-/** Pannel Layout: Guest mode */
-
-body.guest #container {
- display: flex;
- flex-direction: column;
-}
-
-body.guest #container > .flexRow:nth-child(1) {
- order: 2;
- flex-grow: 0;
- min-height: 100%;
-}
-
-body.guest #container > .flexRow:nth-child(2) {
- order: 1;
- min-height: 100%;
-}
-
-body.guest #problemp {
- height: 200px;
- flex-grow: 1;
-}
-
-body.guest #problemp.hide {
- display: none;
-}
-
-#wrapper {
- position: fixed;
- display: none;
- align-items: center;
- justify-content: center;
- box-sizing: border-box;
- padding: 60px 0 20px;
- width: 100%;
- height: 100%;
- background-color: rgba(0, 0, 0, 0.6);
- z-index: 2;
-}
-
-#wrapper.show {
- display: flex;
-}
-
-#wrapper #wrapperPanel {
- position: relative;
- width: calc(100% - 100px);
- height: calc(100% - 20px);
- max-width: 1000px;
- max-height: 640px;
- margin: unset;
-}
-
-#wrapper #wrapperPanel[data-size="small"] {
- width: calc(100% - 300px);
- max-width: 720px;
- min-width: 420px;
- margin: unset;
-}
-
-#wrapper #wrapperPanel[data-size="large"] {
- width: calc(100% - 80px);
- max-width: unset;
- max-height: 100%;
- margin: unset;
-}
-
-#logp div.main:empty::before {
- content: "\f564";
-}
-
-#logp .logItemContainer {
- position: relative;
-}
-
-#logp .logItemContainer .logItem {
- position: relative;
- box-sizing: border-box;
- width: calc(100% - 25px);
- height: 48px;
- margin-left: 25px;
- padding-right: 25px;
-}
-
-#logp .logItemContainer .logItem .h {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: center;
- width: 100%;
- height: 100%;
- box-sizing: border-box;
- border-bottom: 1px solid #e6e6e6;
-}
-
-#logp .logItemContainer .logItem .h .l {
- position: relative;
- display: inline-block;
- flex-grow: 1;
- overflow: hidden;
-}
-
-#logp .logItemContainer .logItem .h .l .t {
- font-size: 10px;
- font-weight: normal;
- color: rgba(59, 71, 82, 0.7);
-}
-
-#logp .logItemContainer .logItem .h .l .n {
- font-size: 13px;
- font-weight: bold;
- color: #585858;
-}
-
-#logp .logItemContainer .logItem.scored .h .l .n {
- color: #1124c8;
-}
-
-#logp .logItemContainer .logItem.correct .h .l .n {
- color: #39aa56;
-}
-
-#logp .logItemContainer .logItem.passed .h .l .n {
- color: #0ca3be;
-}
-
-#logp .logItemContainer .logItem.accepted .h .l .n {
- color: #b9ab14;
-}
-
-#logp .logItemContainer .logItem.failed .h .l .n {
- color: #db4545;
-}
-
-#logp .logItemContainer .logItem .h .r {
- position: relative;
- display: flex;
- flex-grow: 0;
- flex-direction: column;
- align-items: flex-end;
- justify-content: center;
- margin-right: 10px;
-}
-
-#logp .logItemContainer .logItem .h .r t {
- color: rgba(98, 98, 98, 0.7);
- font-size: 11px;
- letter-spacing: 0.01em;
-}
-
-#logp .logItemContainer .logItem .h .r .s {
- font-weight: bold;
- color: rgba(82, 82, 82, 0.7);
- font-size: 11px;
-}
-
-#logp .logItemContainer .logItem .d {
- position: absolute;
- right: 0;
- top: 0;
- width: 25px;
- height: 100%;
- cursor: pointer;
- background-color: #f8f8f8;
- color: #c0c0c0;
- transition: all 0.2s ease;
- display: flex;
- align-items: center;
- justify-content: center;
- text-decoration: none;
-}
-
-#logp .logItemContainer .logItem .d:not(.link) {
- cursor: not-allowed;
-}
-
-#logp .logItemContainer .logItem .d::before {
- content: "open_in_browser";
- font-family: "Material Icons";
- font-weight: lighter;
- font-size: 16px;
-}
-
-#logp .logItemContainer .logItem .d:hover {
- background-color: #f1f1f1;
- color: #6e6e6e;
-}
-
-#logp .logItemContainer .logItem.queue .h .l .n {
- color: #8710cc;
-}
-
-#logp .logItemContainer .logItem.queue .d::before {
- content: "\f2f1";
- font-family: "Font Awesome 5 Free";
- animation: spin 1s linear 0s infinite forwards;
- font-weight: 600;
- font-size: 12px;
-}
-
-#logp .logItemContainer .logItem.judging .h .l .n {
- color: #c811c8;
-}
-
-#logp .logItemContainer .logItem.judging .d::before {
- content: "\f0e3";
- font-family: "Font Awesome 5 Free";
- animation: spin 1s linear 0s infinite forwards;
- font-weight: 600;
- font-size: 12px;
-}
-
-#logp .logItemContainer .logItem.queue .d,
-#logp .logItemContainer .logItem.judging .d {
- cursor: default;
-}
-
-#uploadp .fileupload-container {
- overflow: hidden;
-}
-
-#uploadp .fileupload-container #submitDropzone {
- position: absolute;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- margin: 20px;
- padding: 10px;
- box-sizing: border-box;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- border: 2px dotted #ccc;
- border-radius: 4px;
- opacity: 1;
- z-index: 1;
- transition: all 0.4s ease;
- transition-property: color, background-color, opacity;
-}
-
-#uploadp .fileupload-container #submitDropzone.drag {
- background-color: #ccc;
- color: white;
-}
-
-#uploadp .fileupload-container #submitDropzone.hide {
- opacity: 0;
-}
-
-#uploadp .fileupload-container #submitDropzone.hide+.info {
- opacity: 1;
-}
-
-#uploadp .fileupload-container #submitDropzone #submitInput {
- display: none;
-}
-
-#uploadp .fileupload-container #submitDropzone .title {
- color: rgb(104, 104, 104);
- font-size: 16px;
- font-weight: bold;
- text-transform: uppercase;
-}
-
-#uploadp .fileupload-container #submitDropzone .sub {
- color: rgb(128, 128, 128);
- font-size: 12px;
- margin: 4px 0;
-}
-
-#uploadp .fileupload-container .info {
- position: absolute;
- width: 100%;
- height: 100%;
- box-sizing: border-box;
- padding: 20px;
- transition: all 0.4s ease;
- opacity: 0;
-}
-
-#uploadp .fileupload-container .info #submitStatus {
- position: relative;
- display: block;
- padding-bottom: 2px;
- box-sizing: border-box;
- width: 100%;
- font-size: 20px;
- font-weight: 100;
- text-align: center;
- text-transform: uppercase;
- color: rgb(136, 136, 136);
-}
-
-#uploadp .fileupload-container .info #submitFileName {
- position: relative;
- display: block;
- width: 100%;
- font-size: 13px;
- font-weight: 500;
- text-align: center;
- color: rgb(93, 93, 93);
-}
-
-#uploadp .fileupload-container .info .progressBar {
- position: absolute;
- bottom: 24px;
- left: 50%;
- width: 90%;
- transform: translateX(-50%);
-}
-
-.problemSettings {
- padding: unset;
- height: 220px;
-}
-
-.problemSettings .header {
- height: 40px;
- background-color: #F5F5F6;
- display: flex;
- align-items: center;
- padding: 0 10px;
-}
-
-.problemSettings .header div span {
- padding: 0 3px;
- cursor: pointer;
-}
-
-.problemSettings .header div span::before {
- font-family: "Font Awesome 5 Free";
- font-size: 14px;
- font-weight: 600;
- color: rgba(98, 98, 98, 0.54);
- transition: color 0.2s ease;
-}
-
-.problemSettings .header div span:hover::before {
- color: rgba(98, 98, 98, 0.82)
-}
-
-.problemSettings .header .left .back::before {
- content: "\f104";
-}
-
-.problemSettings .header .right .add::before {
- content: "\f067";
- font-size: 12px;
-}
-
-.problemSettings .header .right .check::before {
- content: "\f00c";
- font-size: 12px;
-}
-
-.problemSettings .header .title {
- position: absolute;
- left: 50%;
- color: #a5a5a5;
- transform: translateX(-50%);
-}
-
-.problemSettings .header .right {
- position: absolute;
- right: 10px;
-}
-
-.problemSettings .problemsContainer {
- position: relative;
- height: calc(100% - 46px);
- background-color: transparent;
- overflow: hidden;
-}
-
-.problemSettings .problemsContainer .problemsList {
- position: relative;
- display: flex;
- flex-direction: column;
- width: 100%;
- height: 100%;
- margin: unset;
- padding: unset;
- list-style: none;
- overflow-x: hidden;
- overflow-y: auto;
- transition: all 0.4s ease;
-}
-
-.problemSettings .problemsContainer .problemsList li.item {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: center;
- width: 100%;
- height: 64px;
- box-sizing: border-box;
- padding: 0 10px;
- border-bottom: unset;
-}
-
-.problemSettings .problemsContainer .problemsList li.item:hover {
- background-color: rgba(245, 245, 246, 0.4);
-}
-
-.problemSettings .problemsContainer .problemsList li.item:after {
- content: unset;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .icon {
- position: relative;
- flex-grow: 0;
- flex-shrink: 0;
- width: 40px;
- height: 40px;
- border-radius: 50%;
- object-fit: cover;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .title {
- position: relative;
- flex-grow: 1;
- flex-shrink: 1;
- list-style: none;
- margin: unset;
- padding: 0 0 0 10px;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .title .id {
- font-size: 11px;
- color: rgba(73, 73, 73, 0.6);
- letter-spacing: 0.4px;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .title .name {
- font-size: 14px;
- color: #494949;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action {
- position: relative;
- display: block;
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action span {
- padding: 0 4px;
- cursor: pointer;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action span::before {
- font-family: "Font Awesome 5 Free";
- font-size: 16px;
- font-weight: 600;
- color: #95a5a6;
- transition: color 0.1s ease;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action span.delete::before {
- content: "\f1f8";
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action span.delete:hover::before {
- color: #e74c3c;
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action span.edit::before {
- content: "\f304";
-}
-
-.problemSettings .problemsContainer .problemsList li.item .action span.edit:hover::before {
- color: #3498db;
-}
-
-.problemSettings .problemsContainer .problemsList.hide {
- transform: translateX(-100%);
-}
-
-.problemSettings .problemsContainer .problem {
- position: absolute;
- width: 100%;
- height: 100%;
- top: 0;
- right: 0;
- overflow: auto;
- padding: 0 10px;
- box-sizing: border-box;
- transform: translateX(100%);
- transition: all 0.4s ease;
-}
-
-.problemSettings .problemsContainer .problemsList.hide + .problem {
- transform: unset;
-}
-
-.problemSettings .problemsContainer .problem #problemEdit_desc {
- resize: none;
- height: 160px;
-}
-
-.problemSettings .problemsContainer .problem #problemEdit_deleteImage,
-.problemSettings .problemsContainer .problem #problemEdit_deleteAttachment {
- width: 100%;
- margin-top: 8px;
-}
-
-.problemSettings .problemsContainer .problem .test-container {
- position: relative;
- margin-bottom: 20px;
- border-bottom: 1px solid rgba(39, 39, 39, 0.4);
- padding-bottom: 1px;
- transition: 0.3s;
-}
-
-.problemSettings .problemsContainer .problem .test-container:hover {
- border-bottom: 2px solid #4285f4;
- padding-bottom: 0;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test {
- display: block;
- font-size: 8px;
- font-weight: 700;
- color: #8b8b8b;
- text-transform: uppercase;
- margin: 12px 0;
- transition: 0.3s;
-}
-
-.problemSettings .problemsContainer .problem .test-container:hover .test {
- color: #4285f4;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list {
- position: relative;
- width: 100%;
- box-sizing: border-box;
- display: block;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list .cell {
- position: relative;
- height: 60px;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list .cell textarea {
- position: relative;
- resize: none;
- border: unset;
- background-color: transparent;
- box-sizing: border-box;
- width: calc(50% - 15px);
- height: 100%;
- font-family: "Consolas";
- border-bottom: 1px solid rgba(39, 39, 39, 0.4);
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete {
- position: absolute;
- display: block;
- right: 0;
- top: 0;
- width: 24px;
- height: 100%;
- cursor: pointer;
- transition: 0.2s;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete:hover {
- background-color: rgba(202, 202, 202, 0.2);
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete::before {
- content: "\f2ed";
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- font-family: "Font Awesome 5 Free";
- font-size: 14px;
- font-weight: 600;
- color: #95a5a6;
- transition: 0.2s;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete:hover::before {
- color: #e74c3c;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-add {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: center;
- height: 60px;
- cursor: pointer;
- transition: 0.2s;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-add:hover {
- background-color: rgba(202, 202, 202, 0.2);
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-add::after {
- content: "\f067";
- font-family: "Font Awesome 5 Free";
- font-size: 18px;
- font-weight: 600;
- color: #95a5a6;
- transition: 0.2s;
-}
-
-.problemSettings .problemsContainer .problem .test-container .test-add:hover::after {
- color: #494949;
-}
-
-.problemSettings .problemsContainer .problem button[type="submit"] {
- display: none;
-}
-
-#userSettings #usett_panelContainer .panel .container .syslogs-settings {
- position: relative;
- display: flex;
- flex-direction: column;
-}
-
-.syslogs-settings .logsContainer {
- position: relative;
- flex-grow: 1;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.syslogs-settings .logsContainer .log {
- position: relative;
- display: flex;
- flex-direction: row;
- background-color: rgba(224, 224, 224, 0.8);
- counter-increment: log-item;
- cursor: pointer;
-
- transition: background-color 0.3s ease;
-}
-
-.syslogs-settings .logsContainer .log:hover {
- background-color: rgba(232, 232, 232, 0.8);
-}
-
-.syslogs-settings .logsContainer .log .level {
- position: relative;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- flex-grow: 0;
- color: rgb(82, 82, 82);
- background-color: rgb(236, 236, 236);
- min-width: 100px;
- padding: 0 10px 0 40px;
- font-size: 14px;
- font-weight: bold;
- box-sizing: border-box;
- overflow: hidden;
- transition: all 0.3s ease;
- transition-property: padding, background-color;
-}
-
-.syslogs-settings .logsContainer .log.enlarge .level {
- padding: 0 20px;
- background-color: rgb(242, 242, 242);
-}
-
-.syslogs-settings .logsContainer .log .level > i {
- position: absolute;
- top: 50%;
- left: 10px;
- transform: translateY(-50%);
- font-weight: bold;
- font-size: 10px;
- font-style: normal;
-
- transition: all 0.3s ease;
-}
-
-.syslogs-settings .logsContainer .log.enlarge .level > i {
- left: 50%;
- transform: translate(-50%, calc(-50% + 22px));
-}
-
-.syslogs-settings .logsContainer .log .detail {
- position: relative;
- display: inline-block;
- width: 100%;
- overflow-x: auto;
- overflow-y: hidden;
- padding: 10px 40px 10px 20px;
- box-sizing: border-box;
- flex-grow: 2;
- border-left: 2px solid rgb(165, 165, 165);
-}
-
-.syslogs-settings .logsContainer .log .detail::before {
- content: "\f107";
- position: absolute;
- top: 50%;
- right: 10px;
- transform: translateY(-50%);
- display: inline-block;
-
- font-family: "Font Awesome 5 Free";
- font-size: 14px;
- font-weight: 900;
- color: rgb(104, 104, 104);
-
- transition: transform 0.3s ease;
-}
-
-.syslogs-settings .logsContainer .log.enlarge .detail::before {
- transform: translateY(-50%) rotate(180deg);
-}
-
-.syslogs-settings .logsContainer .log .detail .text {
- position: relative;
- display: block;
- font-family: "Consolas", "Calibri", "Segoe UI";
- font-size: 15px;
- font-weight: normal;
- color: rgb(56, 56, 56);
-}
-
-.syslogs-settings .logsContainer .log .detail .info {
- position: relative;
- display: block;
- width: 100%;
- height: 0;
- box-sizing: border-box;
-
- overflow-x: auto;
- overflow-y: hidden;
-
- transition: height 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);
-}
-
-.syslogs-settings .logsContainer .log .detail .info::before {
- content: "";
- position: relative;
- display: block;
- width: 100%;
- height: 8px;
-}
-
-.syslogs-settings .logsContainer .log.enlarge .detail .info {
- height: 54px;
-}
-
-.syslogs-settings .logsContainer .log .detail .info t {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: center;
-
- font-family: "Calibri", "Segoe UI";
- font-size: 13px;
- color: rgb(90, 90, 90);
-}
-
-.syslogs-settings .logsContainer .log .detail .info t::before {
- content: "\f111";
- position: relative;
- display: inline-block;
- padding-right: 6px;
-
- font-family: "Font Awesome 5 Free";
- font-size: 13px;
- font-weight: 900;
-}
-
-.syslogs-settings .logsContainer .log .detail .info .client {
- font-weight: bold;
-}
-
-.syslogs-settings .logsContainer .log .detail .info .client::before {
- content: "\f2bd";
-}
-
-.syslogs-settings .logsContainer .log .detail .info .timestamp::before {
- content: "\f017";
-}
-
-.syslogs-settings .logsContainer .log .detail .info .module::before {
- content: "\f466";
-}
-
-.syslogs-settings .logsContainer .log.okay .detail {
- border-left-color: rgb(124, 194, 129);
-}
-
-.syslogs-settings .logsContainer .log.okay .level {
- color: rgb(28, 172, 38);
-}
-
-.syslogs-settings .logsContainer .log.warn .detail {
- border-left-color: rgb(190, 184, 92);
-}
-
-.syslogs-settings .logsContainer .log.warn .level {
- color: rgb(163, 155, 46);
-}
-
-.syslogs-settings .logsContainer .log.errr .detail {
- border-left-color: rgb(223, 150, 150);
-}
-
-.syslogs-settings .logsContainer .log.errr .level {
- color: rgb(233, 67, 67);
-}
-
-.syslogs-settings .logsContainer .log.verb .detail {
- border-left-color: rgb(191, 149, 211);
-}
-
-.syslogs-settings .logsContainer .log.verb .level {
- color: rgb(148, 15, 209);
-}
-
-.syslogs-settings .navigation {
- position: relative;
- display: flex;
- align-items: center;
- flex-grow: 0;
- flex-direction: row;
- width: 100%;
- padding: 10px;
- box-sizing: border-box;
- background-color: rgb(242, 242, 242);
-}
-
-.syslogs-settings .navigation .left,
-.syslogs-settings .navigation .right {
- position: relative;
- flex: 1 0 0;
- font-size: 11px;
-}
-
-.syslogs-settings .navigation .right {
- text-align: right;
-}
-
-.syslogs-settings .navigation .middle {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: center;
- flex-grow: 2;
-}
-
-.syslogs-settings .navigation .middle .icon {
- position: relative;
- display: inline-block;
- cursor: pointer;
- padding: 0 18px;
-}
-
-.syslogs-settings .navigation .middle .icon::before {
- content: "\f111";
- position: relative;
- display: inline-block;
-
- font-family: "Font Awesome 5 Free";
- font-size: 22px;
- font-weight: 900;
- color: rgb(158, 158, 158);
- transition: color 0.2s ease;
-}
-
-.syslogs-settings .navigation .middle .icon:hover::before {
- color: #f368e0;
-}
-
-.syslogs-settings .navigation .middle .buttonLeft::before {
- content: "\f104";
-}
-
-.syslogs-settings .navigation .middle .buttonRight::before {
- content: "\f105";
-}
-
-.syslogs-settings .navigation .middle .currentPage {
- position: relative;
- font-size: 13px;
- font-weight: bold;
- line-height: 18px;
-}
-
-
-#problemp .problemsContainer {
- overflow: hidden;
-}
-
-#problemp .problemsContainer .problemsList:empty::before {
- content: "\f51b";
-}
-
-#problemp .problemsContainer .problemsList:empty::after {
- content: "Không tìm thấy đề hoặc chưa bắt đầu kì thi";
-}
-
-#problemp .problemsContainer .problemsList {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- flex-direction: row;
- justify-content: stretch;
- width: 100%;
- max-height: 100%;
- box-sizing: border-box;
- padding: 10px;
- overflow: auto;
-
- animation: problemsListShow 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
-}
-
-#problemp .problemsContainer .problemsList:empty {
- height: 100%;
-}
-
-#problemp .problemsContainer .problemsList .item {
- position: relative;
- display: flex;
- flex-grow: 0;
- flex-shrink: 0;
- flex-direction: row;
- align-items: center;
- box-sizing: border-box;
- cursor: pointer;
- margin: 10px;
- padding: 10px 40px 10px 20px;
- border-radius: 12px;
- background-color: rgba(238, 238, 238, 0.6);
-}
-
-#problemp .problemsContainer .problemsList .item:hover {
- background-color: rgba(124, 124, 124, 0.1);
-}
-
-#problemp .problemsContainer .problemsList .item:after {
- content: "\f105";
- position: absolute;
- font-family: "Font Awesome 5 Free";
- font-size: 18px;
- font-weight: 600;
- color: #95a5a6;
- right: 20px;
-}
-
-#problemp .problemsContainer .problemsList .item .icon {
- position: relative;
- display: inline-block;
- flex: 0 0 1;
- width: 50px;
- height: 50px;
- border-radius: 25px;
- object-fit: cover;
-}
-
-#problemp .problemsContainer .problemsList .item .title {
- display: inline-block;
- flex: 1 1 0;
- list-style: none;
- margin: unset;
- padding: 0 0 0 10px;
-}
-
-#problemp .problemsContainer .problemsList .item .title .name {
- position: relative;
- font-family: Nunito;
- font-size: 16px;
- font-weight: 800;
- color: #494949;
-}
-
-#problemp .problemsContainer .problemsList .item .title .point {
- position: relative;
- display: inline-block;
- font-size: 11px;
- color: #ecf0f1;
- letter-spacing: 0.4px;
- background-color: #27ae60;
- padding: 2px 6px;
- margin-top: 2px;
- border-radius: 4px;
-}
-
-#problemp .problemsContainer .problemsList .item[disabled="true"] {
- background-color: rgba(243, 184, 205, 0.6);
-}
-
-#problemp .problemsContainer .problem {
- position: absolute;
- width: 100%;
- height: 100%;
- top: 0;
- right: 0;
- box-sizing: border-box;
- padding: 10px;
- overflow-x: hidden;
- overflow-y: auto;
- background-color: inherit;
-
- animation: problemViewerHide 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
-}
-
-@keyframes problemsListShow {
- 0% {
- visibility: hidden;
- }
-
- 1% {
- visibility: visible;
- transform: scale(.9);
- filter: blur(6px) brightness(.9);
- opacity: 0;
- }
-
- 100% {
- visibility: visible;
- transform: scale(1);
- filter: blur(0) brightness(1);
- opacity: 1;
- }
-}
-
-@keyframes problemsListHide {
- 0% {
- transform: scale(1);
- filter: blur(0) brightness(1);
- opacity: 1;
- }
-
- 99% {
- transform: scale(.9);
- filter: blur(6px) brightness(.9);
- opacity: 0;
- }
-
- 100% {
- visibility: hidden;
- }
-}
-
-@keyframes problemViewerShow {
- 0% {
- visibility: hidden;
- transform: translateX(100%);
- }
-
- 1% {
- visibility: visible;
- transform: scale(1.1);
- filter: brightness(.9);
- opacity: 0;
- }
-
- 100% {
- visibility: visible;
- transform: scale(1);
- filter: brightness(1);
- opacity: 1;
- }
-}
-
-@keyframes problemViewerHide {
- 0% {
- transform: scale(1);
- filter: brightness(1);
- opacity: 1;
- }
-
- 99% {
- transform: scale(1.1);
- filter: brightness(.9);
- opacity: 0;
- }
-
- 100% {
- visibility: hidden;
- transform: translateX(100%);
- }
-}
-
-#problemp .problemsContainer .problemsList.hide {
- animation: problemsListHide 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
-}
-
-#problemp .problemsContainer .problemsList.hide + .problem {
- animation: problemViewerShow 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
-}
-
-#problemp .problemsContainer .problem .name {
- display: block;
- text-align: center;
- font-family: Nunito;
- font-size: 19px;
- font-weight: 900;
- letter-spacing: .8px;
- color: #34495e;
-}
-
-#problemp .problemsContainer .problem .point {
- display: block;
- text-align: center;
- font-size: 12px;
- font-weight: bold;
- color: #287548;
- letter-spacing: 0.4px;
-}
-
-#problemp .problemsContainer .problem .enlarge,
-#problemp .problemsContainer .problem .close {
- position: absolute;
- display: block;
- top: 20px;
- right: 50px;
-}
-
-#problemp .problemsContainer .problem .enlarge::before,
-#problemp .problemsContainer .problem .close::before {
- content: "\f360";
- position: relative;
- font-family: "Font Awesome 5 Free";
- font-size: 22px;
- font-weight: 600;
- cursor: pointer;
- color: rgb(92, 92, 92);
-}
-
-#problemp .problemsContainer .problem .close {
- right: 20px;
-}
-
-#problemp .problemsContainer .problem .close::before {
- content: "\f00d";
-}
-
-#problemp .problemsContainer .problem .info {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- margin: 6px 0 20px;
-}
-
-#problemp .problemsContainer .problem .info .filename::before {
- content: "ID: ";
-}
-
-#problemp .problemsContainer .problem .info.general {
- margin-bottom: 4px;
-}
-
-#problemp .problemsContainer .problem .info.IO > t {
- font-family: "Consolas";
- font-weight: bold;
- font-size: 16px;
-}
-
-#problemp .problemsContainer .problem .info.IO .input::before,
-#problemp .problemsContainer .problem .info.IO .output::before {
- position: relative;
- display: inline-block;
- font-family: "Open Sans";
- font-weight: normal;
- font-size: 13px;
- margin-right: 6px;
-}
-
-#problemp .problemsContainer .problem .info.IO .input::before {
- content: "Input:";
-}
-
-#problemp .problemsContainer .problem .info.IO .output::before {
- content: "Output:";
-}
-
-#problemp .problemsContainer .problem .description {
- white-space: pre-wrap;
- margin: 0 20px;
-}
-
-#problemp .problemsContainer .problem .description > a,
-#problemp .problemsContainer .problem .description > table,
-#problemp .problemsContainer .problem .description > ul {
- display: block;
-}
-
-#problemp .problemsContainer .problem table tr:hover {
- background-color: rgba(126, 126, 126, 0.1);
-}
-
-#problemp .problemsContainer .problem table.test tr td {
- font-family: "Consolas";
-}
-
-#problemp .problemsContainer .problem .image {
- position: relative;
- width: 100%;
- margin: 10px 0;
- border: 1px solid #ccc;
-}
-
-#problemp .problemsContainer .problem .attachment {
- position: relative;
- display: block;
- margin-top: 10px;
-}
-
-#problemp .problemsContainer .problem .attachment .link {
- position: relative;
- display: block;
- font-size: 14px;
-}
-
-#problemp .problemsContainer .problem .attachment .link::before {
- content: "Tệp đính kèm:";
- position: relative;
- display: inline-block;
- font-family: "Calibri";
- font-size: 13px;
- font-weight: bold;
- user-select: none;
- margin-right: 4px;
- color: rgb(124, 124, 124);
-}
-
-#problemp .problemsContainer .problem .attachment .embed {
- width: 100%;
- height: 0;
- min-height: 80px;
- max-height: calc(100vh - 160px);
- margin: 10px 0 20px;
- transition: height 0.4s ease-in;
-}
-
-/* *rankingContainer */
-
-#rankp div.rankingContainer {
- position: relative;
- overflow: auto;
-}
-
-#rankp div.rankingContainer:empty::before {
- content: "\f02d";
-}
-
-#rankp div.rankingContainer:empty::after {
- content: "Không có dữ liệu hoặc đã bị tắt";
-}
-
-#rankp div.rankingContainer table {
- position: relative;
- font-family: "Calibri";
- box-sizing: border-box;
- border-spacing: 0;
- padding: 10px;
- min-width: 100%;
-}
-
-#rankp div.rankingContainer table tr th:nth-child(1),
-#rankp div.rankingContainer table tr td:nth-child(1) {
- width: 20px;
- text-align: center;
-}
-
-#rankp div.rankingContainer table tr th:nth-child(2),
-#rankp div.rankingContainer table tr td:nth-child(2) {
- text-align: left;
-}
-
-#rankp div.rankingContainer table tr th:nth-child(2) {
- width: 40px;
-}
-
-#rankp div.rankingContainer table tr td:nth-child(2) {
- display: flex;
- align-items: center;
- padding: 10px;
- margin: 0 0 0 10px;
-}
-
-#rankp div.rankingContainer table tr td:nth-child(2) .avt {
- position: relative;
- display: block;
- width: 40px;
- height: 40px;
- border-radius: 50%;
-}
-
-#rankp div.rankingContainer table tr td:nth-child(3) .username {
- font-family: "Open Sans";
- font-size: 11px;
- font-style: italic;
- color: rgb(114, 114, 114);
- letter-spacing: .2px;
-}
-
-#rankp div.rankingContainer table tr td:nth-child(3) .name {
- font-size: 15px;
- letter-spacing: .2px;
-}
-
-#rankp div.rankingContainer table tr td.number:nth-child(4) {
- color: #3c7be7;
- font-size: 16px;
- font-weight: bold;
-}
-
-#rankp div.rankingContainer table thead tr th:nth-child(3) {
- text-align: left;
-}
-
-#rankp div.rankingContainer table tbody tr[data-rank="1"] {
- background-color: rgba(111, 241, 134, 0.2);
-}
-
-#rankp div.rankingContainer table tbody tr[data-rank="2"] {
- background-color: rgba(239, 241, 111, 0.2);
-}
-
-#rankp div.rankingContainer table tbody tr[data-rank="3"] {
- background-color: rgba(230, 111, 241, 0.2);
-}
-
-#rankp div.rankingContainer table tbody tr[data-rank="1"] td:nth-child(3) .name,
-#rankp div.rankingContainer table tbody tr[data-rank="2"] td:nth-child(3) .name,
-#rankp div.rankingContainer table tbody tr[data-rank="3"] td:nth-child(3) .name {
- font-family: Nunito;
- font-size: 16px;
- font-weight: 850;
- letter-spacing: .4px;
- color: rgb(65, 65, 65);
-}
-
-#rankp div.rankingContainer table tr th {
- position: sticky;
- top: 0;
- background-color: #fafafa;
- border-bottom: 1px solid #9b9b9b;
- color: rgb(82, 82, 82);
- font-family: Segoe UI;
- font-size: 13px;
- font-weight: bold;
- z-index: 1;
-}
-
-#rankp div.rankingContainer table tr th.problem > t {
- display: inline-block;
- color: rgb(82, 82, 82);
- font-family: Segoe UI;
- font-size: 13px;
- font-weight: bold;
-}
-
-#rankp div.rankingContainer table tr th.problem > .toggler {
- position: relative;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 18px;
- height: 18px;
- padding: 0 4px;
- cursor: pointer;
-
- transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1);
-}
-
-#rankp div.rankingContainer table tr th.problem > .toggler::after {
- content: "\f104";
- position: relative;
- display: block;
- font-family: "Font Awesome 5 Free";
- font-size: 18px;
- font-weight: 900;
- transform: translateY(2px);
-}
-
-#rankp div.rankingContainer table tr th.problem[data-folding="true"] {
- width: 10px;
- padding: unset;
-}
-
-#rankp div.rankingContainer table tr th.problem[data-folding="true"] > t {
- display: none;
-}
-
-#rankp div.rankingContainer table tr th.problem[data-folding="true"] > .toggler {
- transform: rotate(180deg);
-}
-
-#rankp div.rankingContainer table tr th.problem[data-folding="true"] > .toggler::after {
- transform: unset;
-}
-
-#rankp div.rankingContainer table tr th,
-#rankp div.rankingContainer table tr td {
- padding: 10px 12px;
-}
-
-#rankp div.rankingContainer table tr td {
- font-size: 13px;
-}
-
-#rankp div.rankingContainer table tr td.number {
- font-size: 13px;
- text-align: right;
- color: rgb(172, 172, 172);
-}
-
-#rankp div.rankingContainer table tr td.number[data-folding="true"] {
- font-size: 0;
- padding: unset;
-}
-
-#rankp div.rankingContainer table tr td.number.link {
- cursor: pointer;
-}
-
-#rankp div.rankingContainer table tr .number.link,
-#rankp div.rankingContainer table tr .number.correct,
-#rankp div.rankingContainer table tr .number.passed,
-#rankp div.rankingContainer table tr .number.accepted,
-#rankp div.rankingContainer table tr .number.failed,
-#rankp div.rankingContainer table tr .number.skipped {
- color: rgb(75, 75, 75);
-}
-
-#rankp div.rankingContainer table tr td.number.correct {
- background-color: rgb(147, 243, 158);
-}
-
-#rankp div.rankingContainer table tr td.number.passed {
- background-color: rgb(150, 245, 248);
-}
-
-#rankp div.rankingContainer table tr td.number.accepted {
- background-color: rgb(240, 237, 157);
-}
-
-#rankp div.rankingContainer table tr td.number.failed {
- background-color: rgb(248, 187, 187)
-}
-
-#rankp div.rankingContainer table tr td.number.skipped {
- background-color: rgb(212, 212, 212);
-}
-
-#rankp div.rankingContainer table tr td.number.link:hover {
- filter: brightness(1.1);
-}
-
-#wrapper #wrapp .main .full {
- display: block;
- margin: auto;
-}
-
-.problemEnlarged {
- position: relative;
- display: flex;
- flex-direction: row;
- width: 100%;
- height: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.problemEnlarged .left {
- position: relative;
- display: flex;
- flex-grow: 1;
- flex-shrink: 1;
- flex-direction: column;
- height: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.problemEnlarged .left .top {
- position: relative;
- display: flex;
- flex-direction: column;
- flex-shrink: 0;
- align-items: center;
- width: 100%;
- padding: 20px 0;
- box-sizing: border-box;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.problemEnlarged .left .top .group {
- position: relative;
- display: flex;
- flex-direction: row;
- width: 100%;
- align-items: center;
- justify-content: center;
-}
-
-.problemEnlarged .left .top .group .col {
- position: relative;
- display: flex;
- flex: 1 1 0;
- flex-direction: column;
- padding: 0 20px;
- align-items: center;
-}
-
-.problemEnlarged .left .top .group .col .name {
- font-size: 26px;
- font-weight: bold;
- text-align: center;
- color: #34495e;
-}
-
-.problemEnlarged .left .top .group .col .point {
- font-size: 12px;
- color: #ecf0f1;
- letter-spacing: 0.4px;
- background-color: #1f8d4d;
- padding: 2px 6px;
- margin: 2px 0 10px;
- border-radius: 4px;
-}
-
-.problemEnlarged .left .top .attachment {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: flex-end;
- width: 100%;
- box-sizing: border-box;
- padding: 10px 20px;
-}
-
-.problemEnlarged .left .top .attachment::before {
- content: "Tệp đính kèm:";
- position: relative;
- display: inline-block;
- font-family: "Calibri";
- font-size: 13px;
- font-weight: bold;
- padding-right: 6px;
- color: rgb(124, 124, 124);
-}
-
-.problemEnlarged .left .top .attachment .link {
- font-size: 14px;
-}
-
-.problemEnlarged .left .top .simpleTableWrapper .simpleTable {
- width: 100%;
-}
-
-.problemEnlarged .left .bottom {
- position: relative;
- display: flex;
- flex-grow: 1;
- flex-direction: column;
- align-items: center;
- padding: 20px;
- box-sizing: border-box;
- background-color: rgb(238, 238, 238);
-}
-
-.problemEnlarged .left .bottom .simpleTableWrapper {
- position: relative;
- display: block;
- width: auto;
- max-width: 100%;
- margin-top: 20px;
-}
-
-.problemEnlarged .left .bottom .simpleTableWrapper .simpleTable.test tr td {
- font-family: "Consolas";
- white-space: pre;
-}
-
-.problemEnlarged .left .bottom .description {
- position: relative;
- width: 100%;
- box-sizing: border-box;
- white-space: pre-wrap;
- line-height: 1.4em;
-}
-
-.problemEnlarged .left .bottom .description > a,
-.problemEnlarged .left .bottom .description > table,
-.problemEnlarged .left .bottom .description > ul {
- display: block;
-}
-
-.problemEnlarged .left .bottom .image {
- position: relative;
- display: block;
- min-width: 30px;
- min-height: 30px;
- width: 100%;
- flex-shrink: 0;
- margin-top: 20px;
- border: 1px solid #ccc;
-}
-
-.problemEnlarged .right {
- position: relative;
- display: none;
- flex-grow: 2;
- width: calc(100% - 100px);
-}
-
-#wrapperPanel[data-size="large"] .problemEnlarged .right {
- display: block;
-}
-
-.problemEnlarged .right > .embedAttachment {
- position: relative;
- display: block;
- width: 100%;
- height: 100%;
-}
-
-@media only screen and (max-width: 800px) {
- .problemEnlarged {
- flex-direction: column;
- }
-
- .problemEnlarged .right {
- width: 100%;
- height: 50%;
- }
-}
-
-.viewLog-container {
- position: relative;
- display: flex;
- flex-direction: row;
- width: 100%;
- height: 100%;
-}
-
-.viewLog-container .header {
- position: relative;
- display: inline-flex;
- flex-direction: column;
- flex-grow: 1;
- box-sizing: border-box;
- padding-left: 10px;
- height: 100%;
-}
-
-.viewLog-container .header::before {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- width: 10px;
- height: 100%;
- background-color: #b9b9b9;
-}
-
-.viewLog-container .header .top {
- position: relative;
- display: flex;
- padding: 20px 0 10px;
- flex-direction: column;
- align-items: center;
- flex-grow: 0;
-}
-
-.viewLog-container .header .top .problemIcon {
- position: relative;
- width: 92px;
- height: 92px;
- border-radius: 50%;
-}
-
-.viewLog-container .header .top .problemName {
- position: relative;
- font-family: Nunito;
- font-size: 25px;
- font-weight: 950;
- letter-spacing: .8px;
- color: rgb(70, 70, 70);
- margin-top: 10px;
-}
-
-.viewLog-container .header .top .point {
- position: relative;
- font-size: 12px;
- color: #ecf0f1;
- letter-spacing: 0.4px;
- background-color: #27ae60;
- padding: 2px 6px;
- margin-top: 2px;
- border-radius: 4px;
-}
-
-.viewLog-container .header .bottom {
- position: relative;
- display: flex;
- flex-direction: column;
- flex-grow: 1;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.viewLog-container .header .bottom .line {
- position: relative;
- display: flex;
- flex-direction: row;
- flex-grow: 0;
- margin: 10px 0;
-}
-
-.viewLog-container .header .bottom .line .left {
- position: relative;
- display: flex;
- flex-direction: column;
- flex-grow: 1;
- box-sizing: border-box;
- padding: 0 0 0 20px;
-}
-
-.viewLog-container .header .bottom .line .left .row {
- position: relative;
- display: flex;
- flex-direction: row;
- align-items: center;
- margin: 1px 0;
-}
-
-.viewLog-container .header .bottom .line .left .row::before {
- content: "\f111";
- position: relative;
- font-family: "Font Awesome 5 Free";
- font-size: 14px;
- font-weight: 600;
- margin-right: 10px;
- width: 20px;
- text-align: center;
- color: rgba(46, 46, 46, 0.5);
-}
-
-.viewLog-container .header .bottom .line .left .problemInfo {
- margin-bottom: 10px;
-}
-
-.viewLog-container .header .bottom .line .left .problemInfo::before {
- content: "\f128";
- color: #464646;
- font-size: 21px;
- margin-right: 20px;
-}
-
-.viewLog-container .header .bottom .line .left .problemInfo .problemid,
-.viewLog-container .header .bottom .line .left .problemInfo .language {
- position: relative;
- font-family: Consolas;
- font-weight: bold;
- font-size: 18px;
- color: #464646;
-}
-
-.viewLog-container .header .bottom .line .left .problemInfo .language {
- font-family: Calibri;
- font-size: 16px;
- margin-left: 20px;
-}
-
-/*? Correct */
-
-.viewLog-container .header.correct .bottom .line .left .problemInfo .problemid,
-.viewLog-container .header.correct .bottom .line .left .problemInfo .language,
-.viewLog-container .header.correct .bottom .line .left .problemInfo::before {
- color: #39aa56;
-}
-
-.viewLog-container .header.correct::before {
- background-color: #39aa56;
-}
-
-.viewLog-container .header.correct .bottom .line .left .problemInfo::before {
- content: "\f00c";
-}
-
-/*? Passed */
-
-.viewLog-container .header.passed .bottom .line .left .problemInfo .problemid,
-.viewLog-container .header.passed .bottom .line .left .problemInfo .language,
-.viewLog-container .header.passed .bottom .line .left .problemInfo::before {
- color: #39aaa1;
-}
-
-.viewLog-container .header.passed::before {
- background-color: #39aaa1;
-}
-
-.viewLog-container .header.passed .bottom .line .left .problemInfo::before {
- content: "\f129";
-}
-
-/*? Accepted */
-
-.viewLog-container .header.accepted .bottom .line .left .problemInfo .problemid,
-.viewLog-container .header.accepted .bottom .line .left .problemInfo .language,
-.viewLog-container .header.accepted .bottom .line .left .problemInfo::before {
- color: #cfc337;
-}
-
-.viewLog-container .header.accepted::before {
- background-color: #edde3f;
-}
-
-.viewLog-container .header.accepted .bottom .line .left .problemInfo::before {
- content: "\f12a";
-}
-
-/*? Failed */
-
-.viewLog-container .header.failed .bottom .line .left .problemInfo .problemid,
-.viewLog-container .header.failed .bottom .line .left .problemInfo .language,
-.viewLog-container .header.failed .bottom .line .left .problemInfo::before {
- color: #db4545;
-}
-
-.viewLog-container .header.failed::before {
- background-color: #db4545;
-}
-
-.viewLog-container .header.failed .bottom .line .left .problemInfo::before {
- content: "\f00d";
-}
-
-.viewLog-container .header .bottom .line .left .submitTime,
-.viewLog-container .header .bottom .line .left .status,
-.viewLog-container .header .bottom .line .left .result,
-.viewLog-container .header .bottom .line .left .point {
- position: relative;
- font-family: "Calibri", "Segoe UI";
- font-size: 15px;
- color: rgb(56, 56, 56);
-}
-
-
-.viewLog-container .header .bottom .line .left .submitTime::before {
- content: "\f783";
-}
-
-.viewLog-container .header .bottom .line .left .submitted::before {
- content: "\f093";
-}
-
-.viewLog-container .header .bottom .line .left .status::before {
- content: "\f05a";
-}
-
-.viewLog-container .header .bottom .line .left .result::before {
- content: "\f682";
-}
-
-.viewLog-container .header .bottom .line .left .point::before {
- content: "\f044";
-}
-
-.viewLog-container .header .bottom .line .left .result b {
- display: inline;
- padding: 0 4px;
-}
-
-.viewLog-container .header .bottom .line .left .result b.green {
- color: #39aa56;
-}
-
-.viewLog-container .header .bottom .line .left .result b.red {
- color: #db4545;
-}
-
-.viewLog-container .header .bottom .line .left .point {
- font-weight: bold;
- font-size: 16px;
-}
-
-.viewLog-container .header .bottom .line .right {
- position: relative;
- display: inline-flex;
- flex-direction: column;
- flex-grow: 0;
- margin-right: 20px;
-}
-
-.viewLog-container .header .bottom .line .right .submitter {
- position: relative;
- display: flex;
- flex-direction: row-reverse;
- align-items: center;
- margin-bottom: 20px;
-}
-
-.viewLog-container .header .bottom .line .right .submitter .avatar {
- position: relative;
- width: 50px;
- height: 50px;
- border-radius: 50%;
- object-fit: cover;
-}
-
-.viewLog-container .header .bottom .line .right .submitter .info {
- position: relative;
- margin-right: 10px;
-}
-
-.viewLog-container .header .bottom .line .right .submitter .info .tag {
- font-family: "Calibri";
- font-size: 11px;
- letter-spacing: 0.4px;
- color: #546e7a;
- font-weight: bold;
- text-align: right;
-}
-
-.viewLog-container .header .bottom .line .right .submitter .info .name {
- font-family: Nunito;
- font-size: 16px;
- font-weight: 850;
- color: #425161;
- text-align: right;
-}
-
-.viewLog-container .header .bottom .line.log {
- flex-direction: column;
-}
-
-.viewLog-container .testList {
- position: relative;
- display: inline-block;
- flex-grow: 0;
- flex-shrink: 0;
- width: 280px;
- height: 100%;
- overflow-x: hidden;
- overflow-y: auto;
- background-color: rgb(238, 238, 238);
-}
-
-.viewLog-container .testList:empty::before {
- content: "Không tìm thấy test nào cả :(";
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- text-align: center;
- font-family: "Calibri", "Segoe UI";
- font-weight: bold;
- font-size: 16px;
- color: gray;
-}
-
-.viewLog-container .testList .item {
- position: relative;
- display: flex;
- flex-direction: column;
- align-items: center;
- width: 100%;
- box-sizing: border-box;
- padding: 10px 10px 10px 16px;
- background-color: rgb(245, 245, 245);
- counter-increment: testItem;
-
- transition: background-color 0.2s ease;
-}
-
-.viewLog-container .testList .item:hover {
- background-color: rgb(255, 255, 255);
-}
-
-.viewLog-container .testList .item::before {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- width: 6px;
- height: 100%;
- background-color: #b9b9b9
-}
-
-.viewLog-container .testList .item .line {
- position: relative;
- display: flex;
- width: 100%;
- flex-direction: row;
- align-items: center;
- flex-grow: 1;
-}
-
-.viewLog-container .testList .item .line .left {
- position: relative;
- flex-grow: 1;
-}
-
-.viewLog-container .testList .item .line .left .testid {
- position: relative;
- font-size: 15px;
- font-weight: bold;
- color: #464646;
-}
-
-.viewLog-container .testList .item .line .left .testid::before {
- content: "#"counter(testItem);
- position: relative;
- display: inline-block;
- font-size: 11px;
- width: 25px;
-}
-
-.viewLog-container .testList .item .line .left .status {
- position: relative;
- font-size: 12px;
-}
-
-.viewLog-container .testList .item .line.detail {
- position: relative;
- flex-direction: column;
- align-items: flex-start;
- margin-top: 10px;
-}
-
-.viewLog-container .testList .item .line.detail > t {
- display: block;
- width: 100%;
- font-size: 13px;
- white-space: pre-wrap;
- color: rgb(80, 80, 80);
-}
-
-.viewLog-container .testList .item .right {
- position: relative;
- display: inline-flex;
- flex-direction: column;
- align-items: flex-end;
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.viewLog-container .testList .item .right .point {
- position: relative;
- font-size: 13px;
- font-weight: bold;
- text-align: right;
- color: rgb(78, 78, 78);
-}
-
-.viewLog-container .testList .item .right .runtime {
- position: relative;
- font-size: 12px;
- color: rgb(114, 114, 114);
-}
-
-.viewLog-container .testList .item.passed::before {
- background-color: #39aa56;
-}
-
-.viewLog-container .testList .item.passed .line .left .testid {
- color: #39aa56;
-}
-
-.viewLog-container .testList .item.accepted::before {
- background-color: #edde3f;
-}
-
-.viewLog-container .testList .item.accepted .line .left .testid {
- color: #cfc337;
-}
-
-.viewLog-container .testList .item.failed::before {
- background-color: #c0392b;
-}
-
-.viewLog-container .testList .item.failed .line .left .testid {
- color: #c0392b;
-}
-
-
-/* Mobile Responsive */
-
-@media only screen and (max-width: 800px) {
- #wrapper #wrapp {
- width: 100%;
- height: 100%;
- max-height: unset;
- }
-
- .viewLog-container {
- flex-direction: column;
- }
-
- .viewLog-container .header {
- height: unset;
- }
-
- .viewLog-container .testList {
- width: 100%;
- height: unset;
- }
-
- .viewLog-container .testList .item {
- padding-left: 20px;
- }
-
- .viewLog-container .testList .item::before {
- width: 10px;
- }
-}
-
-.cpanel-container,
-.publicFiles-container {
- position: relative;
- display: block;
- width: 100%;
- height: 100%;
- border: unset;
- overflow: hidden;
-}
-
-.rateLimitedClock {
- display: flex;
- flex-direction: row;
- align-items: flex-end;
- justify-content: center;
- font-size: 25px;
- font-weight: bold;
-}
-
-.rateLimitedClock > .inner {
- font-size: 13px;
- margin: 0 0 4px 4px;
-}
-
-.disconnectedRetry {
- display: flex;
- flex-direction: row;
- align-items: flex-end;
- justify-content: center;
- font-size: 13px;
- font-weight: bold;
- overflow: hidden;
-}
-
-.disconnectedRetry > .inner {
- font-size: 25px;
- margin: 0 0 0 4px;
- line-height: 24px;
-}
-
-#unsecureProtocolWarning > .right::after {
- content: "\f13e";
- color: rgb(185, 5, 50);
- font-size: 24px;
-}
-
-footer {
- position: relative;
- box-sizing: border-box;
- width: 100%;
- padding: 20px;
- display: block;
- float: left;
-}
-
-footer .header {
- position: relative;
- display: block;
- padding-top: 10px;
- padding-bottom: 16px;
-}
-
-footer .header .logo {
- position: relative;
- display: block;
- margin: auto;
- margin-bottom: 12px;
- background-image: url("/assets/img/icon.webp");
- background-position: center;
- background-size: cover;
- border-radius: 50%;
- width: 82px;
- height: 82px;
-}
-
-footer .header .button {
- position: relative;
- display: flex;
- flex-direction: row;
- margin-top: 20px;
-}
-
-footer .header .button button {
- flex-grow: 1;
- margin: 0 5px;
-}
-
-footer .header > t {
- position: relative;
- display: block;
- text-align: center;
- font-family: "Calibri";
- font-weight: normal;
- font-size: 13px;
- padding-top: 2px;
-}
-
-footer .header > t.title {
- font-family: "Nunito";
- font-size: 17px;
- font-weight: 750;
- text-transform: uppercase;
- color: #4d6783;
-}
-
-footer .header > t.version {
- font-weight: bold;
- color: #3a5068;
-}
-
-footer .header > t.subtitle {
- color: rgb(90, 90, 90);
-}
-
-footer .simpleTable {
- width: 100%;
- max-width: 220px;
- margin: auto;
- margin-bottom: 10px;
-}
-
-footer .badge {
- position: relative;
- padding-bottom: 10px;
-}
-
-footer .description {
- display: block;
- font-weight: lighter;
- font-size: 14px;
- color: #333333;
- padding: 2px 10px;
-}
-
-footer t.contact {
- position: relative;
- display: block;
- padding: 10px 0 0 10px;
- font-weight: bold;
-}
-
-footer ul.contact {
- position: relative;
- box-sizing: border-box;
- display: block;
- list-style: none;
- margin: unset;
- padding: unset;
-}
-
-footer ul.contact li {
- position: relative;
- padding-left: 40px;
- padding-bottom: 2px;
- color: rgb(0, 0, 0);
- font-weight: lighter;
- font-size: 14px;
-}
-
-footer ul.contact li t,
-footer ul.contact li a {
- font-weight: bold;
-}
-
-footer ul.contact li::before {
- content: "";
- position: absolute;
- display: inline-block;
- top: 50%;
- transform: translate(calc(-100% - 10px), -50%);
- font-family: "Font Awesome 5 Free";
- font-size: 14px;
- font-weight: 600;
-}
-
-footer ul.contact li.tel::before {
- content: "\f095";
- color: rgb(53, 172, 53);
-}
-
-footer ul.contact li.email::before {
- content: "\f0e0";
- color: #2c3e50;
-}
-
-footer ul.contact li.facebook::before {
- content: "\f09a";
- font-family: "Font Awesome 5 Brands";
- color: #4267B2;
-}
-
-footer ul.contact li.github::before {
- content: "\f092";
- font-family: "Font Awesome 5 Brands";
- color: #2c3e50;
-}
-
-@keyframes spin {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(360deg);
- }
-}
-
-@media only screen and (max-width: 750px) {
- footer .left {
- max-width: 100%;
- }
-
- footer ul.contact {
- float: left;
- max-width: 100%;
- }
-}
-
-/* Unset all Transition */
-body.disableTransition * {
- transition: unset!important;
-}
-
-/* Element to hide when user is not admin */
-
-body.user span#user_profile div.body ul#usett_left_panel li.navlink {
- display: none!important;
- visibility: hidden!important;
-}
-
-/* Element to hide when user is guest */
-
-body.guest #uploadp,
-body.guest #logp,
-body.guest span#user_profile {
- display: none!important;
- visibility: hidden!important;
+/*
+? |-----------------------------------------------------------------------------------------------|
+? | /static/css/core.css |
+? | |
+? | Copyright (c) 2018-2020 Belikhun. All right reserved |
+? | Licensed under the MIT License. See LICENSE in the project root for license information. |
+? |-----------------------------------------------------------------------------------------------|
+*/
+
+body {
+ position: relative;
+ background-color: #666666;
+ font-family: "Open Sans", "Segoe UI", "Calibri", Tahoma, Geneva, Verdana, sans-serif;
+ margin: 0 0 20px;
+ overflow: hidden;
+ width: 100vw;
+ height: 100vh;
+}
+
+/* Change Autocomplete styles in Chrome*/
+input:-webkit-autofill {
+ background-color: rgba(0, 0, 0, 0);
+}
+
+body #container {
+ position: absolute;
+ display: block;
+ width: 100vw;
+ top: 56px;
+ bottom: 0;
+ background-color: #ebebeb;
+ box-sizing: border-box;
+ padding: 5px;
+ overflow-x: hidden;
+ overflow-y: auto;
+ transition:
+ transform 0.4s ease,
+ filter 0.4s ease;
+}
+
+body #container .flexRow {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ height: 100%;
+ min-height: 420px;
+}
+
+body #container .flexColumn {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+}
+
+body #container .flexColumn.large {
+ flex-grow: 1;
+}
+
+body #container .flexColumn.small {
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.navBar.showBottom ~ #userSettings,
+.navBar.showBottom ~ #container {
+ top: 94px;
+}
+
+.contestTimer {
+ display: none;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 4px 0 8px;
+}
+
+.navBar.showBottom .contestTimer {
+ display: flex;
+ height: 38px;
+}
+
+.contestTimer::before {
+ content: "";
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 10px;
+ right: 10px;
+ height: 1px;
+ background-color: rgba(122, 122, 122, 0.2);
+}
+
+.contestTimer #contestTimeState {
+ position: relative;
+ font-size: 13px;
+ text-align: center;
+ text-transform: uppercase;
+ letter-spacing: .4px;
+ color: rgb(90, 90, 90);
+}
+
+.contestTimer .reload {
+ position: relative;
+ display: inline-block;
+ font-size: 18px;
+ font-weight: bold;
+ cursor: pointer;
+ color: rgba(98, 98, 98, 0.54);
+ transition: color 0.2s ease;
+}
+
+.contestTimer #contestTimeState,
+.contestTimer .reload,
+.contestTimer separator {
+ margin-top: 4px;
+}
+
+.contestTimer .reload:hover {
+ color: rgba(98, 98, 98, 0.82);
+}
+
+.contestTimer .progressBar {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ margin-top: 28px;
+ height: 4px;
+}
+
+.contestTimer .progressBar > .left,
+.contestTimer .progressBar > .right {
+ transform: translateY(calc(-100% - 4px));
+}
+
+.contestTimer .progressBar > .left {
+ left: 10px;
+}
+
+.contestTimer .progressBar > .right {
+ right: 10px;
+}
+
+@media only screen and (max-width: 800px) {
+ .navBar.showBottom .contestTimer #contestTimeState,
+ .navBar.showBottom .contestTimer #contestTimeState + separator {
+ display: none;
+ }
+}
+
+panel {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 350px;
+ height: auto;
+ background-color: white;
+ box-shadow: 0 0 5px rgba(98, 98, 98, 0.2);
+ margin: 5px;
+ box-sizing: border-box;
+}
+
+panel .head {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ width: 100%;
+ height: 40px;
+ padding: 10px 10px 10px 20px;
+ box-sizing: border-box;
+ background-color: rgb(238, 240, 243);
+ border-bottom: 1px solid #e6e6e6;
+}
+
+panel .head .le {
+ position: relative;
+ display: inline-block;
+ flex: 1 1 0;
+
+ font-family: Calibri;
+ font-size: 16px;
+ font-weight: bold;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ color: rgba(56, 56, 56, 0.8);
+}
+
+panel .head .ri {
+ position: relative;
+ display: flex;
+ align-items: center;
+ flex: 0 0 0;
+}
+
+panel .head .ri > i {
+ position: relative;
+ display: inline;
+ font-size: 18px;
+ font-weight: bold;
+ color: rgba(98, 98, 98, 0.54);
+ padding: 0 2px;
+ cursor: pointer;
+ transition: color 0.2s ease;
+}
+
+panel .head .ri > i.bak {
+ font-size: 20px;
+}
+
+panel .head .ri > i:hover {
+ color: rgba(98, 98, 98, 0.82);
+}
+
+panel .main {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ height: calc(100% - 40px);
+ margin: unset;
+ padding: unset;
+ overflow: auto;
+ box-sizing: border-box;
+ background-color: #fafafa;
+}
+
+panel .main:empty::before,
+panel .main .showEmpty:empty::before {
+ content: "\f51b";
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, calc(-50% - 22px));
+ font-family: "Font Awesome 5 Free";
+ font-weight: 900;
+ font-size: 72px;
+ color: rgb(192, 192, 192);
+}
+
+panel .main:empty::after,
+panel .main .showEmpty:empty::after {
+ content: "Không có dữ liệu";
+ position: absolute;
+ display: block;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, calc(-50% + 38px));
+ font-weight: 600;
+ font-size: 14px;
+ text-align: center;
+ color: rgb(192, 192, 192);
+}
+
+/** Panel Layout: Logged in */
+
+#problemp {
+ flex-grow: 1;
+ width: auto;
+ height: calc(100% - 10px);
+}
+
+#uploadp {
+ height: 190px;
+}
+
+#logp {
+ flex-grow: 1;
+ height: calc(100% - 220px);
+}
+
+#rankp {
+ flex-grow: 1;
+}
+
+@media only screen and (max-width: 1130px) {
+ body #container .flexRow {
+ flex-wrap: wrap;
+ height: auto;
+ }
+
+ body #container .flexRow:first-child {
+ min-height: 100%;
+ }
+
+ body #container .flexRow:first-child > .flexColumn.large {
+ min-height: calc(100vh - 90px);
+ }
+
+ body #container .flexRow:last-child {
+ height: 100%;
+ }
+
+ body #container .flexRow:last-child > #rankp {
+ max-height: calc(100% - 10px);
+ }
+
+ body #container .flexColumn {
+ width: 100%;
+ }
+
+ #uploadp,
+ #logp {
+ width: auto;
+ }
+
+ #logp {
+ height: auto;
+ max-height: calc(100vh - 90px);
+ }
+}
+
+/** Panel Layout: Guest mode */
+
+body.guest #container {
+ display: flex;
+ flex-direction: column;
+}
+
+body.guest #container > .flexRow:nth-child(1) {
+ order: 2;
+ flex-grow: 0;
+ min-height: 100%;
+}
+
+body.guest #container > .flexRow:nth-child(2) {
+ order: 1;
+ min-height: 100%;
+}
+
+body.guest #problemp {
+ height: 200px;
+ flex-grow: 1;
+}
+
+body.guest #problemp.hide {
+ display: none;
+}
+
+#wrapper {
+ position: fixed;
+ display: none;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 60px 0 20px;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.6);
+ z-index: 2;
+}
+
+#wrapper.show {
+ display: flex;
+}
+
+#wrapper #wrapperPanel {
+ position: relative;
+ width: calc(100% - 100px);
+ height: calc(100% - 20px);
+ max-width: 1000px;
+ max-height: 640px;
+ margin: unset;
+}
+
+#wrapper #wrapperPanel[data-size="small"] {
+ width: calc(100% - 300px);
+ max-width: 720px;
+ min-width: 420px;
+ margin: unset;
+}
+
+#wrapper #wrapperPanel[data-size="large"] {
+ width: calc(100% - 80px);
+ max-width: unset;
+ max-height: 100%;
+ margin: unset;
+}
+
+#logp div.main:empty::before {
+ content: "\f564";
+}
+
+#logp .logItemContainer {
+ position: relative;
+}
+
+#logp .logItemContainer .logItem {
+ position: relative;
+ box-sizing: border-box;
+ width: calc(100% - 25px);
+ height: 48px;
+ margin-left: 25px;
+ padding-right: 25px;
+}
+
+#logp .logItemContainer .logItem .h {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ border-bottom: 1px solid #e6e6e6;
+}
+
+#logp .logItemContainer .logItem .h .l {
+ position: relative;
+ display: inline-block;
+ flex-grow: 1;
+ overflow: hidden;
+}
+
+#logp .logItemContainer .logItem .h .l .t {
+ font-size: 10px;
+ font-weight: normal;
+ color: rgba(59, 71, 82, 0.7);
+}
+
+#logp .logItemContainer .logItem .h .l .n {
+ font-size: 13px;
+ font-weight: bold;
+ color: #585858;
+}
+
+#logp .logItemContainer .logItem.scored .h .l .n {
+ color: #1124c8;
+}
+
+#logp .logItemContainer .logItem.correct .h .l .n {
+ color: #39aa56;
+}
+
+#logp .logItemContainer .logItem.passed .h .l .n {
+ color: #0ca3be;
+}
+
+#logp .logItemContainer .logItem.accepted .h .l .n {
+ color: #b9ab14;
+}
+
+#logp .logItemContainer .logItem.failed .h .l .n {
+ color: #db4545;
+}
+
+#logp .logItemContainer .logItem .h .r {
+ position: relative;
+ display: flex;
+ flex-grow: 0;
+ flex-direction: column;
+ align-items: flex-end;
+ justify-content: center;
+ margin-right: 10px;
+}
+
+#logp .logItemContainer .logItem .h .r t {
+ color: rgba(98, 98, 98, 0.7);
+ font-size: 11px;
+ letter-spacing: 0.01em;
+}
+
+#logp .logItemContainer .logItem .h .r .s {
+ font-weight: bold;
+ color: rgba(82, 82, 82, 0.7);
+ font-size: 11px;
+}
+
+#logp .logItemContainer .logItem .d {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 25px;
+ height: 100%;
+ cursor: pointer;
+ background-color: #f8f8f8;
+ color: #c0c0c0;
+ transition: all 0.2s ease;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-decoration: none;
+}
+
+#logp .logItemContainer .logItem .d:not(.link) {
+ cursor: not-allowed;
+}
+
+#logp .logItemContainer .logItem .d::before {
+ content: "open_in_browser";
+ font-family: "Material Icons";
+ font-weight: lighter;
+ font-size: 16px;
+}
+
+#logp .logItemContainer .logItem .d:hover {
+ background-color: #f1f1f1;
+ color: #6e6e6e;
+}
+
+#logp .logItemContainer .logItem.queue .h .l .n {
+ color: #8710cc;
+}
+
+#logp .logItemContainer .logItem.queue .d::before {
+ content: "\f2f1";
+ font-family: "Font Awesome 5 Free";
+ animation: spin 1s linear 0s infinite forwards;
+ font-weight: 600;
+ font-size: 12px;
+}
+
+#logp .logItemContainer .logItem.judging .h .l .n {
+ color: #c811c8;
+}
+
+#logp .logItemContainer .logItem.judging .d::before {
+ content: "\f0e3";
+ font-family: "Font Awesome 5 Free";
+ animation: spin 1s linear 0s infinite forwards;
+ font-weight: 600;
+ font-size: 12px;
+}
+
+#logp .logItemContainer .logItem.queue .d,
+#logp .logItemContainer .logItem.judging .d {
+ cursor: default;
+}
+
+#uploadp .fileupload-container {
+ overflow: hidden;
+}
+
+#uploadp .fileupload-container #submitDropzone {
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin: 20px;
+ padding: 10px;
+ box-sizing: border-box;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ border: 2px dotted #ccc;
+ border-radius: 4px;
+ opacity: 1;
+ z-index: 1;
+ transition: all 0.4s ease;
+ transition-property: color, background-color, opacity;
+}
+
+#uploadp .fileupload-container #submitDropzone.drag {
+ background-color: #ccc;
+ color: white;
+}
+
+#uploadp .fileupload-container #submitDropzone.hide {
+ opacity: 0;
+}
+
+#uploadp .fileupload-container #submitDropzone.hide+.info {
+ opacity: 1;
+}
+
+#uploadp .fileupload-container #submitDropzone #submitInput {
+ display: none;
+}
+
+#uploadp .fileupload-container #submitDropzone .title {
+ color: rgb(104, 104, 104);
+ font-size: 16px;
+ font-weight: bold;
+ text-transform: uppercase;
+}
+
+#uploadp .fileupload-container #submitDropzone .sub {
+ color: rgb(128, 128, 128);
+ font-size: 12px;
+ margin: 4px 0;
+}
+
+#uploadp .fileupload-container .info {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ padding: 20px;
+ transition: all 0.4s ease;
+ opacity: 0;
+}
+
+#uploadp .fileupload-container .info #submitStatus {
+ position: relative;
+ display: block;
+ padding-bottom: 2px;
+ box-sizing: border-box;
+ width: 100%;
+ font-size: 20px;
+ font-weight: 100;
+ text-align: center;
+ text-transform: uppercase;
+ color: rgb(136, 136, 136);
+}
+
+#uploadp .fileupload-container .info #submitFileName {
+ position: relative;
+ display: block;
+ width: 100%;
+ font-size: 13px;
+ font-weight: 500;
+ text-align: center;
+ color: rgb(93, 93, 93);
+}
+
+#uploadp .fileupload-container .info .progressBar {
+ position: absolute;
+ bottom: 24px;
+ left: 50%;
+ width: 90%;
+ transform: translateX(-50%);
+}
+
+.problemSettings {
+ padding: unset;
+ height: 220px;
+}
+
+.problemSettings .header {
+ height: 40px;
+ background-color: #F5F5F6;
+ display: flex;
+ align-items: center;
+ padding: 0 10px;
+}
+
+.problemSettings .header div span {
+ padding: 0 3px;
+ cursor: pointer;
+}
+
+.problemSettings .header div span::before {
+ font-family: "Font Awesome 5 Free";
+ font-size: 14px;
+ font-weight: 600;
+ color: rgba(98, 98, 98, 0.54);
+ transition: color 0.2s ease;
+}
+
+.problemSettings .header div span:hover::before {
+ color: rgba(98, 98, 98, 0.82)
+}
+
+.problemSettings .header .left .back::before {
+ content: "\f104";
+}
+
+.problemSettings .header .right .add::before {
+ content: "\f067";
+ font-size: 12px;
+}
+
+.problemSettings .header .right .check::before {
+ content: "\f00c";
+ font-size: 12px;
+}
+
+.problemSettings .header .title {
+ position: absolute;
+ left: 50%;
+ color: #a5a5a5;
+ transform: translateX(-50%);
+}
+
+.problemSettings .header .right {
+ position: absolute;
+ right: 10px;
+}
+
+.problemSettings .problemsContainer {
+ position: relative;
+ height: calc(100% - 46px);
+ background-color: transparent;
+ overflow: hidden;
+}
+
+.problemSettings .problemsContainer .problemsList {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ margin: unset;
+ padding: unset;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ transition: all 0.4s ease;
+}
+
+.problemSettings .problemsContainer .problemsList li.item {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ width: 100%;
+ height: 64px;
+ box-sizing: border-box;
+ padding: 0 10px;
+ border-bottom: unset;
+}
+
+.problemSettings .problemsContainer .problemsList li.item:hover {
+ background-color: rgba(245, 245, 246, 0.4);
+}
+
+.problemSettings .problemsContainer .problemsList li.item:after {
+ content: unset;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .icon {
+ position: relative;
+ flex-grow: 0;
+ flex-shrink: 0;
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .title {
+ position: relative;
+ flex-grow: 1;
+ flex-shrink: 1;
+ list-style: none;
+ margin: unset;
+ padding: 0 0 0 10px;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .title .id {
+ font-size: 11px;
+ color: rgba(73, 73, 73, 0.6);
+ letter-spacing: 0.4px;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .title .name {
+ font-size: 14px;
+ color: #494949;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action {
+ position: relative;
+ display: block;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action span {
+ padding: 0 4px;
+ cursor: pointer;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action span::before {
+ font-family: "Font Awesome 5 Free";
+ font-size: 16px;
+ font-weight: 600;
+ color: #95a5a6;
+ transition: color 0.1s ease;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action span.delete::before {
+ content: "\f1f8";
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action span.delete:hover::before {
+ color: #e74c3c;
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action span.edit::before {
+ content: "\f304";
+}
+
+.problemSettings .problemsContainer .problemsList li.item .action span.edit:hover::before {
+ color: #3498db;
+}
+
+.problemSettings .problemsContainer .problemsList.hide {
+ transform: translateX(-100%);
+}
+
+.problemSettings .problemsContainer .problem {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ right: 0;
+ overflow: auto;
+ padding: 0 10px;
+ box-sizing: border-box;
+ transform: translateX(100%);
+ transition: all 0.4s ease;
+}
+
+.problemSettings .problemsContainer .problemsList.hide + .problem {
+ transform: unset;
+}
+
+.problemSettings .problemsContainer .problem #problemEdit_desc {
+ resize: none;
+ height: 160px;
+}
+
+.problemSettings .problemsContainer .problem #problemEdit_deleteImage,
+.problemSettings .problemsContainer .problem #problemEdit_deleteAttachment {
+ width: 100%;
+ margin-top: 8px;
+}
+
+.problemSettings .problemsContainer .problem .test-container {
+ position: relative;
+ margin-bottom: 20px;
+ border-bottom: 1px solid rgba(39, 39, 39, 0.4);
+ padding-bottom: 1px;
+ transition: 0.3s;
+}
+
+.problemSettings .problemsContainer .problem .test-container:hover {
+ border-bottom: 2px solid #4285f4;
+ padding-bottom: 0;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test {
+ display: block;
+ font-size: 8px;
+ font-weight: 700;
+ color: #8b8b8b;
+ text-transform: uppercase;
+ margin: 12px 0;
+ transition: 0.3s;
+}
+
+.problemSettings .problemsContainer .problem .test-container:hover .test {
+ color: #4285f4;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list {
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+ display: block;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list .cell {
+ position: relative;
+ height: 60px;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list .cell textarea {
+ position: relative;
+ resize: none;
+ border: unset;
+ background-color: transparent;
+ box-sizing: border-box;
+ width: calc(50% - 15px);
+ height: 100%;
+ font-family: "Consolas";
+ border-bottom: 1px solid rgba(39, 39, 39, 0.4);
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete {
+ position: absolute;
+ display: block;
+ right: 0;
+ top: 0;
+ width: 24px;
+ height: 100%;
+ cursor: pointer;
+ transition: 0.2s;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete:hover {
+ background-color: rgba(202, 202, 202, 0.2);
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete::before {
+ content: "\f2ed";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ font-family: "Font Awesome 5 Free";
+ font-size: 14px;
+ font-weight: 600;
+ color: #95a5a6;
+ transition: 0.2s;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-list .cell .delete:hover::before {
+ color: #e74c3c;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-add {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 60px;
+ cursor: pointer;
+ transition: 0.2s;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-add:hover {
+ background-color: rgba(202, 202, 202, 0.2);
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-add::after {
+ content: "\f067";
+ font-family: "Font Awesome 5 Free";
+ font-size: 18px;
+ font-weight: 600;
+ color: #95a5a6;
+ transition: 0.2s;
+}
+
+.problemSettings .problemsContainer .problem .test-container .test-add:hover::after {
+ color: #494949;
+}
+
+.problemSettings .problemsContainer .problem button[type="submit"] {
+ display: none;
+}
+
+#userSettings #usett_panelContainer .panel .container .syslogs-settings {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+}
+
+.syslogs-settings .logsContainer {
+ position: relative;
+ flex-grow: 1;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.syslogs-settings .logsContainer .log {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ background-color: rgba(224, 224, 224, 0.8);
+ counter-increment: log-item;
+ cursor: pointer;
+
+ transition: background-color 0.3s ease;
+}
+
+.syslogs-settings .logsContainer .log:hover {
+ background-color: rgba(232, 232, 232, 0.8);
+}
+
+.syslogs-settings .logsContainer .log .level {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-grow: 0;
+ color: rgb(82, 82, 82);
+ background-color: rgb(236, 236, 236);
+ min-width: 100px;
+ padding: 0 10px 0 40px;
+ font-size: 14px;
+ font-weight: bold;
+ box-sizing: border-box;
+ overflow: hidden;
+ transition: all 0.3s ease;
+ transition-property: padding, background-color;
+}
+
+.syslogs-settings .logsContainer .log.enlarge .level {
+ padding: 0 20px;
+ background-color: rgb(242, 242, 242);
+}
+
+.syslogs-settings .logsContainer .log .level > i {
+ position: absolute;
+ top: 50%;
+ left: 10px;
+ transform: translateY(-50%);
+ font-weight: bold;
+ font-size: 10px;
+ font-style: normal;
+
+ transition: all 0.3s ease;
+}
+
+.syslogs-settings .logsContainer .log.enlarge .level > i {
+ left: 50%;
+ transform: translate(-50%, calc(-50% + 22px));
+}
+
+.syslogs-settings .logsContainer .log .detail {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ overflow-x: auto;
+ overflow-y: hidden;
+ padding: 10px 40px 10px 20px;
+ box-sizing: border-box;
+ flex-grow: 2;
+ border-left: 2px solid rgb(165, 165, 165);
+}
+
+.syslogs-settings .logsContainer .log .detail::before {
+ content: "\f107";
+ position: absolute;
+ top: 50%;
+ right: 10px;
+ transform: translateY(-50%);
+ display: inline-block;
+
+ font-family: "Font Awesome 5 Free";
+ font-size: 14px;
+ font-weight: 900;
+ color: rgb(104, 104, 104);
+
+ transition: transform 0.3s ease;
+}
+
+.syslogs-settings .logsContainer .log.enlarge .detail::before {
+ transform: translateY(-50%) rotate(180deg);
+}
+
+.syslogs-settings .logsContainer .log .detail .text {
+ position: relative;
+ display: block;
+ font-family: "Consolas", "Calibri", "Segoe UI";
+ font-size: 15px;
+ font-weight: normal;
+ color: rgb(56, 56, 56);
+}
+
+.syslogs-settings .logsContainer .log .detail .info {
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 0;
+ box-sizing: border-box;
+
+ overflow-x: auto;
+ overflow-y: hidden;
+
+ transition: height 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);
+}
+
+.syslogs-settings .logsContainer .log .detail .info::before {
+ content: "";
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 8px;
+}
+
+.syslogs-settings .logsContainer .log.enlarge .detail .info {
+ height: 54px;
+}
+
+.syslogs-settings .logsContainer .log .detail .info t {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ font-family: "Calibri", "Segoe UI";
+ font-size: 13px;
+ color: rgb(90, 90, 90);
+}
+
+.syslogs-settings .logsContainer .log .detail .info t::before {
+ content: "\f111";
+ position: relative;
+ display: inline-block;
+ padding-right: 6px;
+
+ font-family: "Font Awesome 5 Free";
+ font-size: 13px;
+ font-weight: 900;
+}
+
+.syslogs-settings .logsContainer .log .detail .info .client {
+ font-weight: bold;
+}
+
+.syslogs-settings .logsContainer .log .detail .info .client::before {
+ content: "\f2bd";
+}
+
+.syslogs-settings .logsContainer .log .detail .info .timestamp::before {
+ content: "\f017";
+}
+
+.syslogs-settings .logsContainer .log .detail .info .module::before {
+ content: "\f466";
+}
+
+.syslogs-settings .logsContainer .log.okay .detail {
+ border-left-color: rgb(124, 194, 129);
+}
+
+.syslogs-settings .logsContainer .log.okay .level {
+ color: rgb(28, 172, 38);
+}
+
+.syslogs-settings .logsContainer .log.warn .detail {
+ border-left-color: rgb(190, 184, 92);
+}
+
+.syslogs-settings .logsContainer .log.warn .level {
+ color: rgb(163, 155, 46);
+}
+
+.syslogs-settings .logsContainer .log.errr .detail {
+ border-left-color: rgb(223, 150, 150);
+}
+
+.syslogs-settings .logsContainer .log.errr .level {
+ color: rgb(233, 67, 67);
+}
+
+.syslogs-settings .logsContainer .log.verb .detail {
+ border-left-color: rgb(191, 149, 211);
+}
+
+.syslogs-settings .logsContainer .log.verb .level {
+ color: rgb(148, 15, 209);
+}
+
+.syslogs-settings .navigation {
+ position: relative;
+ display: flex;
+ align-items: center;
+ flex-grow: 0;
+ flex-direction: row;
+ width: 100%;
+ padding: 10px;
+ box-sizing: border-box;
+ background-color: rgb(242, 242, 242);
+}
+
+.syslogs-settings .navigation .left,
+.syslogs-settings .navigation .right {
+ position: relative;
+ flex: 1 0 0;
+ font-size: 11px;
+}
+
+.syslogs-settings .navigation .right {
+ text-align: right;
+}
+
+.syslogs-settings .navigation .middle {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-grow: 2;
+}
+
+.syslogs-settings .navigation .middle .icon {
+ position: relative;
+ display: inline-block;
+ cursor: pointer;
+ padding: 0 18px;
+}
+
+.syslogs-settings .navigation .middle .icon::before {
+ content: "\f111";
+ position: relative;
+ display: inline-block;
+
+ font-family: "Font Awesome 5 Free";
+ font-size: 22px;
+ font-weight: 900;
+ color: rgb(158, 158, 158);
+ transition: color 0.2s ease;
+}
+
+.syslogs-settings .navigation .middle .icon:hover::before {
+ color: #f368e0;
+}
+
+.syslogs-settings .navigation .middle .buttonLeft::before {
+ content: "\f104";
+}
+
+.syslogs-settings .navigation .middle .buttonRight::before {
+ content: "\f105";
+}
+
+.syslogs-settings .navigation .middle .currentPage {
+ position: relative;
+ font-size: 13px;
+ font-weight: bold;
+ line-height: 18px;
+}
+
+
+#problemp .problemsContainer {
+ overflow: hidden;
+}
+
+#problemp .problemsContainer .problemsList:empty::before {
+ content: "\f51b";
+}
+
+#problemp .problemsContainer .problemsList:empty::after {
+ content: "Không tìm thấy đề hoặc chưa bắt đầu kì thi";
+}
+
+#problemp .problemsContainer .problemsList {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: row;
+ justify-content: stretch;
+ width: 100%;
+ max-height: 100%;
+ box-sizing: border-box;
+ padding: 10px;
+ overflow: auto;
+
+ animation: problemsListShow 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
+}
+
+#problemp .problemsContainer .problemsList:empty {
+ height: 100%;
+}
+
+#problemp .problemsContainer .problemsList .item {
+ position: relative;
+ display: flex;
+ flex-grow: 0;
+ flex-shrink: 0;
+ flex-direction: row;
+ align-items: center;
+ box-sizing: border-box;
+ cursor: pointer;
+ margin: 10px;
+ padding: 10px 40px 10px 20px;
+ border-radius: 12px;
+ background-color: rgba(238, 238, 238, 0.6);
+}
+
+#problemp .problemsContainer .problemsList .item:hover {
+ background-color: rgba(124, 124, 124, 0.1);
+}
+
+#problemp .problemsContainer .problemsList .item:after {
+ content: "\f105";
+ position: absolute;
+ font-family: "Font Awesome 5 Free";
+ font-size: 18px;
+ font-weight: 600;
+ color: #95a5a6;
+ right: 20px;
+}
+
+#problemp .problemsContainer .problemsList .item .icon {
+ position: relative;
+ display: inline-block;
+ flex: 0 0 1;
+ width: 50px;
+ height: 50px;
+ border-radius: 25px;
+ object-fit: cover;
+}
+
+#problemp .problemsContainer .problemsList .item .title {
+ display: inline-block;
+ flex: 1 1 0;
+ list-style: none;
+ margin: unset;
+ padding: 0 0 0 10px;
+}
+
+#problemp .problemsContainer .problemsList .item .title .name {
+ position: relative;
+ font-family: Nunito;
+ font-size: 16px;
+ font-weight: 800;
+ color: #494949;
+}
+
+#problemp .problemsContainer .problemsList .item .title .point {
+ position: relative;
+ display: inline-block;
+ font-size: 11px;
+ color: #ecf0f1;
+ letter-spacing: 0.4px;
+ background-color: #27ae60;
+ padding: 2px 6px;
+ margin-top: 2px;
+ border-radius: 4px;
+}
+
+#problemp .problemsContainer .problemsList .item[disabled="true"] {
+ background-color: rgba(243, 184, 205, 0.6);
+}
+
+#problemp .problemsContainer .problem {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ right: 0;
+ box-sizing: border-box;
+ padding: 10px;
+ overflow-x: hidden;
+ overflow-y: auto;
+ background-color: inherit;
+
+ animation: problemViewerHide 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
+}
+
+@keyframes problemsListShow {
+ 0% {
+ visibility: hidden;
+ }
+
+ 1% {
+ visibility: visible;
+ transform: scale(.9);
+ filter: blur(6px) brightness(.9);
+ opacity: 0;
+ }
+
+ 100% {
+ visibility: visible;
+ transform: scale(1);
+ filter: blur(0) brightness(1);
+ opacity: 1;
+ }
+}
+
+@keyframes problemsListHide {
+ 0% {
+ transform: scale(1);
+ filter: blur(0) brightness(1);
+ opacity: 1;
+ }
+
+ 99% {
+ transform: scale(.9);
+ filter: blur(6px) brightness(.9);
+ opacity: 0;
+ }
+
+ 100% {
+ visibility: hidden;
+ }
+}
+
+@keyframes problemViewerShow {
+ 0% {
+ visibility: hidden;
+ transform: translateX(100%);
+ }
+
+ 1% {
+ visibility: visible;
+ transform: scale(1.1);
+ filter: brightness(.9);
+ opacity: 0;
+ }
+
+ 100% {
+ visibility: visible;
+ transform: scale(1);
+ filter: brightness(1);
+ opacity: 1;
+ }
+}
+
+@keyframes problemViewerHide {
+ 0% {
+ transform: scale(1);
+ filter: brightness(1);
+ opacity: 1;
+ }
+
+ 99% {
+ transform: scale(1.1);
+ filter: brightness(.9);
+ opacity: 0;
+ }
+
+ 100% {
+ visibility: hidden;
+ transform: translateX(100%);
+ }
+}
+
+#problemp .problemsContainer .problemsList.hide {
+ animation: problemsListHide 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
+}
+
+#problemp .problemsContainer .problemsList.hide + .problem {
+ animation: problemViewerShow 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0s 1 normal forwards;
+}
+
+#problemp .problemsContainer .problem .name {
+ display: block;
+ text-align: center;
+ font-family: Nunito;
+ font-size: 19px;
+ font-weight: 900;
+ letter-spacing: .8px;
+ color: #34495e;
+}
+
+#problemp .problemsContainer .problem .point {
+ display: block;
+ text-align: center;
+ font-size: 12px;
+ font-weight: bold;
+ color: #287548;
+ letter-spacing: 0.4px;
+}
+
+#problemp .problemsContainer .problem .enlarge,
+#problemp .problemsContainer .problem .close {
+ position: absolute;
+ display: block;
+ top: 20px;
+ right: 50px;
+}
+
+#problemp .problemsContainer .problem .enlarge::before,
+#problemp .problemsContainer .problem .close::before {
+ content: "\f360";
+ position: relative;
+ font-family: "Font Awesome 5 Free";
+ font-size: 22px;
+ font-weight: 600;
+ cursor: pointer;
+ color: rgb(92, 92, 92);
+}
+
+#problemp .problemsContainer .problem .close {
+ right: 20px;
+}
+
+#problemp .problemsContainer .problem .close::before {
+ content: "\f00d";
+}
+
+#problemp .problemsContainer .problem .info {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ margin: 6px 0 20px;
+}
+
+#problemp .problemsContainer .problem .info .filename::before {
+ content: "ID: ";
+}
+
+#problemp .problemsContainer .problem .info.general {
+ margin-bottom: 4px;
+}
+
+#problemp .problemsContainer .problem .info.IO > t {
+ font-family: "Consolas";
+ font-weight: bold;
+ font-size: 16px;
+}
+
+#problemp .problemsContainer .problem .info.IO .input::before,
+#problemp .problemsContainer .problem .info.IO .output::before {
+ position: relative;
+ display: inline-block;
+ font-family: "Open Sans";
+ font-weight: normal;
+ font-size: 13px;
+ margin-right: 6px;
+}
+
+#problemp .problemsContainer .problem .info.IO .input::before {
+ content: "Input:";
+}
+
+#problemp .problemsContainer .problem .info.IO .output::before {
+ content: "Output:";
+}
+
+#problemp .problemsContainer .problem .description {
+ white-space: pre-wrap;
+ margin: 0 20px;
+}
+
+#problemp .problemsContainer .problem .description > a,
+#problemp .problemsContainer .problem .description > table,
+#problemp .problemsContainer .problem .description > ul {
+ display: block;
+}
+
+#problemp .problemsContainer .problem table tr:hover {
+ background-color: rgba(126, 126, 126, 0.1);
+}
+
+#problemp .problemsContainer .problem table.test tr td {
+ font-family: "Consolas";
+}
+
+#problemp .problemsContainer .problem .image {
+ position: relative;
+ width: 100%;
+ margin: 10px 0;
+ border: 1px solid #ccc;
+}
+
+#problemp .problemsContainer .problem .attachment {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+}
+
+#problemp .problemsContainer .problem .attachment .link {
+ position: relative;
+ display: block;
+ font-size: 14px;
+}
+
+#problemp .problemsContainer .problem .attachment .link::before {
+ content: "Tệp đính kèm:";
+ position: relative;
+ display: inline-block;
+ font-family: "Calibri";
+ font-size: 13px;
+ font-weight: bold;
+ user-select: none;
+ margin-right: 4px;
+ color: rgb(124, 124, 124);
+}
+
+#problemp .problemsContainer .problem .attachment .embed {
+ width: 100%;
+ height: 0;
+ min-height: 80px;
+ max-height: calc(100vh - 160px);
+ margin: 10px 0 20px;
+ transition: height 0.4s ease-in;
+}
+
+/* *rankingContainer */
+
+#rankp div.rankingContainer {
+ position: relative;
+ overflow: auto;
+}
+
+#rankp div.rankingContainer:empty::before {
+ content: "\f02d";
+}
+
+#rankp div.rankingContainer:empty::after {
+ content: "Không có dữ liệu hoặc đã bị tắt";
+}
+
+#rankp div.rankingContainer table {
+ position: relative;
+ font-family: "Calibri";
+ box-sizing: border-box;
+ border-spacing: 0;
+ padding: 10px;
+ min-width: 100%;
+}
+
+#rankp div.rankingContainer table tr th:nth-child(1),
+#rankp div.rankingContainer table tr td:nth-child(1) {
+ width: 20px;
+ text-align: center;
+}
+
+#rankp div.rankingContainer table tr th:nth-child(2),
+#rankp div.rankingContainer table tr td:nth-child(2) {
+ text-align: left;
+}
+
+#rankp div.rankingContainer table tr th:nth-child(2) {
+ width: 40px;
+}
+
+#rankp div.rankingContainer table tr td:nth-child(2) {
+ display: flex;
+ align-items: center;
+ padding: 10px;
+ margin: 0 0 0 10px;
+}
+
+#rankp div.rankingContainer table tr td:nth-child(2) .avt {
+ position: relative;
+ display: block;
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+}
+
+#rankp div.rankingContainer table tr td:nth-child(3) .username {
+ font-family: "Open Sans";
+ font-size: 11px;
+ font-style: italic;
+ color: rgb(114, 114, 114);
+ letter-spacing: .2px;
+}
+
+#rankp div.rankingContainer table tr td:nth-child(3) .name {
+ font-size: 15px;
+ letter-spacing: .2px;
+}
+
+#rankp div.rankingContainer table tr td.number:nth-child(4) {
+ color: #3c7be7;
+ font-size: 16px;
+ font-weight: bold;
+}
+
+#rankp div.rankingContainer table thead tr th:nth-child(3) {
+ text-align: left;
+}
+
+#rankp div.rankingContainer table tbody tr[data-rank="1"] {
+ background-color: rgba(111, 241, 134, 0.2);
+}
+
+#rankp div.rankingContainer table tbody tr[data-rank="2"] {
+ background-color: rgba(239, 241, 111, 0.2);
+}
+
+#rankp div.rankingContainer table tbody tr[data-rank="3"] {
+ background-color: rgba(230, 111, 241, 0.2);
+}
+
+#rankp div.rankingContainer table tbody tr[data-rank="1"] td:nth-child(3) .name,
+#rankp div.rankingContainer table tbody tr[data-rank="2"] td:nth-child(3) .name,
+#rankp div.rankingContainer table tbody tr[data-rank="3"] td:nth-child(3) .name {
+ font-family: Nunito;
+ font-size: 16px;
+ font-weight: 850;
+ letter-spacing: .4px;
+ color: rgb(65, 65, 65);
+}
+
+#rankp div.rankingContainer table tr th {
+ position: sticky;
+ top: 0;
+ background-color: #fafafa;
+ border-bottom: 1px solid #9b9b9b;
+ color: rgb(82, 82, 82);
+ font-family: Segoe UI;
+ font-size: 13px;
+ font-weight: bold;
+ z-index: 1;
+}
+
+#rankp div.rankingContainer table tr th.problem > t {
+ display: inline-block;
+ color: rgb(82, 82, 82);
+ font-family: Segoe UI;
+ font-size: 13px;
+ font-weight: bold;
+}
+
+#rankp div.rankingContainer table tr th.problem > .toggler {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 18px;
+ height: 18px;
+ padding: 0 4px;
+ cursor: pointer;
+
+ transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1);
+}
+
+#rankp div.rankingContainer table tr th.problem > .toggler::after {
+ content: "\f104";
+ position: relative;
+ display: block;
+ font-family: "Font Awesome 5 Free";
+ font-size: 18px;
+ font-weight: 900;
+ transform: translateY(2px);
+}
+
+#rankp div.rankingContainer table tr th.problem[data-folding="true"] {
+ width: 10px;
+ padding: unset;
+}
+
+#rankp div.rankingContainer table tr th.problem[data-folding="true"] > t {
+ display: none;
+}
+
+#rankp div.rankingContainer table tr th.problem[data-folding="true"] > .toggler {
+ transform: rotate(180deg);
+}
+
+#rankp div.rankingContainer table tr th.problem[data-folding="true"] > .toggler::after {
+ transform: unset;
+}
+
+#rankp div.rankingContainer table tr th,
+#rankp div.rankingContainer table tr td {
+ padding: 10px 12px;
+}
+
+#rankp div.rankingContainer table tr td {
+ font-size: 13px;
+}
+
+#rankp div.rankingContainer table tr td.number {
+ font-size: 13px;
+ text-align: right;
+ color: rgb(172, 172, 172);
+}
+
+#rankp div.rankingContainer table tr td.number[data-folding="true"] {
+ font-size: 0;
+ padding: unset;
+}
+
+#rankp div.rankingContainer table tr td.number.link {
+ cursor: pointer;
+}
+
+#rankp div.rankingContainer table tr .number.link,
+#rankp div.rankingContainer table tr .number.correct,
+#rankp div.rankingContainer table tr .number.passed,
+#rankp div.rankingContainer table tr .number.accepted,
+#rankp div.rankingContainer table tr .number.failed,
+#rankp div.rankingContainer table tr .number.skipped {
+ color: rgb(75, 75, 75);
+}
+
+#rankp div.rankingContainer table tr td.number.correct {
+ background-color: rgb(147, 243, 158);
+}
+
+#rankp div.rankingContainer table tr td.number.passed {
+ background-color: rgb(150, 245, 248);
+}
+
+#rankp div.rankingContainer table tr td.number.accepted {
+ background-color: rgb(240, 237, 157);
+}
+
+#rankp div.rankingContainer table tr td.number.failed {
+ background-color: rgb(248, 187, 187)
+}
+
+#rankp div.rankingContainer table tr td.number.skipped {
+ background-color: rgb(212, 212, 212);
+}
+
+#rankp div.rankingContainer table tr td.number.link:hover {
+ filter: brightness(1.1);
+}
+
+#wrapper #wrapp .main .full {
+ display: block;
+ margin: auto;
+}
+
+.problemEnlarged {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.problemEnlarged .left {
+ position: relative;
+ display: flex;
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-direction: column;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.problemEnlarged .left .top {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 0;
+ align-items: center;
+ width: 100%;
+ padding: 20px 0;
+ box-sizing: border-box;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.problemEnlarged .left .top .group {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+}
+
+.problemEnlarged .left .top .group .col {
+ position: relative;
+ display: flex;
+ flex: 1 1 0;
+ flex-direction: column;
+ padding: 0 20px;
+ align-items: center;
+}
+
+.problemEnlarged .left .top .group .col .name {
+ font-size: 26px;
+ font-weight: bold;
+ text-align: center;
+ color: #34495e;
+}
+
+.problemEnlarged .left .top .group .col .point {
+ font-size: 12px;
+ color: #ecf0f1;
+ letter-spacing: 0.4px;
+ background-color: #1f8d4d;
+ padding: 2px 6px;
+ margin: 2px 0 10px;
+ border-radius: 4px;
+}
+
+.problemEnlarged .left .top .attachment {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: flex-end;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 10px 20px;
+}
+
+.problemEnlarged .left .top .attachment::before {
+ content: "Tệp đính kèm:";
+ position: relative;
+ display: inline-block;
+ font-family: "Calibri";
+ font-size: 13px;
+ font-weight: bold;
+ padding-right: 6px;
+ color: rgb(124, 124, 124);
+}
+
+.problemEnlarged .left .top .attachment .link {
+ font-size: 14px;
+}
+
+.problemEnlarged .left .top .simpleTableWrapper .simpleTable {
+ width: 100%;
+}
+
+.problemEnlarged .left .bottom {
+ position: relative;
+ display: flex;
+ flex-grow: 1;
+ flex-direction: column;
+ align-items: center;
+ padding: 20px;
+ box-sizing: border-box;
+ background-color: rgb(238, 238, 238);
+}
+
+.problemEnlarged .left .bottom .simpleTableWrapper {
+ position: relative;
+ display: block;
+ width: auto;
+ max-width: 100%;
+ margin-top: 20px;
+}
+
+.problemEnlarged .left .bottom .simpleTableWrapper .simpleTable.test tr td {
+ font-family: "Consolas";
+ white-space: pre;
+}
+
+.problemEnlarged .left .bottom .description {
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+ white-space: pre-wrap;
+ line-height: 1.4em;
+}
+
+.problemEnlarged .left .bottom .description > a,
+.problemEnlarged .left .bottom .description > table,
+.problemEnlarged .left .bottom .description > ul {
+ display: block;
+}
+
+.problemEnlarged .left .bottom .image {
+ position: relative;
+ display: block;
+ min-width: 30px;
+ min-height: 30px;
+ width: 100%;
+ flex-shrink: 0;
+ margin-top: 20px;
+ border: 1px solid #ccc;
+}
+
+.problemEnlarged .right {
+ position: relative;
+ display: none;
+ flex-grow: 2;
+ width: calc(100% - 100px);
+}
+
+#wrapperPanel[data-size="large"] .problemEnlarged .right {
+ display: block;
+}
+
+.problemEnlarged .right > .embedAttachment {
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+
+@media only screen and (max-width: 800px) {
+ .problemEnlarged {
+ flex-direction: column;
+ }
+
+ .problemEnlarged .right {
+ width: 100%;
+ height: 50%;
+ }
+}
+
+.viewLog-container {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ width: 100%;
+ height: 100%;
+}
+
+.viewLog-container .header {
+ position: relative;
+ display: inline-flex;
+ flex-direction: column;
+ flex-grow: 1;
+ box-sizing: border-box;
+ padding-left: 10px;
+ height: 100%;
+}
+
+.viewLog-container .header::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 10px;
+ height: 100%;
+ background-color: #b9b9b9;
+}
+
+.viewLog-container .header .top {
+ position: relative;
+ display: flex;
+ padding: 20px 0 10px;
+ flex-direction: column;
+ align-items: center;
+ flex-grow: 0;
+}
+
+.viewLog-container .header .top .problemIcon {
+ position: relative;
+ width: 92px;
+ height: 92px;
+ border-radius: 50%;
+}
+
+.viewLog-container .header .top .problemName {
+ position: relative;
+ font-family: Nunito;
+ font-size: 25px;
+ font-weight: 950;
+ letter-spacing: .8px;
+ color: rgb(70, 70, 70);
+ margin-top: 10px;
+}
+
+.viewLog-container .header .top .point {
+ position: relative;
+ font-size: 12px;
+ color: #ecf0f1;
+ letter-spacing: 0.4px;
+ background-color: #27ae60;
+ padding: 2px 6px;
+ margin-top: 2px;
+ border-radius: 4px;
+}
+
+.viewLog-container .header .bottom {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.viewLog-container .header .bottom .line {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ flex-grow: 0;
+ margin: 10px 0;
+}
+
+.viewLog-container .header .bottom .line .left {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ box-sizing: border-box;
+ padding: 0 0 0 20px;
+}
+
+.viewLog-container .header .bottom .line .left .row {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ margin: 1px 0;
+}
+
+.viewLog-container .header .bottom .line .left .row::before {
+ content: "\f111";
+ position: relative;
+ font-family: "Font Awesome 5 Free";
+ font-size: 14px;
+ font-weight: 600;
+ margin-right: 10px;
+ width: 20px;
+ text-align: center;
+ color: rgba(46, 46, 46, 0.5);
+}
+
+.viewLog-container .header .bottom .line .left .problemInfo {
+ margin-bottom: 10px;
+}
+
+.viewLog-container .header .bottom .line .left .problemInfo::before {
+ content: "\f128";
+ color: #464646;
+ font-size: 21px;
+ margin-right: 20px;
+}
+
+.viewLog-container .header .bottom .line .left .problemInfo .problemid,
+.viewLog-container .header .bottom .line .left .problemInfo .language {
+ position: relative;
+ font-family: Consolas;
+ font-weight: bold;
+ font-size: 18px;
+ color: #464646;
+}
+
+.viewLog-container .header .bottom .line .left .problemInfo .language {
+ font-family: Calibri;
+ font-size: 16px;
+ margin-left: 20px;
+}
+
+/*? Correct */
+
+.viewLog-container .header.correct .bottom .line .left .problemInfo .problemid,
+.viewLog-container .header.correct .bottom .line .left .problemInfo .language,
+.viewLog-container .header.correct .bottom .line .left .problemInfo::before {
+ color: #39aa56;
+}
+
+.viewLog-container .header.correct::before {
+ background-color: #39aa56;
+}
+
+.viewLog-container .header.correct .bottom .line .left .problemInfo::before {
+ content: "\f00c";
+}
+
+/*? Passed */
+
+.viewLog-container .header.passed .bottom .line .left .problemInfo .problemid,
+.viewLog-container .header.passed .bottom .line .left .problemInfo .language,
+.viewLog-container .header.passed .bottom .line .left .problemInfo::before {
+ color: #39aaa1;
+}
+
+.viewLog-container .header.passed::before {
+ background-color: #39aaa1;
+}
+
+.viewLog-container .header.passed .bottom .line .left .problemInfo::before {
+ content: "\f129";
+}
+
+/*? Accepted */
+
+.viewLog-container .header.accepted .bottom .line .left .problemInfo .problemid,
+.viewLog-container .header.accepted .bottom .line .left .problemInfo .language,
+.viewLog-container .header.accepted .bottom .line .left .problemInfo::before {
+ color: #cfc337;
+}
+
+.viewLog-container .header.accepted::before {
+ background-color: #edde3f;
+}
+
+.viewLog-container .header.accepted .bottom .line .left .problemInfo::before {
+ content: "\f12a";
+}
+
+/*? Failed */
+
+.viewLog-container .header.failed .bottom .line .left .problemInfo .problemid,
+.viewLog-container .header.failed .bottom .line .left .problemInfo .language,
+.viewLog-container .header.failed .bottom .line .left .problemInfo::before {
+ color: #db4545;
+}
+
+.viewLog-container .header.failed::before {
+ background-color: #db4545;
+}
+
+.viewLog-container .header.failed .bottom .line .left .problemInfo::before {
+ content: "\f00d";
+}
+
+.viewLog-container .header .bottom .line .left .submitTime,
+.viewLog-container .header .bottom .line .left .status,
+.viewLog-container .header .bottom .line .left .result,
+.viewLog-container .header .bottom .line .left .point {
+ position: relative;
+ font-family: "Calibri", "Segoe UI";
+ font-size: 15px;
+ color: rgb(56, 56, 56);
+}
+
+
+.viewLog-container .header .bottom .line .left .submitTime::before {
+ content: "\f783";
+}
+
+.viewLog-container .header .bottom .line .left .submitted::before {
+ content: "\f093";
+}
+
+.viewLog-container .header .bottom .line .left .status::before {
+ content: "\f05a";
+}
+
+.viewLog-container .header .bottom .line .left .result::before {
+ content: "\f682";
+}
+
+.viewLog-container .header .bottom .line .left .point::before {
+ content: "\f044";
+}
+
+.viewLog-container .header .bottom .line .left .result b {
+ display: inline;
+ padding: 0 4px;
+}
+
+.viewLog-container .header .bottom .line .left .result b.green {
+ color: #39aa56;
+}
+
+.viewLog-container .header .bottom .line .left .result b.red {
+ color: #db4545;
+}
+
+.viewLog-container .header .bottom .line .left .point {
+ font-weight: bold;
+ font-size: 16px;
+}
+
+.viewLog-container .header .bottom .line .right {
+ position: relative;
+ display: inline-flex;
+ flex-direction: column;
+ flex-grow: 0;
+ margin-right: 20px;
+}
+
+.viewLog-container .header .bottom .line .right .submitter {
+ position: relative;
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+ margin-bottom: 20px;
+}
+
+.viewLog-container .header .bottom .line .right .submitter .avatar {
+ position: relative;
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+.viewLog-container .header .bottom .line .right .submitter .info {
+ position: relative;
+ margin-right: 10px;
+}
+
+.viewLog-container .header .bottom .line .right .submitter .info .tag {
+ font-family: "Calibri";
+ font-size: 11px;
+ letter-spacing: 0.4px;
+ color: #546e7a;
+ font-weight: bold;
+ text-align: right;
+}
+
+.viewLog-container .header .bottom .line .right .submitter .info .name {
+ font-family: Nunito;
+ font-size: 16px;
+ font-weight: 850;
+ color: #425161;
+ text-align: right;
+}
+
+.viewLog-container .header .bottom .line.log {
+ flex-direction: column;
+}
+
+.viewLog-container .testList {
+ position: relative;
+ display: inline-block;
+ flex-grow: 0;
+ flex-shrink: 0;
+ width: 280px;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+ background-color: rgb(238, 238, 238);
+}
+
+.viewLog-container .testList:empty::before {
+ content: "Không tìm thấy test nào cả :(";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ text-align: center;
+ font-family: "Calibri", "Segoe UI";
+ font-weight: bold;
+ font-size: 16px;
+ color: gray;
+}
+
+.viewLog-container .testList .item {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 10px 10px 10px 16px;
+ background-color: rgb(245, 245, 245);
+ counter-increment: testItem;
+
+ transition: background-color 0.2s ease;
+}
+
+.viewLog-container .testList .item:hover {
+ background-color: rgb(255, 255, 255);
+}
+
+.viewLog-container .testList .item::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 6px;
+ height: 100%;
+ background-color: #b9b9b9
+}
+
+.viewLog-container .testList .item .line {
+ position: relative;
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ align-items: center;
+ flex-grow: 1;
+}
+
+.viewLog-container .testList .item .line .left {
+ position: relative;
+ flex-grow: 1;
+}
+
+.viewLog-container .testList .item .line .left .testid {
+ position: relative;
+ font-size: 15px;
+ font-weight: bold;
+ color: #464646;
+}
+
+.viewLog-container .testList .item .line .left .testid::before {
+ content: "#"counter(testItem);
+ position: relative;
+ display: inline-block;
+ font-size: 11px;
+ width: 25px;
+}
+
+.viewLog-container .testList .item .line .left .status {
+ position: relative;
+ font-size: 12px;
+}
+
+.viewLog-container .testList .item .line.detail {
+ position: relative;
+ flex-direction: column;
+ align-items: flex-start;
+ margin-top: 10px;
+}
+
+.viewLog-container .testList .item .line.detail > t {
+ display: block;
+ width: 100%;
+ font-size: 13px;
+ white-space: pre-wrap;
+ color: rgb(80, 80, 80);
+}
+
+.viewLog-container .testList .item .right {
+ position: relative;
+ display: inline-flex;
+ flex-direction: column;
+ align-items: flex-end;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.viewLog-container .testList .item .right .point {
+ position: relative;
+ font-size: 13px;
+ font-weight: bold;
+ text-align: right;
+ color: rgb(78, 78, 78);
+}
+
+.viewLog-container .testList .item .right .runtime {
+ position: relative;
+ font-size: 12px;
+ color: rgb(114, 114, 114);
+}
+
+.viewLog-container .testList .item.passed::before {
+ background-color: #39aa56;
+}
+
+.viewLog-container .testList .item.passed .line .left .testid {
+ color: #39aa56;
+}
+
+.viewLog-container .testList .item.accepted::before {
+ background-color: #edde3f;
+}
+
+.viewLog-container .testList .item.accepted .line .left .testid {
+ color: #cfc337;
+}
+
+.viewLog-container .testList .item.failed::before {
+ background-color: #c0392b;
+}
+
+.viewLog-container .testList .item.failed .line .left .testid {
+ color: #c0392b;
+}
+
+
+/* Mobile Responsive */
+
+@media only screen and (max-width: 800px) {
+ #wrapper #wrapp {
+ width: 100%;
+ height: 100%;
+ max-height: unset;
+ }
+
+ .viewLog-container {
+ flex-direction: column;
+ }
+
+ .viewLog-container .header {
+ height: unset;
+ }
+
+ .viewLog-container .testList {
+ width: 100%;
+ height: unset;
+ }
+
+ .viewLog-container .testList .item {
+ padding-left: 20px;
+ }
+
+ .viewLog-container .testList .item::before {
+ width: 10px;
+ }
+}
+
+.cpanel-container,
+.publicFiles-container {
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 100%;
+ border: unset;
+ overflow: hidden;
+}
+
+.rateLimitedClock {
+ display: flex;
+ flex-direction: row;
+ align-items: flex-end;
+ justify-content: center;
+ font-size: 25px;
+ font-weight: bold;
+}
+
+.rateLimitedClock > .inner {
+ font-size: 13px;
+ margin: 0 0 4px 4px;
+}
+
+.disconnectedRetry {
+ display: flex;
+ flex-direction: row;
+ align-items: flex-end;
+ justify-content: center;
+ font-size: 13px;
+ font-weight: bold;
+ overflow: hidden;
+}
+
+.disconnectedRetry > .inner {
+ font-size: 25px;
+ margin: 0 0 0 4px;
+ line-height: 24px;
+}
+
+#unsecureProtocolWarning > .right::after {
+ content: "\f13e";
+ color: rgb(185, 5, 50);
+ font-size: 24px;
+}
+
+footer {
+ position: relative;
+ box-sizing: border-box;
+ width: 100%;
+ padding: 20px;
+ display: block;
+ float: left;
+}
+
+footer .header {
+ position: relative;
+ display: block;
+ padding-top: 10px;
+ padding-bottom: 16px;
+}
+
+footer .header .logo {
+ position: relative;
+ display: block;
+ margin: auto;
+ margin-bottom: 12px;
+ background-image: url("/assets/img/icon.webp");
+ background-position: center;
+ background-size: cover;
+ border-radius: 50%;
+ width: 82px;
+ height: 82px;
+}
+
+footer .header .button {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ margin-top: 20px;
+}
+
+footer .header .button button {
+ flex-grow: 1;
+ margin: 0 5px;
+}
+
+footer .header > t {
+ position: relative;
+ display: block;
+ text-align: center;
+ font-family: "Calibri";
+ font-weight: normal;
+ font-size: 13px;
+ padding-top: 2px;
+}
+
+footer .header > t.title {
+ font-family: "Nunito";
+ font-size: 17px;
+ font-weight: 750;
+ text-transform: uppercase;
+ color: #4d6783;
+}
+
+footer .header > t.version {
+ font-weight: bold;
+ color: #3a5068;
+}
+
+footer .header > t.subtitle {
+ color: rgb(90, 90, 90);
+}
+
+footer .simpleTable {
+ width: 100%;
+ max-width: 220px;
+ margin: auto;
+ margin-bottom: 10px;
+}
+
+footer .badge {
+ position: relative;
+ padding-bottom: 10px;
+}
+
+footer .description {
+ display: block;
+ font-weight: lighter;
+ font-size: 14px;
+ color: #333333;
+ padding: 2px 10px;
+}
+
+footer t.contact {
+ position: relative;
+ display: block;
+ padding: 10px 0 0 10px;
+ font-weight: bold;
+}
+
+footer ul.contact {
+ position: relative;
+ box-sizing: border-box;
+ display: block;
+ list-style: none;
+ margin: unset;
+ padding: unset;
+}
+
+footer ul.contact li {
+ position: relative;
+ padding-left: 40px;
+ padding-bottom: 2px;
+ color: rgb(0, 0, 0);
+ font-weight: lighter;
+ font-size: 14px;
+}
+
+footer ul.contact li t,
+footer ul.contact li a {
+ font-weight: bold;
+}
+
+footer ul.contact li::before {
+ content: "";
+ position: absolute;
+ display: inline-block;
+ top: 50%;
+ transform: translate(calc(-100% - 10px), -50%);
+ font-family: "Font Awesome 5 Free";
+ font-size: 14px;
+ font-weight: 600;
+}
+
+footer ul.contact li.tel::before {
+ content: "\f095";
+ color: rgb(53, 172, 53);
+}
+
+footer ul.contact li.email::before {
+ content: "\f0e0";
+ color: #2c3e50;
+}
+
+footer ul.contact li.facebook::before {
+ content: "\f09a";
+ font-family: "Font Awesome 5 Brands";
+ color: #4267B2;
+}
+
+footer ul.contact li.github::before {
+ content: "\f092";
+ font-family: "Font Awesome 5 Brands";
+ color: #2c3e50;
+}
+
+@keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@media only screen and (max-width: 750px) {
+ footer .left {
+ max-width: 100%;
+ }
+
+ footer ul.contact {
+ float: left;
+ max-width: 100%;
+ }
+}
+
+/* Unset all Transition */
+body.disableTransition * {
+ transition: unset!important;
+}
+
+/* Element to hide when user is not admin */
+
+body.user span#user_profile div.body ul#usett_left_panel li.navlink {
+ display: none!important;
+ visibility: hidden!important;
+}
+
+/* Element to hide when user is guest */
+
+body.guest #uploadp,
+body.guest #logp,
+body.guest span#user_profile {
+ display: none!important;
+ visibility: hidden!important;
}
\ No newline at end of file
diff --git a/assets/css/dark.css b/static/css/dark.css
similarity index 95%
rename from assets/css/dark.css
rename to static/css/dark.css
index f4177744..ad3a1639 100644
--- a/assets/css/dark.css
+++ b/static/css/dark.css
@@ -1,627 +1,627 @@
-/*
-? |-----------------------------------------------------------------------------------------------|
-? | /assets/css/dark.css |
-? | |
-? | Copyright (c) 2018-2020 Belikhun. All right reserved |
-? | Licensed under the MIT License. See LICENSE in the project root for license information. |
-? |-----------------------------------------------------------------------------------------------|
-*/
-
-body.dark .formGroup.blue .formField {
- color: rgb(204, 204, 204);
-}
-
-body.dark #container {
- background-color: rgb(30, 30, 30);
-}
-
-/* Navigation Bar */
-
-body.dark .navBar {
- background-color: rgb(56, 56, 56);
-}
-
-body.dark .navBar .top .right .info .name,
-body.dark .navBar .top .left .title .main {
- color: rgb(218, 218, 218);
-}
-
-body.dark .navBar .top .right .info .tag,
-body.dark .navBar .top .left .title .sub {
- color: rgb(182, 182, 182);
-}
-
-body.dark .navBar .top .right .hamburger span {
- background-color: rgb(216, 216, 216);
-}
-
-/* Panel */
-
-body.dark panel {
- box-shadow: 0 0 5px rgba(42, 42, 42, 0.2);
-}
-
-body.dark panel .head {
- background-color: rgb(40, 40, 40);
- border-bottom-color: rgb(67, 67, 67);
-}
-
-body.dark panel .head .le {
- color: rgb(216, 216, 216);
-}
-
-body.dark panel .head .ri i {
- color: rgba(218, 218, 218, 0.54);
-}
-
-body.dark panel .head .ri i:hover {
- color: rgba(218, 218, 218, 0.82);
-}
-
-body.dark panel .main {
- background-color: rgb(48, 48, 48);
-}
-
-/* File Upload Panel */
-
-body.dark #uploadp .fileupload-container #submitDropzone {
- border-color: rgb(124, 124, 124);
- color: rgb(124, 124, 124);
-}
-
-body.dark #uploadp .fileupload-container #submitDropzone.drag {
- background-color: rgb(98, 98, 98);
- border-color: rgb(156, 156, 156);
- color: rgb(156, 156, 156);
-}
-
-body.dark #uploadp .fileupload-container #submitDropzone .title {
- color: rgb(180, 180, 180);
-}
-
-body.dark #uploadp .fileupload-container #submitDropzone .sub {
- color: rgb(160, 160, 160);
-}
-
-body.dark #uploadp .fileupload-container .info #submitStatus {
- color: rgb(214, 214, 214);
-}
-
-body.dark #uploadp .fileupload-container .info #submitFileName {
- color: rgb(160, 160, 160);
-}
-
-/* Problems Panel */
-
-body.dark #problemp .problemsContainer .problemsList .item {
- background-color: rgb(56, 56, 56);
- border-bottom-color: rgb(88, 88, 88);
-}
-
-body.dark #problemp .problemsContainer .problemsList .item[disabled="true"] {
- background-color: rgba(117, 57, 78, 0.6);
-}
-
-body.dark #problemp .problemsContainer .problemsList .item:hover {
- background-color: rgb(70, 70, 70);
-}
-
-body.dark #problemp .problemsContainer .problemsList .item .title .name {
- color: rgb(214, 214, 214);
-}
-
-body.dark #problemp .problemsContainer .problemsList .item .title .point {
- background-color: #269555;
-}
-
-body.dark #problemp .problemsContainer .problem .name {
- color: rgb(216, 216, 216);
-}
-
-body.dark #problemp .problemsContainer .problem .point {
- color: #29db73;
-}
-
-body.dark #problemp .problemsContainer .problem .enlarge::before,
-body.dark #problemp .problemsContainer .problem .close::before {
- color: rgb(202, 202, 202);
-}
-
-body.dark .problemEnlarged .top .group .col .name {
- color: rgb(216, 216, 216);
-}
-
-body.dark .problemEnlarged .bottom {
- background-color: rgb(54, 54, 54);
-}
-
-body.dark .problemEnlarged .bottom .description {
- color: rgb(214, 214, 214);
-}
-
-body.dark .problemEnlarged .bottom .description::before {
- color: rgb(216, 216, 216);
-}
-
-/* Time Panel */
-
-body.dark .contestTimer #contestTimeState {
- color: rgb(195, 195, 195);
-}
-
-body.dark .contestTimer .reload {
- color: rgba(218, 218, 218, 0.54);
-}
-
-body.dark .contestTimer .reload:hover {
- color: rgba(218, 218, 218, 0.82);
-}
-
-/* Rank Panel */
-
-body.dark #rankp div.rankingContainer table tr td:nth-child(3) .username {
- color: rgb(160, 160, 160);
-}
-
-body.dark #rankp div.rankingContainer table tbody tr[data-rank="1"] {
- background-color: rgba(11, 129, 33, 0.2);
-}
-
-body.dark #rankp div.rankingContainer table tbody tr[data-rank="2"] {
- background-color: rgba(136, 138, 15, 0.2);
-}
-
-body.dark #rankp div.rankingContainer table tbody tr[data-rank="3"] {
- background-color: rgba(112, 12, 121, 0.2);
-}
-
-body.dark #rankp div.rankingContainer table tbody tr[data-rank="1"] td:nth-child(3) .name,
-body.dark #rankp div.rankingContainer table tbody tr[data-rank="2"] td:nth-child(3) .name,
-body.dark #rankp div.rankingContainer table tbody tr[data-rank="3"] td:nth-child(3) .name {
- color: rgb(236, 236, 236);
-}
-
-body.dark #rankp div.rankingContainer table tr th {
- background-color: #303030;
- color: rgb(202, 202, 202);
- border-bottom-color: rgb(88, 88, 88);
-}
-
-body.dark #rankp div.rankingContainer table tr th.problem > t {
- color: rgb(202, 202, 202);
-}
-
-body.dark #rankp div.rankingContainer table tr th:nth-child(1),
-body.dark #rankp div.rankingContainer table tr td:nth-child(1) {
- color: rgb(184, 184, 184);
-}
-
-body.dark #rankp div.rankingContainer table tr td.number {
- color: rgb(124, 124, 124);
-}
-
-body.dark #rankp div.rankingContainer table tr td.number:nth-child(4) {
- color: rgb(98, 202, 246);
-}
-
-body.dark #rankp div.rankingContainer table tr .number.link,
-body.dark #rankp div.rankingContainer table tr .number.correct,
-body.dark #rankp div.rankingContainer table tr .number.passed,
-body.dark #rankp div.rankingContainer table tr .number.accepted,
-body.dark #rankp div.rankingContainer table tr .number.failed,
-body.dark #rankp div.rankingContainer table tr .number.skipped {
- color: rgb(224, 224, 224);
-}
-
-body.dark #rankp div.rankingContainer table tr .number.correct {
- background-color: rgb(19, 148, 34);
-}
-
-body.dark #rankp div.rankingContainer table tr .number.passed {
- background-color: rgb(20, 119, 144);
-}
-
-body.dark #rankp div.rankingContainer table tr .number.accepted {
- background-color: rgb(138, 134, 24);
-}
-
-body.dark #rankp div.rankingContainer table tr .number.failed {
- background-color: rgb(151, 20, 20);
-}
-
-body.dark #rankp div.rankingContainer table tr .number.skipped {
- background-color: rgb(90, 90, 90);
-}
-
-body.dark #rankp div.rankingContainer table tr td:nth-child(3) {
- color: #6099fb;
-}
-
-body.dark #rankp div.rankingContainer table tr:nth-child(3) td:nth-child(2) .name {
- background-color: #2b9959;
-}
-
-/* Log Panel */
-
-body.dark #logp .logItemContainer .logItem .h {
- border-bottom-color: rgb(88, 88, 88);
-}
-
-body.dark #logp .logItemContainer .logItem .h .l .t {
- color: rgba(216, 216, 216, 0.7);
-}
-
-body.dark #logp .logItemContainer .logItem .h .r .s {
- color: rgb(218, 218, 218);
-}
-
-body.dark #logp .logItemContainer .logItem .h .r .l {
- color: rgb(200, 200, 200);
-}
-
-body.dark #logp .logItemContainer .logItem .d {
- background-color: rgb(44, 44, 44);
- color: #aaaaaa;
-}
-
-body.dark #logp .logItemContainer .logItem .d:hover {
- color: #e0e0e0;
-}
-
-body.dark #logp .logItemContainer .logItem.queue .h .l .n {
- color: #bc75fd;
-}
-
-body.dark #logp .logItemContainer .logItem.judging .h .l .n {
- color: #ff84f5;
-}
-
-body.dark #logp .logItemContainer .logItem .h .l .n {
- color: rgb(204, 204, 204);
-}
-
-body.dark #logp .logItemContainer .logItem.scored .h .l .n {
- color: #a1a3ff;
-}
-
-body.dark #logp .logItemContainer .logItem.correct .h .l .n {
- color: #36f666;
-}
-
-body.dark #logp .logItemContainer .logItem.passed .h .l .n {
- color: #2bd1ee;
-}
-
-body.dark #logp .logItemContainer .logItem.accepted .h .l .n {
- color: #eedf3c;
-}
-
-body.dark #logp .logItemContainer .logItem.failed .h .l .n {
- color: #fe8f8f;
-}
-
-/* userSettings */
-
-body.dark #userSettings .sub .panel .container {
- background-color: rgba(56, 56, 56, 0.8);
-}
-
-body.dark #userSettings .sub .panel .container .btn-group {
- background-color: rgba(56, 56, 56, 0.8);
-}
-
-body.dark #userSettings .sub .panel .container .btn-group:hover {
- background-color: rgb(56, 56, 56);
-}
-
-body.dark #userSettings .sub .panel .container .btn-group span::before,
-body.dark #userSettings .sub .panel .container .btn-group span::after {
- color: rgb(192, 192, 192);
-}
-
-body.dark #userSettings .sub .panel .container .btn-group span:hover {
- background-color: rgba(41, 140, 206, 0.2);
-}
-
-body.dark #userSettings .sub .panel .container .btn-group span:hover::before,
-body.dark #userSettings .sub .panel .container .btn-group span:hover::after {
- color: #67c2ff;
-}
-
-body.dark #userSettings .sub .panel .container .btn-group .close:hover {
- background-color: rgba(219, 60, 43, 0.2);
-}
-
-body.dark #userSettings .sub .panel .container .btn-group .close:hover::before,
-body.dark #userSettings .sub .panel .container .btn-group .close:hover::after {
- color: #ff8577;
-}
-
-body.dark #userSettings .main .container .group .item .info .right {
- color: rgb(168, 168, 168);
-}
-
-/* Problems Editor */
-
-body.dark .problemSettings .header {
- background-color: rgb(56, 56, 56);
-}
-
-body.dark .problemSettings .header div span::before {
- color: rgba(190, 190, 190, 0.54);
-}
-
-body.dark .problemSettings .problemsContainer .problemsList li.item:hover {
- background-color: rgba(36, 36, 36, 0.4);
-}
-
-body.dark .problemSettings .problemsContainer .problemsList li.item .title .id {
- color: rgb(160, 160, 160);
-}
-
-body.dark .problemSettings .problemsContainer .problemsList li.item .title .name {
- color: rgb(214, 214, 214);
-}
-
-body.dark .problemSettings .problemsContainer.problem .test-container .test-list .cell textarea {
- color: rgb(204, 204, 204);
-}
-
-body.dark .problemSettings .problemsContainer.problem .test-container .test-add:hover {
- background-color: rgba(202, 202, 202, 0.1);
-}
-
-body.dark .problemSettings .problemsContainer.problem .test-container .test-add:hover::after {
- color: rgb(204, 204, 204);
-}
-
-/* Log Viewer */
-
-body.dark .viewLog-container .header .top .problemName {
- color: rgb(228, 228, 228);
-}
-
-body.dark .viewLog-container .header .bottom .line .left .row::before {
- color: rgb(180, 180, 180);
-}
-
-body.dark .viewLog-container .header .bottom .line .left .problemInfo .problemid,
-body.dark .viewLog-container .header .bottom .line .left .problemInfo .language {
- color: rgb(224, 224, 224);
-}
-
-/*? Correct */
-
-body.dark .viewLog-container .header.correct .bottom .line .left .problemInfo .problemid,
-body.dark .viewLog-container .header.correct .bottom .line .left .problemInfo .language,
-body.dark .viewLog-container .header.correct .bottom .line .left .problemInfo::before {
- color: #38ce5d;
-}
-
-body.dark .viewLog-container .header.correct::before {
- background-color: #38ce5d;
-}
-
-/*? Passed */
-
-body.dark .viewLog-container .header.passed .bottom .line .left .problemInfo .problemid,
-body.dark .viewLog-container .header.passed .bottom .line .left .problemInfo .language,
-body.dark .viewLog-container .header.passed .bottom .line .left .problemInfo::before {
- color: #38bdce;
-}
-
-body.dark .viewLog-container .header.passed::before {
- background-color: #38bdce;
-}
-
-/*? Accepted */
-
-body.dark .viewLog-container .header.accepted .bottom .line .left .problemInfo .problemid,
-body.dark .viewLog-container .header.accepted .bottom .line .left .problemInfo .language,
-body.dark .viewLog-container .header.accepted .bottom .line .left .problemInfo::before {
- color: #e4d429;
-}
-
-body.dark .viewLog-container .header.accepted::before {
- background-color: #e4d429;
-}
-
-/*? Failed */
-
-body.dark .viewLog-container .header.failed .bottom .line .left .problemInfo .problemid,
-body.dark .viewLog-container .header.failed .bottom .line .left .problemInfo .language,
-body.dark .viewLog-container .header.failed .bottom .line .left .problemInfo::before {
- color: #f56a6a;
-}
-
-body.dark .viewLog-container .header.failed::before {
- background-color: #ee4c4c;
-}
-
-body.dark .viewLog-container .header .bottom .line .left .submitTime,
-body.dark .viewLog-container .header .bottom .line .left .status,
-body.dark .viewLog-container .header .bottom .line .left .result,
-body.dark .viewLog-container .header .bottom .line .left .point {
- color: rgb(224, 224, 224);
-}
-
-
-body.dark .viewLog-container .header .bottom .line .left .result b.green {
- color: #38ce5d;
-}
-
-body.dark .viewLog-container .header .bottom .line .left .result b.red {
- color: #f56a6a;
-}
-
-body.dark .viewLog-container .header .bottom .line .right .submitter .info .tag {
- color: rgb(185, 185, 185);
-}
-
-body.dark .viewLog-container .header .bottom .line .right .submitter .info .name {
- color: rgb(228, 228, 228);
-}
-
-body.dark .viewLog-container .header .bottom .line .right > t {
- color: rgb(250, 250, 250);
-}
-
-
-body.dark .viewLog-container .testList .item .line .left .testid {
- color: rgb(214, 214, 214);
-}
-
-body.dark .viewLog-container .testList .item.passed::before {
- background-color: #38ce5d;
-}
-
-body.dark .viewLog-container .testList .item.passed .line .left .testid {
- color: #38ce5d;
-}
-
-body.dark .viewLog-container .testList .item.accepted::before {
- background-color: #e4d429;
-}
-
-body.dark .viewLog-container .testList .item.accepted .line .left .testid {
- color: #e4d429;
-}
-
-body.dark .viewLog-container .testList .item.failed::before {
- background-color: #ee4c4c;
-}
-
-body.dark .viewLog-container .testList .item.failed .line .left .testid {
- color: #f56a6a;
-}
-
-body.dark .viewLog-container .testList .item .right .point {
- color: rgb(204, 204, 204);
-}
-
-body.dark .viewLog-container .testList .item .right .runtime {
- color: rgb(180, 180, 180);
-}
-
-body.dark .viewLog-container .testList {
- background-color: rgb(54, 54, 54);
-}
-
-body.dark .viewLog-container .testList .item {
- background-color: rgb(48, 48, 48);
-}
-
-body.dark .viewLog-container .testList .item:hover {
- background-color: rgb(60, 60, 60);
-}
-
-body.dark .viewLog-container .testList .item .line.detail > t {
- color: rgb(172, 172, 172);
-}
-
-/* SysLogs */
-
-body.dark .syslogs-settings .logsContainer .log {
- background-color: transparent;
-}
-
-body.dark .syslogs-settings .logsContainer .log:hover {
- background-color: rgba(42, 42, 42, 0.8);
-}
-
-body.dark .syslogs-settings .logsContainer .log .level {
- background-color: rgba(65, 65, 65, 0.8);
- color: rgb(218, 218, 218);
-}
-
-body.dark .syslogs-settings .logsContainer .log.enlarge .level {
- background-color: rgba(75, 75, 75, 0.8);
-}
-
-body.dark .syslogs-settings .logsContainer .log .detail {
- border-left: 2px solid rgb(104, 104, 104);
-}
-
-body.dark .syslogs-settings .logsContainer .log .detail .info t {
- color: rgb(155, 155, 155);
-}
-
-body.dark .syslogs-settings .logsContainer .log .detail .text {
- color: rgb(228, 228, 228);
-}
-
-body.dark .syslogs-settings .logsContainer .log.okay .detail {
- border-left-color: rgb(14, 194, 26);
-}
-
-body.dark .syslogs-settings .logsContainer .log.okay .level {
- color: rgb(15, 228, 30);
-}
-
-body.dark .syslogs-settings .logsContainer .log.warn .detail {
- border-left-color: rgb(194, 194, 16);
-}
-
-body.dark .syslogs-settings .logsContainer .log.warn .level {
- color: rgb(224, 224, 20);
-}
-
-body.dark .syslogs-settings .logsContainer .log.errr .detail {
- border-left-color: rgb(241, 80, 80);
-}
-
-body.dark .syslogs-settings .logsContainer .log.errr .level {
- color: rgb(248, 154, 154);
-}
-
-body.dark .syslogs-settings .logsContainer .log.verb .detail {
- border-left-color: rgb(196, 110, 236);
-}
-
-body.dark .syslogs-settings .logsContainer .log.verb .level {
- color: rgb(217, 153, 246);
-}
-
-body.dark .syslogs-settings .navBarigation {
- background-color: rgba(65, 65, 65, 0.8);
-}
-
-body.dark .syslogs-settings .navBarigation .left,
-body.dark .syslogs-settings .navBarigation .right {
- color: rgb(204, 204, 204);
-}
-
-body.dark .syslogs-settings .navBarigation .middle .icon::before {
- color: rgb(95, 95, 95);
-}
-
-body.dark .syslogs-settings .navBarigation .middle .icon:hover::before {
- color: #f67fe6;
-}
-
-body.dark .syslogs-settings .navBarigation .middle .currentPage {
- color: rgb(230, 230, 230);
-}
-
-/* Footer */
-
-body.dark footer .header .title {
- color: #3498db;
-}
-
-body.dark footer .header .version {
- color: rgb(204, 204, 204);
-}
-
-body.dark footer .header .subtitle {
- color: rgb(170, 170, 170);
-}
-
-body.dark footer .contact li {
- color: rgb(228, 228, 228);
-}
-
-body.dark footer ul.contact .email::before,
-body.dark footer ul.contact .github::before {
- color: rgb(180, 180, 180);
+/*
+? |-----------------------------------------------------------------------------------------------|
+? | /static/css/dark.css |
+? | |
+? | Copyright (c) 2018-2020 Belikhun. All right reserved |
+? | Licensed under the MIT License. See LICENSE in the project root for license information. |
+? |-----------------------------------------------------------------------------------------------|
+*/
+
+body.dark .formGroup[data-color="blue"] .formField {
+ color: rgb(204, 204, 204);
+}
+
+body.dark #container {
+ background-color: rgb(30, 30, 30);
+}
+
+/* Navigation Bar */
+
+body.dark .navBar {
+ background-color: rgb(56, 56, 56);
+}
+
+body.dark .navBar .top .right .info .name,
+body.dark .navBar .top .left .title .main {
+ color: rgb(218, 218, 218);
+}
+
+body.dark .navBar .top .right .info .tag,
+body.dark .navBar .top .left .title .sub {
+ color: rgb(182, 182, 182);
+}
+
+body.dark .navBar .top .right .hamburger span {
+ background-color: rgb(216, 216, 216);
+}
+
+/* Panel */
+
+body.dark panel {
+ box-shadow: 0 0 5px rgba(42, 42, 42, 0.2);
+}
+
+body.dark panel .head {
+ background-color: rgb(40, 40, 40);
+ border-bottom-color: rgb(67, 67, 67);
+}
+
+body.dark panel .head .le {
+ color: rgb(216, 216, 216);
+}
+
+body.dark panel .head .ri i {
+ color: rgba(218, 218, 218, 0.54);
+}
+
+body.dark panel .head .ri i:hover {
+ color: rgba(218, 218, 218, 0.82);
+}
+
+body.dark panel .main {
+ background-color: rgb(48, 48, 48);
+}
+
+/* File Upload Panel */
+
+body.dark #uploadp .fileupload-container #submitDropzone {
+ border-color: rgb(124, 124, 124);
+ color: rgb(124, 124, 124);
+}
+
+body.dark #uploadp .fileupload-container #submitDropzone.drag {
+ background-color: rgb(98, 98, 98);
+ border-color: rgb(156, 156, 156);
+ color: rgb(156, 156, 156);
+}
+
+body.dark #uploadp .fileupload-container #submitDropzone .title {
+ color: rgb(180, 180, 180);
+}
+
+body.dark #uploadp .fileupload-container #submitDropzone .sub {
+ color: rgb(160, 160, 160);
+}
+
+body.dark #uploadp .fileupload-container .info #submitStatus {
+ color: rgb(214, 214, 214);
+}
+
+body.dark #uploadp .fileupload-container .info #submitFileName {
+ color: rgb(160, 160, 160);
+}
+
+/* Problems Panel */
+
+body.dark #problemp .problemsContainer .problemsList .item {
+ background-color: rgb(56, 56, 56);
+ border-bottom-color: rgb(88, 88, 88);
+}
+
+body.dark #problemp .problemsContainer .problemsList .item[disabled="true"] {
+ background-color: rgba(117, 57, 78, 0.6);
+}
+
+body.dark #problemp .problemsContainer .problemsList .item:hover {
+ background-color: rgb(70, 70, 70);
+}
+
+body.dark #problemp .problemsContainer .problemsList .item .title .name {
+ color: rgb(214, 214, 214);
+}
+
+body.dark #problemp .problemsContainer .problemsList .item .title .point {
+ background-color: #269555;
+}
+
+body.dark #problemp .problemsContainer .problem .name {
+ color: rgb(216, 216, 216);
+}
+
+body.dark #problemp .problemsContainer .problem .point {
+ color: #29db73;
+}
+
+body.dark #problemp .problemsContainer .problem .enlarge::before,
+body.dark #problemp .problemsContainer .problem .close::before {
+ color: rgb(202, 202, 202);
+}
+
+body.dark .problemEnlarged .top .group .col .name {
+ color: rgb(216, 216, 216);
+}
+
+body.dark .problemEnlarged .bottom {
+ background-color: rgb(54, 54, 54);
+}
+
+body.dark .problemEnlarged .bottom .description {
+ color: rgb(214, 214, 214);
+}
+
+body.dark .problemEnlarged .bottom .description::before {
+ color: rgb(216, 216, 216);
+}
+
+/* Time Panel */
+
+body.dark .contestTimer #contestTimeState {
+ color: rgb(195, 195, 195);
+}
+
+body.dark .contestTimer .reload {
+ color: rgba(218, 218, 218, 0.54);
+}
+
+body.dark .contestTimer .reload:hover {
+ color: rgba(218, 218, 218, 0.82);
+}
+
+/* Rank Panel */
+
+body.dark #rankp div.rankingContainer table tr td:nth-child(3) .username {
+ color: rgb(160, 160, 160);
+}
+
+body.dark #rankp div.rankingContainer table tbody tr[data-rank="1"] {
+ background-color: rgba(11, 129, 33, 0.2);
+}
+
+body.dark #rankp div.rankingContainer table tbody tr[data-rank="2"] {
+ background-color: rgba(136, 138, 15, 0.2);
+}
+
+body.dark #rankp div.rankingContainer table tbody tr[data-rank="3"] {
+ background-color: rgba(112, 12, 121, 0.2);
+}
+
+body.dark #rankp div.rankingContainer table tbody tr[data-rank="1"] td:nth-child(3) .name,
+body.dark #rankp div.rankingContainer table tbody tr[data-rank="2"] td:nth-child(3) .name,
+body.dark #rankp div.rankingContainer table tbody tr[data-rank="3"] td:nth-child(3) .name {
+ color: rgb(236, 236, 236);
+}
+
+body.dark #rankp div.rankingContainer table tr th {
+ background-color: #303030;
+ color: rgb(202, 202, 202);
+ border-bottom-color: rgb(88, 88, 88);
+}
+
+body.dark #rankp div.rankingContainer table tr th.problem > t {
+ color: rgb(202, 202, 202);
+}
+
+body.dark #rankp div.rankingContainer table tr th:nth-child(1),
+body.dark #rankp div.rankingContainer table tr td:nth-child(1) {
+ color: rgb(184, 184, 184);
+}
+
+body.dark #rankp div.rankingContainer table tr td.number {
+ color: rgb(124, 124, 124);
+}
+
+body.dark #rankp div.rankingContainer table tr td.number:nth-child(4) {
+ color: rgb(98, 202, 246);
+}
+
+body.dark #rankp div.rankingContainer table tr .number.link,
+body.dark #rankp div.rankingContainer table tr .number.correct,
+body.dark #rankp div.rankingContainer table tr .number.passed,
+body.dark #rankp div.rankingContainer table tr .number.accepted,
+body.dark #rankp div.rankingContainer table tr .number.failed,
+body.dark #rankp div.rankingContainer table tr .number.skipped {
+ color: rgb(224, 224, 224);
+}
+
+body.dark #rankp div.rankingContainer table tr .number.correct {
+ background-color: rgb(19, 148, 34);
+}
+
+body.dark #rankp div.rankingContainer table tr .number.passed {
+ background-color: rgb(20, 119, 144);
+}
+
+body.dark #rankp div.rankingContainer table tr .number.accepted {
+ background-color: rgb(138, 134, 24);
+}
+
+body.dark #rankp div.rankingContainer table tr .number.failed {
+ background-color: rgb(151, 20, 20);
+}
+
+body.dark #rankp div.rankingContainer table tr .number.skipped {
+ background-color: rgb(90, 90, 90);
+}
+
+body.dark #rankp div.rankingContainer table tr td:nth-child(3) {
+ color: #6099fb;
+}
+
+body.dark #rankp div.rankingContainer table tr:nth-child(3) td:nth-child(2) .name {
+ background-color: #2b9959;
+}
+
+/* Log Panel */
+
+body.dark #logp .logItemContainer .logItem .h {
+ border-bottom-color: rgb(88, 88, 88);
+}
+
+body.dark #logp .logItemContainer .logItem .h .l .t {
+ color: rgba(216, 216, 216, 0.7);
+}
+
+body.dark #logp .logItemContainer .logItem .h .r .s {
+ color: rgb(218, 218, 218);
+}
+
+body.dark #logp .logItemContainer .logItem .h .r .l {
+ color: rgb(200, 200, 200);
+}
+
+body.dark #logp .logItemContainer .logItem .d {
+ background-color: rgb(44, 44, 44);
+ color: #aaaaaa;
+}
+
+body.dark #logp .logItemContainer .logItem .d:hover {
+ color: #e0e0e0;
+}
+
+body.dark #logp .logItemContainer .logItem.queue .h .l .n {
+ color: #bc75fd;
+}
+
+body.dark #logp .logItemContainer .logItem.judging .h .l .n {
+ color: #ff84f5;
+}
+
+body.dark #logp .logItemContainer .logItem .h .l .n {
+ color: rgb(204, 204, 204);
+}
+
+body.dark #logp .logItemContainer .logItem.scored .h .l .n {
+ color: #a1a3ff;
+}
+
+body.dark #logp .logItemContainer .logItem.correct .h .l .n {
+ color: #36f666;
+}
+
+body.dark #logp .logItemContainer .logItem.passed .h .l .n {
+ color: #2bd1ee;
+}
+
+body.dark #logp .logItemContainer .logItem.accepted .h .l .n {
+ color: #eedf3c;
+}
+
+body.dark #logp .logItemContainer .logItem.failed .h .l .n {
+ color: #fe8f8f;
+}
+
+/* userSettings */
+
+body.dark #userSettings .sub .panel .container {
+ background-color: rgba(56, 56, 56, 0.8);
+}
+
+body.dark #userSettings .sub .panel .container .btn-group {
+ background-color: rgba(56, 56, 56, 0.8);
+}
+
+body.dark #userSettings .sub .panel .container .btn-group:hover {
+ background-color: rgb(56, 56, 56);
+}
+
+body.dark #userSettings .sub .panel .container .btn-group span::before,
+body.dark #userSettings .sub .panel .container .btn-group span::after {
+ color: rgb(192, 192, 192);
+}
+
+body.dark #userSettings .sub .panel .container .btn-group span:hover {
+ background-color: rgba(41, 140, 206, 0.2);
+}
+
+body.dark #userSettings .sub .panel .container .btn-group span:hover::before,
+body.dark #userSettings .sub .panel .container .btn-group span:hover::after {
+ color: #67c2ff;
+}
+
+body.dark #userSettings .sub .panel .container .btn-group .close:hover {
+ background-color: rgba(219, 60, 43, 0.2);
+}
+
+body.dark #userSettings .sub .panel .container .btn-group .close:hover::before,
+body.dark #userSettings .sub .panel .container .btn-group .close:hover::after {
+ color: #ff8577;
+}
+
+body.dark #userSettings .main .container .group .item .info .right {
+ color: rgb(168, 168, 168);
+}
+
+/* Problems Editor */
+
+body.dark .problemSettings .header {
+ background-color: rgb(56, 56, 56);
+}
+
+body.dark .problemSettings .header div span::before {
+ color: rgba(190, 190, 190, 0.54);
+}
+
+body.dark .problemSettings .problemsContainer .problemsList li.item:hover {
+ background-color: rgba(36, 36, 36, 0.4);
+}
+
+body.dark .problemSettings .problemsContainer .problemsList li.item .title .id {
+ color: rgb(160, 160, 160);
+}
+
+body.dark .problemSettings .problemsContainer .problemsList li.item .title .name {
+ color: rgb(214, 214, 214);
+}
+
+body.dark .problemSettings .problemsContainer.problem .test-container .test-list .cell textarea {
+ color: rgb(204, 204, 204);
+}
+
+body.dark .problemSettings .problemsContainer.problem .test-container .test-add:hover {
+ background-color: rgba(202, 202, 202, 0.1);
+}
+
+body.dark .problemSettings .problemsContainer.problem .test-container .test-add:hover::after {
+ color: rgb(204, 204, 204);
+}
+
+/* Log Viewer */
+
+body.dark .viewLog-container .header .top .problemName {
+ color: rgb(228, 228, 228);
+}
+
+body.dark .viewLog-container .header .bottom .line .left .row::before {
+ color: rgb(180, 180, 180);
+}
+
+body.dark .viewLog-container .header .bottom .line .left .problemInfo .problemid,
+body.dark .viewLog-container .header .bottom .line .left .problemInfo .language {
+ color: rgb(224, 224, 224);
+}
+
+/*? Correct */
+
+body.dark .viewLog-container .header.correct .bottom .line .left .problemInfo .problemid,
+body.dark .viewLog-container .header.correct .bottom .line .left .problemInfo .language,
+body.dark .viewLog-container .header.correct .bottom .line .left .problemInfo::before {
+ color: #38ce5d;
+}
+
+body.dark .viewLog-container .header.correct::before {
+ background-color: #38ce5d;
+}
+
+/*? Passed */
+
+body.dark .viewLog-container .header.passed .bottom .line .left .problemInfo .problemid,
+body.dark .viewLog-container .header.passed .bottom .line .left .problemInfo .language,
+body.dark .viewLog-container .header.passed .bottom .line .left .problemInfo::before {
+ color: #38bdce;
+}
+
+body.dark .viewLog-container .header.passed::before {
+ background-color: #38bdce;
+}
+
+/*? Accepted */
+
+body.dark .viewLog-container .header.accepted .bottom .line .left .problemInfo .problemid,
+body.dark .viewLog-container .header.accepted .bottom .line .left .problemInfo .language,
+body.dark .viewLog-container .header.accepted .bottom .line .left .problemInfo::before {
+ color: #e4d429;
+}
+
+body.dark .viewLog-container .header.accepted::before {
+ background-color: #e4d429;
+}
+
+/*? Failed */
+
+body.dark .viewLog-container .header.failed .bottom .line .left .problemInfo .problemid,
+body.dark .viewLog-container .header.failed .bottom .line .left .problemInfo .language,
+body.dark .viewLog-container .header.failed .bottom .line .left .problemInfo::before {
+ color: #f56a6a;
+}
+
+body.dark .viewLog-container .header.failed::before {
+ background-color: #ee4c4c;
+}
+
+body.dark .viewLog-container .header .bottom .line .left .submitTime,
+body.dark .viewLog-container .header .bottom .line .left .status,
+body.dark .viewLog-container .header .bottom .line .left .result,
+body.dark .viewLog-container .header .bottom .line .left .point {
+ color: rgb(224, 224, 224);
+}
+
+
+body.dark .viewLog-container .header .bottom .line .left .result b.green {
+ color: #38ce5d;
+}
+
+body.dark .viewLog-container .header .bottom .line .left .result b.red {
+ color: #f56a6a;
+}
+
+body.dark .viewLog-container .header .bottom .line .right .submitter .info .tag {
+ color: rgb(185, 185, 185);
+}
+
+body.dark .viewLog-container .header .bottom .line .right .submitter .info .name {
+ color: rgb(228, 228, 228);
+}
+
+body.dark .viewLog-container .header .bottom .line .right > t {
+ color: rgb(250, 250, 250);
+}
+
+
+body.dark .viewLog-container .testList .item .line .left .testid {
+ color: rgb(214, 214, 214);
+}
+
+body.dark .viewLog-container .testList .item.passed::before {
+ background-color: #38ce5d;
+}
+
+body.dark .viewLog-container .testList .item.passed .line .left .testid {
+ color: #38ce5d;
+}
+
+body.dark .viewLog-container .testList .item.accepted::before {
+ background-color: #e4d429;
+}
+
+body.dark .viewLog-container .testList .item.accepted .line .left .testid {
+ color: #e4d429;
+}
+
+body.dark .viewLog-container .testList .item.failed::before {
+ background-color: #ee4c4c;
+}
+
+body.dark .viewLog-container .testList .item.failed .line .left .testid {
+ color: #f56a6a;
+}
+
+body.dark .viewLog-container .testList .item .right .point {
+ color: rgb(204, 204, 204);
+}
+
+body.dark .viewLog-container .testList .item .right .runtime {
+ color: rgb(180, 180, 180);
+}
+
+body.dark .viewLog-container .testList {
+ background-color: rgb(54, 54, 54);
+}
+
+body.dark .viewLog-container .testList .item {
+ background-color: rgb(48, 48, 48);
+}
+
+body.dark .viewLog-container .testList .item:hover {
+ background-color: rgb(60, 60, 60);
+}
+
+body.dark .viewLog-container .testList .item .line.detail > t {
+ color: rgb(172, 172, 172);
+}
+
+/* SysLogs */
+
+body.dark .syslogs-settings .logsContainer .log {
+ background-color: transparent;
+}
+
+body.dark .syslogs-settings .logsContainer .log:hover {
+ background-color: rgba(42, 42, 42, 0.8);
+}
+
+body.dark .syslogs-settings .logsContainer .log .level {
+ background-color: rgba(65, 65, 65, 0.8);
+ color: rgb(218, 218, 218);
+}
+
+body.dark .syslogs-settings .logsContainer .log.enlarge .level {
+ background-color: rgba(75, 75, 75, 0.8);
+}
+
+body.dark .syslogs-settings .logsContainer .log .detail {
+ border-left: 2px solid rgb(104, 104, 104);
+}
+
+body.dark .syslogs-settings .logsContainer .log .detail .info t {
+ color: rgb(155, 155, 155);
+}
+
+body.dark .syslogs-settings .logsContainer .log .detail .text {
+ color: rgb(228, 228, 228);
+}
+
+body.dark .syslogs-settings .logsContainer .log.okay .detail {
+ border-left-color: rgb(14, 194, 26);
+}
+
+body.dark .syslogs-settings .logsContainer .log.okay .level {
+ color: rgb(15, 228, 30);
+}
+
+body.dark .syslogs-settings .logsContainer .log.warn .detail {
+ border-left-color: rgb(194, 194, 16);
+}
+
+body.dark .syslogs-settings .logsContainer .log.warn .level {
+ color: rgb(224, 224, 20);
+}
+
+body.dark .syslogs-settings .logsContainer .log.errr .detail {
+ border-left-color: rgb(241, 80, 80);
+}
+
+body.dark .syslogs-settings .logsContainer .log.errr .level {
+ color: rgb(248, 154, 154);
+}
+
+body.dark .syslogs-settings .logsContainer .log.verb .detail {
+ border-left-color: rgb(196, 110, 236);
+}
+
+body.dark .syslogs-settings .logsContainer .log.verb .level {
+ color: rgb(217, 153, 246);
+}
+
+body.dark .syslogs-settings .navBarigation {
+ background-color: rgba(65, 65, 65, 0.8);
+}
+
+body.dark .syslogs-settings .navBarigation .left,
+body.dark .syslogs-settings .navBarigation .right {
+ color: rgb(204, 204, 204);
+}
+
+body.dark .syslogs-settings .navBarigation .middle .icon::before {
+ color: rgb(95, 95, 95);
+}
+
+body.dark .syslogs-settings .navBarigation .middle .icon:hover::before {
+ color: #f67fe6;
+}
+
+body.dark .syslogs-settings .navBarigation .middle .currentPage {
+ color: rgb(230, 230, 230);
+}
+
+/* Footer */
+
+body.dark footer .header .title {
+ color: #3498db;
+}
+
+body.dark footer .header .version {
+ color: rgb(204, 204, 204);
+}
+
+body.dark footer .header .subtitle {
+ color: rgb(170, 170, 170);
+}
+
+body.dark footer .contact li {
+ color: rgb(228, 228, 228);
+}
+
+body.dark footer ul.contact .email::before,
+body.dark footer ul.contact .github::before {
+ color: rgb(180, 180, 180);
}
\ No newline at end of file
diff --git a/assets/css/navbar.css b/static/css/navbar.css
similarity index 94%
rename from assets/css/navbar.css
rename to static/css/navbar.css
index 1776248a..1465ee25 100644
--- a/assets/css/navbar.css
+++ b/static/css/navbar.css
@@ -1,221 +1,221 @@
-/*
-? |-----------------------------------------------------------------------------------------------|
-? | /assets/css/navbar.css |
-? | |
-? | Copyright (c) 2018-2020 Belikhun. All right reserved |
-? | Licensed under the MIT License. See LICENSE in the project root for license information. |
-? |-----------------------------------------------------------------------------------------------|
-*/
-
-.navBar {
- position: fixed;
- display: flex;
- flex-direction: column;
- top: 0;
- left: 0;
- width: 100%;
- background-color: #ebebeb;
- box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.2);
- z-index: 99;
- user-select: none;
-}
-
-.navBar .top {
- position: relative;
- display: flex;
- flex-direction: row;
- height: 56px;
-}
-
-.navBar .top .left {
- position: relative;
- display: flex;
- flex-grow: 1;
- align-items: center;
- height: 100%;
-}
-
-.navBar .top .left .icon {
- position: relative;
- height: 44px;
- width: 44px;
- border-radius: 100%;
- margin: 0 10px;
- float: left;
-}
-
-.navBar .top .left .title {
- position: relative;
- max-width: calc(100% - 58px);
- padding-left: 0;
- float: left;
- list-style: none;
- text-align: left;
- font-weight: bold;
- margin: unset;
-}
-
-.navBar .top .left .title .main {
- position: relative;
- font-family: Nunito;
- font-size: 18px;
- font-weight: 750;
- letter-spacing: .8px;
- color: #425161;
- overflow: hidden;
- white-space: nowrap;
-}
-
-.navBar .top .left .title .sub {
- position: relative;
- font-size: 12px;
- color: #546e7a;
- overflow: hidden;
- letter-spacing: 0.4px;
- font-weight: lighter;
- white-space: nowrap;
-}
-
-.navBar .top .right {
- position: relative;
- display: flex;
- flex-grow: 0;
- flex-shrink: 0;
- align-items: center;
- height: 100%;
- cursor: pointer;
-}
-
-.navBar .top .right .hamburger {
- position: relative;
- width: 22px;
- height: 20px;
- margin-right: 10px;
- -webkit-transition: all 1s cubic-bezier(0.06, 0.81, 0, 0.98);
- -o-transition: all 1s cubic-bezier(0.06, 0.81, 0, 0.98);
- transition: all 1s cubic-bezier(0.06, 0.81, 0, 0.98);
- z-index: 2;
-}
-
-.navBar .top .right .hamburger span {
- position: absolute;
- width: 100%;
- height: 4px;
- border-radius: 4px;
- background-color: #2c3e50;
- left: 0;
- -webkit-transition-property: opacity, -webkit-transform;
- -o-transition-property: transform, opacity;
- transition-property: transform, opacity;
- -webkit-transition-duration: 0.5s;
- -o-transition-duration: 0.5s;
- transition-duration: 0.5s;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
-}
-
-.navBar .top .right .hamburger span:nth-child(1) {
- top: 0;
-}
-
-.navBar .top .right .hamburger span:nth-child(2) {
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
-}
-
-.navBar .top .right .hamburger span:nth-child(3) {
- bottom: 0;
-}
-
-.navBar .top .right.active .hamburger span:nth-child(1){
- -webkit-transform: translateY(8px) rotate(45deg);
- -ms-transform: translateY(8px) rotate(45deg);
- transform: translateY(8px) rotate(45deg);
-}
-
-.navBar .top .right.active .hamburger span:nth-child(2){
- opacity: 0;
-}
-
-.navBar .top .right.active .hamburger span:nth-child(3){
- -webkit-transform: translateY(-8px) rotate(-45deg);
- -ms-transform: translateY(-8px) rotate(-45deg);
- transform: translateY(-8px) rotate(-45deg);
-}
-
-.navBar .top .right .avatar {
- position: relative;
- height: 44px;
- width: 44px;
- border-radius: 100%;
- margin: 0 10px;
- object-fit: cover;
-}
-
-.navBar .top .right .info {
- position: relative;
- margin: unset;
- padding: unset;
- max-width: calc(100% - 82px);
- list-style: none;
- text-align: right;
- font-weight: bold;
-}
-
-.navBar .top .right .info .tag {
- position: relative;
- font-family: Nunito;
- font-size: 12px;
- letter-spacing: 0.4px;
- color: #546e7a;
-}
-
-.navBar .top .right .info .name {
- position: relative;
- font-family: Nunito;
- font-size: 18px;
- font-weight: 750;
- font-style: italic;
- color: #425161;
-}
-
-.navBar .bottom {
- position: relative;
-}
-
-@media only screen and (max-width: 800px) {
- .navBar .top .left {
- position: absolute;
- width: 100%;
- height: 100%;
- max-width: unset;
- }
-
- body:not(.guest) .navBar .top .left .icon {
- display: none;
- }
-
- .navBar .top .left .title {
- position: absolute;
- text-align: center;
- max-width: calc(100% - 180px);
- left: 50%;
- transform: translateX(-50%);
- }
-
- .navBar .top .right {
- width: 100%;
- justify-content: space-between;
- }
-
- body.guest .navBar .top .right {
- flex-flow: row-reverse;
- }
-
- .navBar .top .right .info {
- display: none;
- }
+/*
+? |-----------------------------------------------------------------------------------------------|
+? | /static/css/navbar.css |
+? | |
+? | Copyright (c) 2018-2020 Belikhun. All right reserved |
+? | Licensed under the MIT License. See LICENSE in the project root for license information. |
+? |-----------------------------------------------------------------------------------------------|
+*/
+
+.navBar {
+ position: fixed;
+ display: flex;
+ flex-direction: column;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background-color: #ebebeb;
+ box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.2);
+ z-index: 99;
+ user-select: none;
+}
+
+.navBar .top {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ height: 56px;
+}
+
+.navBar .top .left {
+ position: relative;
+ display: flex;
+ flex-grow: 1;
+ align-items: center;
+ height: 100%;
+}
+
+.navBar .top .left .icon {
+ position: relative;
+ height: 44px;
+ width: 44px;
+ border-radius: 100%;
+ margin: 0 10px;
+ float: left;
+}
+
+.navBar .top .left .title {
+ position: relative;
+ max-width: calc(100% - 58px);
+ padding-left: 0;
+ float: left;
+ list-style: none;
+ text-align: left;
+ font-weight: bold;
+ margin: unset;
+}
+
+.navBar .top .left .title .main {
+ position: relative;
+ font-family: Nunito;
+ font-size: 18px;
+ font-weight: 750;
+ letter-spacing: .8px;
+ color: #425161;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.navBar .top .left .title .sub {
+ position: relative;
+ font-size: 12px;
+ color: #546e7a;
+ overflow: hidden;
+ letter-spacing: 0.4px;
+ font-weight: lighter;
+ white-space: nowrap;
+}
+
+.navBar .top .right {
+ position: relative;
+ display: flex;
+ flex-grow: 0;
+ flex-shrink: 0;
+ align-items: center;
+ height: 100%;
+ cursor: pointer;
+}
+
+.navBar .top .right .hamburger {
+ position: relative;
+ width: 22px;
+ height: 20px;
+ margin-right: 10px;
+ -webkit-transition: all 1s cubic-bezier(0.06, 0.81, 0, 0.98);
+ -o-transition: all 1s cubic-bezier(0.06, 0.81, 0, 0.98);
+ transition: all 1s cubic-bezier(0.06, 0.81, 0, 0.98);
+ z-index: 2;
+}
+
+.navBar .top .right .hamburger span {
+ position: absolute;
+ width: 100%;
+ height: 4px;
+ border-radius: 4px;
+ background-color: #2c3e50;
+ left: 0;
+ -webkit-transition-property: opacity, -webkit-transform;
+ -o-transition-property: transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transition-duration: 0.5s;
+ -o-transition-duration: 0.5s;
+ transition-duration: 0.5s;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+}
+
+.navBar .top .right .hamburger span:nth-child(1) {
+ top: 0;
+}
+
+.navBar .top .right .hamburger span:nth-child(2) {
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+
+.navBar .top .right .hamburger span:nth-child(3) {
+ bottom: 0;
+}
+
+.navBar .top .right.active .hamburger span:nth-child(1){
+ -webkit-transform: translateY(8px) rotate(45deg);
+ -ms-transform: translateY(8px) rotate(45deg);
+ transform: translateY(8px) rotate(45deg);
+}
+
+.navBar .top .right.active .hamburger span:nth-child(2){
+ opacity: 0;
+}
+
+.navBar .top .right.active .hamburger span:nth-child(3){
+ -webkit-transform: translateY(-8px) rotate(-45deg);
+ -ms-transform: translateY(-8px) rotate(-45deg);
+ transform: translateY(-8px) rotate(-45deg);
+}
+
+.navBar .top .right .avatar {
+ position: relative;
+ height: 44px;
+ width: 44px;
+ border-radius: 100%;
+ margin: 0 10px;
+ object-fit: cover;
+}
+
+.navBar .top .right .info {
+ position: relative;
+ margin: unset;
+ padding: unset;
+ max-width: calc(100% - 82px);
+ list-style: none;
+ text-align: right;
+ font-weight: bold;
+}
+
+.navBar .top .right .info .tag {
+ position: relative;
+ font-family: Nunito;
+ font-size: 12px;
+ letter-spacing: 0.4px;
+ color: #546e7a;
+}
+
+.navBar .top .right .info .name {
+ position: relative;
+ font-family: Nunito;
+ font-size: 18px;
+ font-weight: 750;
+ font-style: italic;
+ color: #425161;
+}
+
+.navBar .bottom {
+ position: relative;
+}
+
+@media only screen and (max-width: 800px) {
+ .navBar .top .left {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ max-width: unset;
+ }
+
+ body:not(.guest) .navBar .top .left .icon {
+ display: none;
+ }
+
+ .navBar .top .left .title {
+ position: absolute;
+ text-align: center;
+ max-width: calc(100% - 180px);
+ left: 50%;
+ transform: translateX(-50%);
+ }
+
+ .navBar .top .right {
+ width: 100%;
+ justify-content: space-between;
+ }
+
+ body.guest .navBar .top .right {
+ flex-flow: row-reverse;
+ }
+
+ .navBar .top .right .info {
+ display: none;
+ }
}
\ No newline at end of file
diff --git a/assets/css/userSetting.css b/static/css/userSetting.css
similarity index 99%
rename from assets/css/userSetting.css
rename to static/css/userSetting.css
index 5bbf3fa3..c33ac38e 100644
--- a/assets/css/userSetting.css
+++ b/static/css/userSetting.css
@@ -1,6 +1,6 @@
/*
? |-----------------------------------------------------------------------------------------------|
-? | /assets/css/userSetting.css |
+? | /static/css/userSetting.css |
? | |
? | Copyright (c) 2018-2020 Belikhun. All right reserved |
? | Licensed under the MIT License. See LICENSE in the project root for license information. |
diff --git a/assets/js/config.js b/static/js/config.js
similarity index 99%
rename from assets/js/config.js
rename to static/js/config.js
index 350f7c29..68b0302a 100644
--- a/assets/js/config.js
+++ b/static/js/config.js
@@ -1,5 +1,5 @@
//? |-----------------------------------------------------------------------------------------------|
-//? | /assets/js/config.js |
+//? | /static/js/config.js |
//? | |
//? | Copyright (c) 2018-2020 Belikhun. All right reserved |
//? | Licensed under the MIT License. See LICENSE in the project root for license information. |
diff --git a/assets/js/core.js b/static/js/core.js
similarity index 98%
rename from assets/js/core.js
rename to static/js/core.js
index 893274b8..c861fd23 100644
--- a/assets/js/core.js
+++ b/static/js/core.js
@@ -1,5 +1,5 @@
//? |-----------------------------------------------------------------------------------------------|
-//? | /assets/js/core.js |
+//? | /static/js/core.js |
//? | |
//? | Copyright (c) 2018-2020 Belikhun. All right reserved |
//? | Licensed under the MIT License. See LICENSE in the project root for license information. |
@@ -485,7 +485,8 @@ const core = {
let updateRankTimer = new stopClock();
if (data.list.length === 0 && data.rank.length === 0) {
- this.rankPanel.main.innerHTML = "";
+ emptyNode(this.rankPanel);
+
this.previousRankHash = hash;
clog("debg", "Rank Is Empty. Took", {
color: flatc("blue"),
@@ -515,7 +516,7 @@ const core = {
>
${data.nameList[i] || i}
- `;
+ `;
out += "";
let ptotal = 0;
@@ -2317,14 +2318,19 @@ const core = {
sounds.confirm(1);
- await myajax({
- url: "/api/contest/problems/remove",
- method: "POST",
- form: {
- id: id,
- token: API_TOKEN
- }
- });
+ try {
+ await myajax({
+ url: "/api/contest/problems/remove",
+ method: "POST",
+ form: {
+ id: id,
+ token: API_TOKEN
+ }
+ });
+ } catch(e) {
+ errorHandler(e);
+ throw e;
+ }
clog("okay", "Deleted Problem", {
color: flatc("yellow"),
@@ -2388,25 +2394,30 @@ const core = {
text: data.id
});
- await myajax({
- url: "/api/contest/problems/" + action,
- method: "POST",
- form: {
- id: data.id,
- name: data.name,
- point: data.point,
- time: data.time,
- memory: data.memory,
- inpType: data.inpType,
- outType: data.outType,
- acpt: JSON.stringify(data.accept),
- img: data.image,
- desc: data.desc,
- attm: data.attachment,
- test: JSON.stringify(data.test),
- token: API_TOKEN
- }
- });
+ try {
+ await myajax({
+ url: "/api/contest/problems/" + action,
+ method: "POST",
+ form: {
+ id: data.id,
+ name: data.name,
+ point: data.point,
+ time: data.time,
+ memory: data.memory,
+ inpType: data.inpType,
+ outType: data.outType,
+ acpt: JSON.stringify(data.accept),
+ img: data.image,
+ desc: data.desc,
+ attm: data.attachment,
+ test: JSON.stringify(data.test),
+ token: API_TOKEN
+ }
+ });
+ } catch(e) {
+ errorHandler(e);
+ throw e;
+ }
},
async deleteFile(type, id, fileName = null) {