default.css 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614
  1. @import url("normalize.css");
  2. @import url("@fortawesome/fontawesome-free/css/fontawesome");
  3. @import url("@fortawesome/fontawesome-free/css/brands");
  4. @import url("@fortawesome/fontawesome-free/css/solid");
  5. @import url("../dependencies/animate");
  6. @import url("../dependencies/jquery-ui");
  7. @import url("../media_queries");
  8. @import url("../fonts");
  9. @import url("../base");
  10. @import url("../utilities");
  11. :root {
  12. --animate-duration: 300ms;
  13. --font-family: "Exo", system-ui;
  14. --font-family-monospace: "Inconsolata", "Lucida Console", "Monaco", monospace;
  15. --color-text: #7c7c7c;
  16. --color-text-link: #326b9b;
  17. --color-text-link-hover: #c36;
  18. --color-background: #fff;
  19. --border-radius-base: 4px;
  20. /* Alerts */
  21. --alert-border-color: #fff;
  22. --alert-box-shadow: 0 2px 4px rgb(0 0 0 / 20%);
  23. --alert-text-shadow: 0 1px rgb(0 0 0 / 45%);
  24. --alert-info-color: #618ecc;
  25. --alert-danger-color: #ec6c6c;
  26. --alert-success-color: #5ea64c;
  27. /* Icons */
  28. --icon-color-teal: #3cc;
  29. --icon-color-purple: #8e2fca;
  30. --icon-color-maroon: #c36;
  31. --icon-color-red: #f33;
  32. --icon-color-green: #53ba55;
  33. --icon-color-orange: #ffc043;
  34. --icon-color-blue: #326b9b;
  35. --icon-color-lightblue: #6eb6f0;
  36. }
  37. /* App header
  38. ========================================================================== */
  39. .app-header {
  40. padding-top: 40px;
  41. }
  42. /* Container
  43. ========================================================================== */
  44. .container {
  45. margin-left: auto;
  46. margin-right: auto;
  47. max-width: 1024px;
  48. }
  49. /* Top bar
  50. ========================================================================== */
  51. .top-bar {
  52. background: linear-gradient(
  53. to bottom,
  54. rgb(104 145 196 / 100%) 0%,
  55. rgb(69 114 181 / 100%) 50%,
  56. rgb(65 90 149 / 100%) 100%
  57. );
  58. background-color: #5070a6;
  59. box-shadow: 0 4px 10px rgb(100 100 100 / 40%);
  60. border-bottom: 1px solid #fff;
  61. position: fixed;
  62. display: flex;
  63. size: 100% 40px;
  64. z-index: 2;
  65. top: 0;
  66. }
  67. .top-bar-inner {
  68. display: flex;
  69. flex-grow: 1;
  70. padding-left: 20px;
  71. padding-right: 20px;
  72. justify-content: space-between;
  73. @media (--viewport-large) {
  74. padding-left: 0;
  75. padding-right: 0;
  76. }
  77. }
  78. .top-bar-left {
  79. display: flex;
  80. }
  81. .top-bar-logo {
  82. display: flex;
  83. align-items: center;
  84. margin-right: 30px;
  85. }
  86. .top-bar-usage {
  87. display: none;
  88. @media (--viewport-small) {
  89. display: flex;
  90. align-items: center;
  91. }
  92. }
  93. .top-bar-usage-inner {
  94. display: flex;
  95. color: #fff;
  96. text-shadow: 1px 1px rgb(0 0 0 / 25%);
  97. font-weight: 500;
  98. }
  99. .top-bar-usage-item {
  100. margin-right: 11px;
  101. &:last-child {
  102. margin-right: 0;
  103. }
  104. & .fas {
  105. margin-right: 3px;
  106. }
  107. }
  108. .top-bar-right {
  109. display: flex;
  110. }
  111. .top-bar-notifications {
  112. display: flex;
  113. position: relative;
  114. }
  115. .top-bar-notifications-list {
  116. background-color: #fff;
  117. box-shadow: 0 3px 20px 0 rgb(0 0 0 / 40%);
  118. max-height: 500px;
  119. overflow-y: auto;
  120. position: absolute;
  121. top: 100%;
  122. right: 0;
  123. width: 280px;
  124. z-index: 1;
  125. border-bottom-left-radius: 6px;
  126. border-bottom-right-radius: 6px;
  127. border: 1px solid #fff;
  128. border-top: none;
  129. @media (--viewport-small) {
  130. width: 330px;
  131. }
  132. @media (--viewport-medium) {
  133. width: 400px;
  134. }
  135. }
  136. .top-bar-notification-item {
  137. color: #6f6f6f;
  138. font-size: 0.8rem;
  139. border-bottom: 1px solid #e9e4e4;
  140. padding: 15px;
  141. &:last-child {
  142. border-bottom: none;
  143. }
  144. &.empty {
  145. text-align: center;
  146. font-size: 1.2rem;
  147. font-weight: normal;
  148. padding: 4rem;
  149. & .fas {
  150. font-size: 4rem;
  151. margin-bottom: 20px;
  152. }
  153. }
  154. &.unseen {
  155. & .top-bar-notification-title {
  156. color: #c36;
  157. }
  158. & .top-bar-notification-delete {
  159. display: block;
  160. }
  161. }
  162. & a {
  163. font-weight: 600;
  164. }
  165. }
  166. .top-bar-notification-timestamp {
  167. font-size: 0.75rem;
  168. font-weight: 600;
  169. text-align: right;
  170. margin-top: 10px;
  171. }
  172. .top-bar-notification-header {
  173. display: flex;
  174. align-items: center;
  175. justify-content: space-between;
  176. margin-bottom: 10px;
  177. }
  178. .top-bar-notification-title {
  179. color: #9e9e9e;
  180. font-size: 0.85rem;
  181. font-weight: 600;
  182. & a {
  183. color: #9e9e9e;
  184. }
  185. }
  186. .top-bar-notification-delete {
  187. display: none;
  188. background-color: transparent;
  189. border: 0;
  190. padding-left: 5px;
  191. padding-right: 5px;
  192. background: none;
  193. & .fas {
  194. color: #c36;
  195. font-size: 0.9rem;
  196. }
  197. &:hover .fas {
  198. opacity: 0.8;
  199. }
  200. }
  201. .top-bar-notification-delete-all {
  202. display: block;
  203. background-color: transparent;
  204. text-align: center;
  205. border: 0;
  206. padding: 10px 15px;
  207. width: 100%;
  208. background: none;
  209. color: var(--color-text-link);
  210. &:hover {
  211. background-color: rgb(0 0 0 / 5%);
  212. color: var(--color-text-link-hover);
  213. }
  214. & .fas {
  215. color: #c36;
  216. margin-right: 5px;
  217. }
  218. }
  219. .top-bar-menu {
  220. display: flex;
  221. position: relative;
  222. }
  223. .top-bar-menu-list {
  224. display: block;
  225. background-color: #4673b6;
  226. box-shadow: 0 3px 20px 0 rgb(0 0 0 / 40%);
  227. position: absolute;
  228. top: 100%;
  229. right: 0;
  230. animation-name: fadeIn;
  231. animation-duration: var(--animate-duration);
  232. @media (--viewport-medium) {
  233. display: flex !important; /* NOTE: Overrides inline style set by JS */
  234. background-color: transparent;
  235. box-shadow: none;
  236. position: static;
  237. animation-name: none;
  238. animation-duration: 0s;
  239. }
  240. }
  241. .top-bar-menu-item {
  242. @media (--viewport-medium) {
  243. display: flex;
  244. }
  245. }
  246. .top-bar-menu-link {
  247. color: #f7f7f7;
  248. display: flex;
  249. align-items: center;
  250. font-size: 0.8rem;
  251. font-weight: 600;
  252. text-shadow: 1px 1px rgb(0 0 0 / 25%);
  253. background-color: transparent;
  254. border: 0;
  255. border-left: 1px solid transparent;
  256. border-right: 1px solid transparent;
  257. padding: 10px;
  258. &:hover {
  259. box-shadow: inset 0 0 6px rgb(255 255 255 / 60%);
  260. transition: 0.2s;
  261. color: #4686b8;
  262. border-left: 1px solid rgb(0 0 0 / 10%);
  263. border-right: 1px solid rgb(0 0 0 / 10%);
  264. background: linear-gradient(
  265. to bottom,
  266. rgb(255 255 255 / 60%) 0%,
  267. rgb(255 255 255 / 75%) 30%,
  268. rgb(255 255 255 / 100%) 95%
  269. );
  270. text-shadow: 0 1px rgb(255 255 255 / 80%);
  271. }
  272. &:active {
  273. color: #046c98;
  274. border-left: 1px solid rgb(0 0 0 / 15%);
  275. border-right: 1px solid rgb(0 0 0 / 15%);
  276. text-shadow: 0 -1px 1px rgb(255 255 255 / 50%);
  277. background: linear-gradient(
  278. to bottom,
  279. rgb(255 255 255 / 50%) 0%,
  280. rgb(255 255 255 / 60%) 30%,
  281. rgb(255 255 255 / 95%) 95%
  282. );
  283. box-shadow: inset 0 0 1px #fff, inset -1px -1px 4px rgb(220 220 220 / 40%);
  284. transition: 0.2s;
  285. }
  286. &.active {
  287. color: #4686b8;
  288. background: linear-gradient(
  289. to bottom,
  290. rgb(255 255 255 / 60%) 0%,
  291. rgb(255 255 255 / 75%) 30%,
  292. rgb(255 255 255 / 100%) 95%
  293. );
  294. text-shadow: 0 1px rgb(255 255 255 / 80%);
  295. border-left: 1px solid rgb(255 255 255 / 98%);
  296. border-right: 1px solid rgb(255 255 255 / 98%);
  297. }
  298. & .fas {
  299. font-size: 1.1rem;
  300. }
  301. }
  302. .top-bar-menu-link-logout {
  303. color: #dbf94e;
  304. }
  305. .top-bar-menu-link-label {
  306. margin-left: 6px;
  307. white-space: nowrap;
  308. @media (--viewport-medium) {
  309. display: none;
  310. }
  311. @media (--viewport-large) {
  312. display: inline;
  313. }
  314. }
  315. /* Main menu
  316. ========================================================================== */
  317. .main-menu {
  318. @media (--viewport-medium) {
  319. padding-top: 10px;
  320. }
  321. }
  322. .main-menu-toggle {
  323. border: 0;
  324. background-color: transparent;
  325. padding: 10px;
  326. display: block;
  327. width: 100%;
  328. &:hover {
  329. background-color: rgb(0 0 0 / 5%);
  330. & .main-menu-toggle-label {
  331. color: #c36;
  332. }
  333. }
  334. & .fas {
  335. color: #999;
  336. margin-right: 5px;
  337. }
  338. @media (--viewport-small) {
  339. display: none;
  340. }
  341. }
  342. .main-menu-toggle-label {
  343. color: #5b5b5b;
  344. font-weight: 600;
  345. }
  346. .main-menu-list {
  347. display: block;
  348. border-top: 1px solid #ddd;
  349. @media (--viewport-small) {
  350. border-top: 0;
  351. display: flex !important; /* NOTE: Overrides inline style set by JS */
  352. justify-content: space-evenly;
  353. }
  354. }
  355. .main-menu-item {
  356. @media (--viewport-small) {
  357. flex-grow: 1;
  358. }
  359. @media (--viewport-medium) {
  360. flex-grow: 0;
  361. display: flex;
  362. &.focus {
  363. & .main-menu-item-link {
  364. border-bottom-color: #5edad0;
  365. }
  366. & .main-menu-item-label {
  367. color: #5edad0;
  368. }
  369. }
  370. }
  371. }
  372. .main-menu-item-link {
  373. display: block;
  374. text-align: center;
  375. padding: 10px;
  376. &:hover {
  377. background-color: rgb(0 0 0 / 5%);
  378. & .main-menu-item-label {
  379. color: #c36;
  380. }
  381. }
  382. &.active {
  383. & .main-menu-item-label {
  384. color: #c36;
  385. & .fas {
  386. color: #c36;
  387. }
  388. }
  389. }
  390. @media (--viewport-small) {
  391. padding-top: 20px;
  392. padding-bottom: 20px;
  393. }
  394. @media (--viewport-medium) {
  395. border-bottom: 4px solid #fff;
  396. &:hover,
  397. &.active {
  398. background-color: transparent;
  399. border-bottom-color: #c36;
  400. transition: 0.3s;
  401. }
  402. }
  403. @media (--viewport-large) {
  404. padding-left: 25px;
  405. padding-right: 25px;
  406. }
  407. }
  408. .main-menu-item-label {
  409. color: #5b5b5b;
  410. font-weight: 600;
  411. & .fas {
  412. color: #999;
  413. margin-left: 6px;
  414. }
  415. @media (--viewport-medium) {
  416. font-size: 1rem;
  417. & .fas {
  418. margin-left: 10px;
  419. }
  420. }
  421. }
  422. .main-menu-stats {
  423. display: none;
  424. @media (--viewport-medium) {
  425. color: var(--color-text);
  426. display: block;
  427. font-size: 0.75rem;
  428. text-transform: lowercase;
  429. line-height: 1.8;
  430. padding-top: 10px;
  431. padding-bottom: 10px;
  432. }
  433. }
  434. /* Toolbar
  435. ========================================================================== */
  436. .toolbar {
  437. background-color: #fff;
  438. border-top: 1px solid #ddd;
  439. border-bottom: 1px solid #ddd;
  440. & .form-select {
  441. color: inherit;
  442. padding-top: 4px;
  443. padding-bottom: 4px;
  444. box-shadow: none;
  445. border-color: #ddd;
  446. border-right-color: transparent;
  447. border-top-right-radius: 0;
  448. border-bottom-right-radius: 0;
  449. &:focus {
  450. box-shadow: none;
  451. }
  452. }
  453. & .form-control {
  454. padding-top: 4px;
  455. padding-bottom: 4px;
  456. box-shadow: none;
  457. border-color: #ddd;
  458. border-right-color: transparent;
  459. border-top-right-radius: 0;
  460. border-bottom-right-radius: 0;
  461. &:hover {
  462. border-right-color: #94c8f0;
  463. }
  464. &:focus {
  465. border-right-color: #008fee;
  466. }
  467. }
  468. @media (--viewport-large) {
  469. position: sticky;
  470. z-index: 1;
  471. top: 39px;
  472. height: 45px;
  473. display: flex;
  474. justify-content: center;
  475. align-items: center;
  476. &.active {
  477. box-shadow: 0 4px 6px rgb(0 0 0 / 10%);
  478. }
  479. & .form-select {
  480. max-width: 200px;
  481. }
  482. }
  483. }
  484. .toolbar-inner {
  485. padding: 10px 20px;
  486. @media (--viewport-large) {
  487. display: flex;
  488. justify-content: space-between;
  489. align-items: center;
  490. flex-grow: 1;
  491. max-width: 1024px;
  492. padding: 5px 0;
  493. }
  494. }
  495. .toolbar-right {
  496. & form {
  497. display: flex;
  498. }
  499. @media (--viewport-large) {
  500. display: flex;
  501. }
  502. }
  503. .toolbar-sorting {
  504. position: relative;
  505. font-size: 0.8rem;
  506. padding-bottom: 5px;
  507. & form {
  508. flex-grow: 1;
  509. }
  510. @media (--viewport-small) {
  511. display: flex;
  512. align-items: center;
  513. & form {
  514. margin-left: 10px;
  515. }
  516. }
  517. @media (--viewport-large) {
  518. padding-bottom: 0;
  519. }
  520. }
  521. .toolbar-sorting-toggle {
  522. color: var(--color-text);
  523. display: block;
  524. border: 0;
  525. padding-bottom: 5px;
  526. background: none;
  527. text-transform: uppercase;
  528. &:hover {
  529. color: #4b4b4b;
  530. & b {
  531. color: #4b4b4b;
  532. }
  533. }
  534. &:active {
  535. color: #3b9de8;
  536. & b {
  537. color: #3b9de8;
  538. }
  539. }
  540. & b {
  541. padding-left: 3px;
  542. }
  543. @media (--viewport-small) {
  544. padding-bottom: 0;
  545. }
  546. }
  547. .toolbar-sorting-menu {
  548. position: absolute;
  549. top: 25px;
  550. left: 0;
  551. z-index: 1;
  552. overflow: hidden;
  553. border-radius: var(--border-radius-base);
  554. border: 1px solid rgb(255 255 255 / 100%);
  555. background-color: rgb(255 255 255 / 95%);
  556. box-shadow: 0 2px 14px 0 rgb(20 20 20 / 35%);
  557. & li {
  558. border-bottom: 1px solid #ddd;
  559. color: #2e2e2e;
  560. cursor: pointer;
  561. &:last-child {
  562. border-bottom: none;
  563. }
  564. }
  565. & span {
  566. &.name {
  567. display: inline-block;
  568. padding: 11px;
  569. width: 141px;
  570. font-weight: 500;
  571. & .fas.fa-arrow-down-a-z {
  572. float: right;
  573. margin-top: 2px;
  574. }
  575. }
  576. &.up {
  577. display: inline-block;
  578. padding: 11px 14px;
  579. width: 44px;
  580. }
  581. &.active {
  582. background-color: #4f8bbc;
  583. color: #4686b8;
  584. background: linear-gradient(
  585. to bottom,
  586. rgb(255 255 255 / 60%) 0%,
  587. rgb(255 255 255 / 75%) 50%,
  588. rgb(255 255 255 / 95%) 95%
  589. );
  590. text-shadow: 0 1px rgb(255 255 255 / 80%);
  591. }
  592. &:hover {
  593. color: #3b9de8;
  594. text-shadow: 1px 1px rgb(255 255 255 / 50%);
  595. background: linear-gradient(
  596. to bottom,
  597. rgb(241 248 253 / 100%) 0%,
  598. rgb(218 236 250 / 100%) 50%,
  599. rgb(190 221 246 / 100%) 51%,
  600. rgb(227 240 251 / 100%) 100%
  601. );
  602. box-shadow: inset 0 0 1px #fff, inset 0 0 6px rgb(255 255 255 / 60%);
  603. transition: 0.2s;
  604. }
  605. &:active,
  606. &:focus {
  607. background: linear-gradient(
  608. to bottom,
  609. rgb(210 232 250 / 100%) 0%,
  610. rgb(187 220 247 / 100%) 50%,
  611. rgb(162 207 244 / 100%) 51%,
  612. rgb(194 224 248 / 100%) 100%
  613. );
  614. color: #046c98;
  615. text-shadow: 0 -1px 1px rgb(255 255 255 / 50%);
  616. box-shadow: inset 0 0 1px #fff, inset -1px -1px 4px rgb(220 220 220 / 40%);
  617. }
  618. }
  619. @media (--viewport-small) {
  620. top: 35px;
  621. }
  622. }
  623. .toolbar-input-submit {
  624. display: flex;
  625. align-items: center;
  626. border: 1px solid #ddd;
  627. border-left: 0;
  628. background-color: rgb(255 255 255 / 90%);
  629. border-radius: 0 var(--border-radius-base) var(--border-radius-base) 0;
  630. box-shadow: inset 0 0 1px rgb(41 90 152 / 10%), inset 0 0 2px rgb(255 255 255 / 100%);
  631. text-shadow: 1px 1px rgb(255 255 255 / 90%);
  632. color: #069;
  633. min-width: 32px;
  634. padding: 0 10px;
  635. font-size: 0.75rem;
  636. &:hover {
  637. color: #39c;
  638. background-color: #fff;
  639. }
  640. &:active {
  641. color: #409fd5;
  642. box-shadow: inset 1px 1px 0 rgb(0 0 0 / 10%);
  643. }
  644. }
  645. .toolbar-link {
  646. display: block;
  647. padding: 6px 12px;
  648. color: #777;
  649. text-transform: uppercase;
  650. font-weight: 600;
  651. &.selected {
  652. color: #c36;
  653. }
  654. &:hover {
  655. color: #c36;
  656. }
  657. &:active {
  658. color: #3b9de8;
  659. }
  660. }
  661. .toolbar-buttons {
  662. padding-bottom: 10px;
  663. &:last-child {
  664. padding-bottom: 0;
  665. }
  666. & .button {
  667. min-width: 0;
  668. width: 100%;
  669. margin-bottom: 5px;
  670. padding-left: 10px;
  671. padding-right: 10px;
  672. &:last-child {
  673. margin-bottom: 0;
  674. }
  675. }
  676. @media (--viewport-medium) {
  677. display: flex;
  678. align-items: center;
  679. & .inline-alert {
  680. margin-right: 20px;
  681. }
  682. & .button {
  683. margin-bottom: 0;
  684. margin-right: 8px;
  685. &:last-child {
  686. margin-right: 0;
  687. }
  688. }
  689. }
  690. @media (--viewport-large) {
  691. padding-bottom: 0;
  692. & .button {
  693. width: auto;
  694. }
  695. }
  696. }
  697. .toolbar-search {
  698. @media (--viewport-large) {
  699. margin-left: 12px;
  700. }
  701. }
  702. /* Cards
  703. ========================================================================== */
  704. .cards {
  705. @media (--viewport-small) {
  706. display: grid;
  707. gap: 25px;
  708. grid-template-columns: repeat(2, 1fr);
  709. }
  710. @media (--viewport-medium) {
  711. grid-template-columns: repeat(4, 1fr);
  712. }
  713. }
  714. .card {
  715. overflow: hidden;
  716. background-color: #f5f5f5;
  717. border: 1px solid #d3d3d3;
  718. box-shadow: 0 1px 4px rgb(0 0 0 / 20%);
  719. border-radius: var(--border-radius-base);
  720. margin-bottom: 20px;
  721. @media (--viewport-small) {
  722. margin-bottom: 0;
  723. }
  724. &.disabled {
  725. color: #b6b6b6;
  726. & .card-thumb {
  727. filter: grayscale(100%);
  728. opacity: 0.3;
  729. }
  730. }
  731. }
  732. .card-thumb {
  733. background-color: #fff;
  734. display: flex;
  735. align-items: center;
  736. justify-content: center;
  737. height: 180px;
  738. padding: 20px;
  739. & img {
  740. max-width: 100%;
  741. max-height: 100%;
  742. }
  743. }
  744. .card-content {
  745. padding: 10px;
  746. color: #353535;
  747. border-top: 1px solid #e6e6e6;
  748. text-align: center;
  749. }
  750. .card-title {
  751. font-size: 1rem;
  752. font-weight: 600;
  753. }
  754. /* Improve alignment of "Users" list double-height rows */
  755. .body-user {
  756. & .l-unit.animate__animated.animate__fadeIn,
  757. & .actions-panel {
  758. line-height: 2rem;
  759. }
  760. }
  761. .table-header {
  762. font-size: 0.8rem;
  763. background: linear-gradient(to bottom, rgb(247 247 247 / 100%) 0%, rgb(255 255 255 / 100%) 100%);
  764. background-color: #fff;
  765. border-left: 1px solid #d0d0d0;
  766. border-right: 1px solid #d0d0d0;
  767. border-bottom: 1px solid #d0d0d0;
  768. text-shadow: 0 1px rgb(255 255 255 / 100%);
  769. box-shadow: inset 0 1px 1px rgb(255 255 255 / 100%), inset 0 0 1px rgb(255 255 255 / 100%),
  770. inset 0 0 4px rgb(255 255 255 / 80%), 0 1px 4px rgb(140 140 140 / 35%);
  771. border-radius: 0 0 6px 6px;
  772. min-height: 28px;
  773. padding: 4px 0 4px 15px;
  774. color: #707070;
  775. overflow: hidden;
  776. width: 1024px;
  777. line-height: 1rem;
  778. & .fas {
  779. font-size: 1rem;
  780. }
  781. }
  782. .units {
  783. overflow-x: auto;
  784. padding-left: 20px;
  785. padding-right: 20px;
  786. padding-bottom: 20px;
  787. @media (--viewport-large) {
  788. padding-left: 0;
  789. padding-right: 0;
  790. padding-bottom: 0;
  791. }
  792. }
  793. .l-unit {
  794. color: #707070;
  795. padding-left: 15px;
  796. overflow: hidden;
  797. font-size: 0.8rem;
  798. border-left: 1px solid transparent;
  799. border-right: 1px solid transparent;
  800. }
  801. .units .l-unit {
  802. border-bottom: 1px solid #ddd;
  803. border-left: 1px solid transparent;
  804. border-right: 1px solid transparent;
  805. width: 1024px;
  806. }
  807. .l-unit:hover,
  808. .units .l-unit:hover {
  809. box-shadow: 0 2px 10px rgb(150 150 150 / 20%);
  810. background-color: #f8f8f8;
  811. text-shadow: 0 1px rgb(255 255 255 / 50%);
  812. border-left: 1px solid #ddd;
  813. border-right: 1px solid #ddd;
  814. }
  815. .units .l-unit.l-unit--starred {
  816. border-left: 2px solid #c36;
  817. }
  818. .units.active .l-unit.focus {
  819. border-left: 2px solid #5edad0;
  820. background-color: #eff5fc;
  821. }
  822. .units.active .l-unit.focus .l-unit__name {
  823. color: #36b3a9;
  824. }
  825. .units.active .l-unit.focus .l-unit-toolbar__col--right {
  826. display: block;
  827. }
  828. .units > div:last-child {
  829. border-bottom: none;
  830. }
  831. .l-unit:hover .l-unit-toolbar__col--right {
  832. display: block;
  833. }
  834. .l-unit--blue {
  835. border-left: 2px solid #3b9de8;
  836. }
  837. .l-unit--suspended {
  838. background-color: #eaeaea !important;
  839. color: #c0c0c0;
  840. & a {
  841. color: #c0c0c0 !important;
  842. }
  843. }
  844. .units .l-unit.l-unit--outdated {
  845. background-color: #ffcaca;
  846. color: #4b4b4b;
  847. }
  848. .body-updates .units .l-unit.l-unit--outdated .fas.fa-box-open {
  849. color: #da1010;
  850. }
  851. .l-unit--suspended .l-unit__name,
  852. .l-unit--suspended b,
  853. .l-unit--outdated .l-unit__name,
  854. .l-unit--outdated b {
  855. color: #c0c0c0;
  856. }
  857. .l-unit--outdated .l-unit__name {
  858. color: #333;
  859. }
  860. .l-unit--outdated b {
  861. color: #4b4b4b;
  862. }
  863. .l-unit--suspended .l-percent {
  864. border-color: #fff;
  865. }
  866. .l-unit--suspended .l-percent__fill {
  867. background-color: #fff;
  868. }
  869. .l-unit--suspended .l-unit__name,
  870. .l-unit--suspended .l-unit__name span {
  871. color: #adadad;
  872. }
  873. .l-unit--suspended.selected {
  874. background-color: #f2eab8 !important;
  875. color: #b2ac87 !important;
  876. }
  877. .l-unit--outdated.selected {
  878. background: #ff9494 !important;
  879. color: #333 !important;
  880. text-shadow: none !important;
  881. }
  882. .l-unit--suspended.selected b,
  883. .l-unit--outdated.selected .l-unit__name,
  884. .l-unit--outdated.selected b,
  885. .l-unit--suspended.selected .l-percent,
  886. .l-unit--suspended.selected .l-percent__fill,
  887. .l-unit--suspended.selected .l-unit__name,
  888. .l-unit--suspended.selected .l-unit__name span {
  889. color: #333 !important;
  890. }
  891. .l-unit.selected .l-percent {
  892. border-bottom: 1px dotted #777;
  893. }
  894. .l-unit--selected {
  895. background-color: #d1eddc;
  896. }
  897. .l-unit-toolbar {
  898. display: none;
  899. }
  900. .l-unit label {
  901. margin-bottom: 20px;
  902. }
  903. .l-unit__columns {
  904. display: table;
  905. width: 100%;
  906. }
  907. .l-unit__col {
  908. display: table-cell;
  909. padding-top: 12px;
  910. vertical-align: top;
  911. padding-bottom: 10px;
  912. }
  913. .l-unit__col--left {
  914. width: 110px;
  915. padding-right: 10px;
  916. }
  917. .units.compact .l-unit__col--left {
  918. vertical-align: top;
  919. }
  920. .l-unit__col--right.total {
  921. padding-left: 16px;
  922. }
  923. .l-unit__suspended {
  924. display: none;
  925. font-size: 0.8rem;
  926. font-weight: 600;
  927. margin-top: 36px;
  928. text-transform: uppercase;
  929. margin-bottom: 14px;
  930. }
  931. .units.compact .l-unit__suspended {
  932. margin-top: 1px;
  933. }
  934. .l-unit--outdated .l-unit__suspended,
  935. .l-unit--suspended .l-unit__suspended {
  936. display: block;
  937. }
  938. .l-unit__name {
  939. color: #414141;
  940. font-size: 1.4rem;
  941. margin-top: 10px;
  942. margin-bottom: 10px;
  943. font-weight: 500;
  944. letter-spacing: -0.02em;
  945. }
  946. .l-unit__servername {
  947. color: #414141;
  948. font-size: 1.7rem;
  949. margin-bottom: 10px;
  950. font-weight: 300;
  951. letter-spacing: -0.02em;
  952. }
  953. .l-unit__stats.separate,
  954. .l-unit__name.separate {
  955. padding-bottom: 15px;
  956. }
  957. .body-stats .l-unit__name {
  958. margin-left: -42px;
  959. margin-top: 12px;
  960. color: #606060;
  961. }
  962. .l-unit__name span {
  963. color: #999;
  964. margin-left: 30px;
  965. font-style: italic;
  966. &:first-of-type {
  967. margin-left: 39px;
  968. }
  969. }
  970. .l-unit__name b {
  971. font-weight: normal;
  972. font-style: italic;
  973. }
  974. .l-unit__stats {
  975. margin-bottom: 10px;
  976. margin-left: 15%;
  977. border-left: 1px solid transparent;
  978. border-right: 1px solid transparent;
  979. &:hover {
  980. border-left: 1px solid transparent;
  981. border-right: 1px solid transparent;
  982. box-shadow: none;
  983. background: none;
  984. }
  985. & table {
  986. table-layout: fixed;
  987. margin-top: -54px;
  988. margin-left: -20px;
  989. }
  990. & td {
  991. height: 32px;
  992. padding-bottom: 4px;
  993. vertical-align: middle;
  994. }
  995. }
  996. .body-stats .l-unit__stat-col--left {
  997. width: 180px;
  998. }
  999. .body-stats .l-unit__stat-col--right {
  1000. float: right;
  1001. }
  1002. .l-unit__stat-col--left {
  1003. float: left;
  1004. width: 110px;
  1005. &.border {
  1006. border-left: 1px solid #ebebeb;
  1007. }
  1008. &.border-clear {
  1009. border-left: 1px solid transparent;
  1010. }
  1011. & a,
  1012. & a:visited {
  1013. color: #353535;
  1014. }
  1015. & a:hover {
  1016. color: #4c8bbe;
  1017. }
  1018. &.super-compact {
  1019. width: 50px;
  1020. white-space: nowrap;
  1021. }
  1022. &.compact {
  1023. width: 60px;
  1024. }
  1025. &.compact-1 {
  1026. width: 70px;
  1027. }
  1028. &.compact-2 {
  1029. width: 80px;
  1030. }
  1031. &.compact-3 {
  1032. width: 90px;
  1033. }
  1034. &.compact-4 {
  1035. width: 130px;
  1036. }
  1037. &.compact-5 {
  1038. width: 160px;
  1039. }
  1040. &.wide {
  1041. width: 190px;
  1042. }
  1043. &.wide-2 {
  1044. width: 230px;
  1045. }
  1046. &.wide-3 {
  1047. width: 250px;
  1048. }
  1049. &.wide-4 {
  1050. width: 320px;
  1051. }
  1052. &.wide-5 {
  1053. width: 350px;
  1054. }
  1055. &.wide-6 {
  1056. width: 440px;
  1057. }
  1058. &.wide-7 {
  1059. width: 550px;
  1060. }
  1061. }
  1062. .l-unit__stat-col--right {
  1063. float: left;
  1064. max-width: 170px;
  1065. }
  1066. .l-unit-toolbar__col--right {
  1067. float: right;
  1068. }
  1069. .l-unit-toolbar .shortcut {
  1070. display: none;
  1071. }
  1072. .units.active .l-unit.focus .l-unit-toolbar .shortcut {
  1073. display: block;
  1074. background-color: #69a298;
  1075. border-radius: 13px;
  1076. color: #fff;
  1077. cursor: pointer;
  1078. font-size: 0.8rem;
  1079. font-weight: 600;
  1080. line-height: 25px;
  1081. padding-left: 7px;
  1082. padding-right: 9px;
  1083. position: absolute;
  1084. right: 3px;
  1085. top: 3px;
  1086. }
  1087. .units.active .l-unit.focus .l-unit-toolbar .shortcut.delete {
  1088. font-size: 10px;
  1089. padding-left: 2px;
  1090. padding-right: 5px;
  1091. text-transform: capitalize;
  1092. }
  1093. .units.active .l-unit.focus .l-unit-toolbar .shortcut.enter {
  1094. font-size: 17px;
  1095. padding-left: 1px;
  1096. padding-right: 7px;
  1097. }
  1098. .units.active .l-unit.focus .l-unit-toolbar i {
  1099. background: none;
  1100. }
  1101. .actions-panel {
  1102. line-height: 1.1rem;
  1103. }
  1104. .actions-panel__col {
  1105. display: inline-block;
  1106. margin-left: 3px;
  1107. text-transform: uppercase;
  1108. & a {
  1109. color: #777;
  1110. font-weight: 600;
  1111. font-size: 0.9rem;
  1112. display: inline-block;
  1113. cursor: pointer;
  1114. }
  1115. }
  1116. .l-unit__col .actions-panel .fas {
  1117. display: none;
  1118. }
  1119. .l-unit__col:hover .actions-panel .fas {
  1120. display: inline-block;
  1121. }
  1122. .l-unit__stat-cols {
  1123. padding-right: 10px;
  1124. }
  1125. .l-unit__stat-cols.last {
  1126. padding-right: 0;
  1127. }
  1128. .l-unit__stat-cols.graph {
  1129. width: 242px;
  1130. }
  1131. .l-percent {
  1132. border-bottom: 3px solid #e6e6e6;
  1133. margin-top: 2px;
  1134. width: 242px;
  1135. }
  1136. .l-percent__fill {
  1137. background-color: #54e000;
  1138. height: 3px;
  1139. position: relative;
  1140. bottom: -3px;
  1141. }
  1142. .statistics-count {
  1143. min-width: 24px;
  1144. text-align: right;
  1145. border-bottom: 1px dotted #ddd;
  1146. border-right: 1px dotted #ddd;
  1147. padding-right: 4px;
  1148. }
  1149. /* Forms
  1150. ========================================================================== */
  1151. .form-container {
  1152. max-width: 640px;
  1153. margin-left: auto;
  1154. margin-right: auto;
  1155. padding: 30px 20px;
  1156. }
  1157. .form-container-wide {
  1158. max-width: 920px;
  1159. }
  1160. .form-container-narrow {
  1161. max-width: 810px;
  1162. }
  1163. @media (--viewport-medium) {
  1164. .sidebar-right-container {
  1165. display: grid;
  1166. gap: 50px;
  1167. grid-template-columns: 2fr 1.3fr;
  1168. }
  1169. }
  1170. @media (--viewport-medium) {
  1171. .sidebar-left-container {
  1172. display: grid;
  1173. gap: 50px;
  1174. grid-template-columns: 1fr 3fr;
  1175. }
  1176. }
  1177. .form-title {
  1178. color: #4b4b4b;
  1179. font-size: 1.4rem;
  1180. font-weight: 500;
  1181. padding-bottom: 30px;
  1182. letter-spacing: -0.01em;
  1183. }
  1184. .form-label {
  1185. margin-bottom: 5px;
  1186. display: inline-block;
  1187. }
  1188. .form-label,
  1189. .form-check label {
  1190. color: #4b4b4b;
  1191. font-weight: 600;
  1192. }
  1193. .form-control {
  1194. background-color: #fff;
  1195. border: 1px solid #cfcfcf;
  1196. display: block;
  1197. width: 100%;
  1198. padding: 8px 12px;
  1199. font-size: 16px;
  1200. font-weight: normal;
  1201. color: #4e4e4e;
  1202. border-radius: var(--border-radius-base);
  1203. line-height: 1.5;
  1204. appearance: none;
  1205. box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
  1206. transition: background-color 0.5s;
  1207. &:hover {
  1208. border-color: #94c8f0;
  1209. }
  1210. &:focus {
  1211. border-color: #008fee;
  1212. background-color: #d7f9ff;
  1213. color: #333;
  1214. }
  1215. &.list-editor {
  1216. border-color: transparent;
  1217. box-shadow: none;
  1218. position: absolute;
  1219. padding-top: 7px;
  1220. padding-bottom: 7px;
  1221. width: auto;
  1222. top: 1px;
  1223. left: 1px;
  1224. right: 30px;
  1225. &:hover {
  1226. border-color: transparent;
  1227. }
  1228. &:focus {
  1229. background-color: #fff;
  1230. }
  1231. }
  1232. &.highlighted {
  1233. color: #444;
  1234. background-color: #fff7b6;
  1235. }
  1236. @media (--viewport-small) {
  1237. font-size: 0.8rem;
  1238. }
  1239. }
  1240. .form-select {
  1241. display: block;
  1242. width: 100%;
  1243. font-weight: normal;
  1244. font-size: 16px;
  1245. padding: 8px 30px 8px 12px;
  1246. line-height: 1.5;
  1247. border-radius: var(--border-radius-base);
  1248. background-color: #fff;
  1249. border: 1px solid #ccc;
  1250. color: #4e4e4e;
  1251. appearance: none;
  1252. background-image: url("/images/arrow.svg");
  1253. background-size: 16px auto;
  1254. background-repeat: no-repeat;
  1255. background-position: right 9px center;
  1256. text-shadow: 0 0 0 #4b4b4b;
  1257. box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
  1258. &:hover {
  1259. border-color: #94c8f0;
  1260. }
  1261. &:focus {
  1262. border-color: #008fee;
  1263. }
  1264. @media (--viewport-small) {
  1265. font-size: 0.8rem;
  1266. }
  1267. }
  1268. .form-check {
  1269. position: relative;
  1270. padding-left: 20px;
  1271. margin-left: 3px;
  1272. min-height: 24px;
  1273. }
  1274. .form-check-input {
  1275. position: absolute;
  1276. margin-top: 3px;
  1277. margin-left: -20px;
  1278. }
  1279. .form-control:disabled,
  1280. .form-select:disabled {
  1281. background-color: #e7e7e7;
  1282. text-shadow: 1px 1px rgb(255 255 255 / 100%);
  1283. color: #686868;
  1284. }
  1285. .form-control:focus:disabled {
  1286. border-color: #dedede;
  1287. background-color: #f1f1f1;
  1288. }
  1289. .form-control:disabled:hover,
  1290. .form-select:disabled:hover {
  1291. border-color: #cfcfcf;
  1292. }
  1293. .form-link {
  1294. color: #326b9b;
  1295. cursor: pointer;
  1296. text-decoration: underline;
  1297. font-weight: 600;
  1298. border-radius: var(--border-radius-base);
  1299. margin-left: -3px;
  1300. border: 0;
  1301. padding-left: 3px;
  1302. padding-right: 3px;
  1303. background-color: transparent;
  1304. &:hover {
  1305. text-decoration: none;
  1306. color: #fff;
  1307. background-color: #3b9de8;
  1308. }
  1309. &:active {
  1310. background-color: #54a6e5;
  1311. }
  1312. }
  1313. .form-link-danger {
  1314. &:hover {
  1315. background-color: #c36;
  1316. }
  1317. &:active {
  1318. background-color: #f7d616;
  1319. }
  1320. }
  1321. .toggle-password {
  1322. color: #aaa;
  1323. z-index: 1;
  1324. position: absolute;
  1325. top: 9px;
  1326. right: 12px;
  1327. }
  1328. .toggle-psw-visibility-icon {
  1329. cursor: pointer;
  1330. opacity: 1;
  1331. margin: -2px;
  1332. }
  1333. .password-meter {
  1334. height: 3px;
  1335. overflow: hidden;
  1336. margin-left: 3px;
  1337. margin-right: 3px;
  1338. border-bottom-left-radius: 3px;
  1339. border-bottom-right-radius: 3px;
  1340. box-shadow: 0 1px 2px rgb(0 0 0 / 25%);
  1341. }
  1342. .password-meter-input {
  1343. appearance: none;
  1344. display: block;
  1345. size: 100%;
  1346. background: #e7e7e7;
  1347. &[value="1"] {
  1348. background: red;
  1349. &::-moz-meter-bar {
  1350. background: red;
  1351. }
  1352. &::-webkit-meter-bar {
  1353. background: red;
  1354. }
  1355. &::-webkit-meter-optimum-value {
  1356. background: red;
  1357. }
  1358. }
  1359. &[value="2"] {
  1360. background: orange;
  1361. &::-moz-meter-bar {
  1362. background: orange;
  1363. }
  1364. &::-webkit-meter-bar {
  1365. background: orange;
  1366. }
  1367. &::-webkit-meter-optimum-value {
  1368. background: orange;
  1369. }
  1370. }
  1371. &[value="3"] {
  1372. background: yellow;
  1373. &::-moz-meter-bar {
  1374. background: yellow;
  1375. }
  1376. &::-webkit-meter-bar {
  1377. background: yellow;
  1378. }
  1379. &::-webkit-meter-optimum-value {
  1380. background: yellow;
  1381. }
  1382. }
  1383. &[value="4"] {
  1384. background: green;
  1385. &::-moz-meter-bar {
  1386. background: green;
  1387. }
  1388. &::-webkit-meter-bar {
  1389. background: green;
  1390. }
  1391. &::-webkit-meter-optimum-value {
  1392. background: green;
  1393. }
  1394. }
  1395. }
  1396. .unlim-trigger {
  1397. cursor: pointer;
  1398. position: absolute;
  1399. top: 13px;
  1400. right: 12px;
  1401. z-index: 1;
  1402. font-size: 0.8rem;
  1403. }
  1404. .optional {
  1405. font-size: 0.8rem;
  1406. margin-left: 6px;
  1407. font-weight: normal;
  1408. }
  1409. .hint {
  1410. color: #777;
  1411. font-size: 0.8rem;
  1412. font-style: italic;
  1413. font-weight: normal;
  1414. }
  1415. .hint-prefix {
  1416. color: #555;
  1417. font-size: 0.8rem;
  1418. }
  1419. .section-title {
  1420. display: flex;
  1421. color: #4b4b4b;
  1422. cursor: pointer;
  1423. justify-content: space-between;
  1424. align-items: center;
  1425. font-size: 1.05rem;
  1426. font-weight: 600;
  1427. padding-top: 28px;
  1428. padding-bottom: 12px;
  1429. border-bottom: 1px solid #ccc;
  1430. }
  1431. /* Modals
  1432. ========================================================================== */
  1433. .modal {
  1434. border-radius: var(--border-radius-base);
  1435. box-shadow: inset 0 1px 3px rgb(0 0 0 / 25%), 0 8px 40px 0 rgb(0 0 0 / 35%);
  1436. background-color: rgb(255 255 255 / 90%);
  1437. border: 1px solid rgb(255 255 255 / 98%);
  1438. @media (--viewport-small) {
  1439. min-width: 360px;
  1440. max-width: 550px;
  1441. }
  1442. }
  1443. .modal-title {
  1444. color: #305ba9;
  1445. font-size: 1rem;
  1446. text-align: center;
  1447. padding: 15px 20px 0;
  1448. }
  1449. .modal-message {
  1450. color: #535353;
  1451. text-align: center;
  1452. padding: 25px 20px;
  1453. }
  1454. .modal-options {
  1455. box-shadow: inset 0 0 2px rgb(0 0 0 / 25%);
  1456. display: flex;
  1457. justify-content: flex-end;
  1458. padding: 10px;
  1459. }
  1460. /* Shortcuts panel
  1461. ========================================================================== */
  1462. .shortcuts {
  1463. background: rgb(50 50 50 / 93%);
  1464. color: #eee;
  1465. border: 1px solid rgb(255 255 255 / 70%);
  1466. border-radius: 6px;
  1467. box-shadow: 0 4px 30px rgb(0 0 0 / 50%);
  1468. & li {
  1469. padding: 5px 20px;
  1470. }
  1471. & .key {
  1472. color: #ff3478;
  1473. display: inline-block;
  1474. font-weight: 600;
  1475. padding-right: 20px;
  1476. &.bigger {
  1477. font-size: 1.1rem;
  1478. }
  1479. }
  1480. }
  1481. .shortcuts-header {
  1482. display: flex;
  1483. align-items: center;
  1484. justify-content: space-between;
  1485. border-bottom: 1px solid #606060;
  1486. padding: 10px 10px 10px 20px;
  1487. }
  1488. .shortcuts-title {
  1489. text-transform: uppercase;
  1490. color: #ff3478;
  1491. letter-spacing: -0.01em;
  1492. font-weight: 600;
  1493. }
  1494. .shortcuts-close {
  1495. cursor: pointer;
  1496. padding: 5px 10px;
  1497. &:hover {
  1498. color: #db0000;
  1499. }
  1500. &:active {
  1501. color: #a60000;
  1502. }
  1503. }
  1504. .shortcuts-inner {
  1505. @media (--viewport-medium) {
  1506. display: flex;
  1507. }
  1508. }
  1509. .shortcuts-list {
  1510. flex-grow: 1;
  1511. padding: 40px;
  1512. }
  1513. /* Buttons
  1514. ========================================================================== */
  1515. .button {
  1516. cursor: pointer;
  1517. display: inline-block;
  1518. line-height: 21px;
  1519. font-size: 0.85rem;
  1520. font-weight: 500;
  1521. padding: 3px 25px;
  1522. user-select: none;
  1523. color: #30659d;
  1524. min-width: 100px;
  1525. text-align: center;
  1526. text-shadow: 0 1px 1px rgb(255 255 255 / 85%);
  1527. border: 1px solid #0083db;
  1528. border-radius: 3px;
  1529. background-color: #3b9de8;
  1530. background: linear-gradient(
  1531. to bottom,
  1532. rgb(235 243 249 / 100%) 0%,
  1533. rgb(192 216 236 / 100%) 51%,
  1534. rgb(223 235 245 / 100%) 100%
  1535. );
  1536. box-shadow: 0 1px 3px rgb(0 0 0 / 25%), inset 0 0 1px #fff, inset 0 0 3px rgb(255 255 255 / 50%);
  1537. &:hover {
  1538. color: #0077c6;
  1539. text-shadow: 1px 1px rgb(255 255 255 / 50%);
  1540. border-color: #54a6e5;
  1541. background: linear-gradient(
  1542. to bottom,
  1543. rgb(241 248 253 / 100%) 0%,
  1544. rgb(190 221 246 / 100%) 51%,
  1545. rgb(227 240 251 / 100%) 100%
  1546. );
  1547. box-shadow: 0 1px 3px rgb(0 0 0 / 25%), inset 0 0 1px #fff, inset 0 0 6px rgb(255 255 255 / 60%);
  1548. transition: 0.2s;
  1549. }
  1550. &:active,
  1551. &:focus {
  1552. color: #517bab;
  1553. text-shadow: 0 -1px 2px rgb(255 255 255 / 85%);
  1554. border-color: #0066b4;
  1555. background: linear-gradient(
  1556. to bottom,
  1557. rgb(194 224 248 / 100%) 0%,
  1558. rgb(162 207 244 / 100%) 51%,
  1559. rgb(210 232 250 / 100%) 100%
  1560. );
  1561. box-shadow: 0 1px 2px rgb(0 0 0 / 20%), inset 0 0 1px #fff,
  1562. inset -1px -1px 4px rgb(220 220 220 / 40%);
  1563. }
  1564. & .fas {
  1565. margin-right: 6px;
  1566. }
  1567. }
  1568. .button-secondary {
  1569. color: #717171;
  1570. border-color: #aaa;
  1571. background: linear-gradient(
  1572. to bottom,
  1573. rgb(250 250 250 / 100%) 0%,
  1574. rgb(230 230 230 / 100%) 51%,
  1575. rgb(242 242 242 / 100%) 100%
  1576. );
  1577. }
  1578. .button-danger:hover {
  1579. background: linear-gradient(to bottom, #fbf2f1 0%, #f6b4ac 51%, #fde6e3 100%);
  1580. color: #f4301a;
  1581. text-shadow: 0 1px rgb(255 255 255 / 50%);
  1582. border-color: #f27e71;
  1583. }
  1584. .button-danger:active,
  1585. .button-danger:focus {
  1586. background: linear-gradient(to bottom, #fcd0ca 0%, #f5a69d 50%, #f9e3df 100%);
  1587. color: #ce1500;
  1588. text-shadow: 0 1px 1px rgb(255 255 255 / 20%), 0 -1px 1px rgb(255 255 255 / 60%);
  1589. border-color: #f4301a;
  1590. }
  1591. .button-circle {
  1592. border-radius: 50%;
  1593. min-width: 30px;
  1594. min-height: 30px;
  1595. padding: 3px;
  1596. & .fas {
  1597. margin-right: 0;
  1598. }
  1599. }
  1600. .button-floating {
  1601. display: none;
  1602. @media (--viewport-medium) {
  1603. display: flex;
  1604. justify-content: center;
  1605. align-items: center;
  1606. position: fixed;
  1607. z-index: 1;
  1608. bottom: 70px;
  1609. }
  1610. }
  1611. .button-floating-top {
  1612. right: 60px;
  1613. }
  1614. .button-floating-shortcuts {
  1615. right: 110px;
  1616. }
  1617. /* Values List component
  1618. ========================================================================== */
  1619. .values-list {
  1620. }
  1621. .values-list-item {
  1622. margin-bottom: 3px;
  1623. @media (--viewport-small) {
  1624. display: flex;
  1625. }
  1626. }
  1627. .values-list-label {
  1628. display: block;
  1629. font-weight: 600;
  1630. @media (--viewport-small) {
  1631. min-width: 130px;
  1632. }
  1633. }
  1634. .values-list-value {
  1635. }
  1636. /* Server summary component
  1637. ========================================================================== */
  1638. .server-summary {
  1639. padding: 20px;
  1640. @media (--viewport-medium) {
  1641. display: flex;
  1642. }
  1643. }
  1644. .server-summary-icon {
  1645. text-align: center;
  1646. margin-bottom: 10px;
  1647. & .fas {
  1648. font-size: 4.6rem;
  1649. }
  1650. @media (--viewport-medium) {
  1651. margin-top: 8px;
  1652. margin-bottom: 0;
  1653. }
  1654. }
  1655. .server-summary-content {
  1656. text-align: center;
  1657. @media (--viewport-medium) {
  1658. text-align: left;
  1659. flex-grow: 1;
  1660. margin-left: 30px;
  1661. }
  1662. @media (--viewport-large) {
  1663. margin-left: 40px;
  1664. }
  1665. }
  1666. .server-summary-title {
  1667. color: #414141;
  1668. margin-bottom: 10px;
  1669. @media (--viewport-medium) {
  1670. font-size: 1.7rem;
  1671. margin-bottom: 0;
  1672. }
  1673. }
  1674. .server-summary-list {
  1675. @media (--viewport-medium) {
  1676. display: flex;
  1677. justify-content: space-between;
  1678. }
  1679. }
  1680. .server-summary-item {
  1681. @media (--viewport-large) {
  1682. min-width: 200px;
  1683. }
  1684. }
  1685. .server-summary-list-label {
  1686. font-weight: 600;
  1687. @media (--viewport-medium) {
  1688. display: block;
  1689. }
  1690. }
  1691. .server-summary-list-value {
  1692. }
  1693. /* Panel component
  1694. ========================================================================== */
  1695. .panel {
  1696. padding: 20px;
  1697. border: 1px solid #d9d9d9;
  1698. box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
  1699. border-radius: var(--border-radius-base);
  1700. }
  1701. /* Collapse component
  1702. ========================================================================== */
  1703. .collapse {
  1704. }
  1705. .collapse[open] .collapse-header::after {
  1706. transform: rotate(180deg);
  1707. }
  1708. .collapse-header {
  1709. background: linear-gradient(to bottom, rgb(247 247 247 / 100%) 0%, rgb(255 255 255 / 100%) 100%);
  1710. border: 1px solid #ddd;
  1711. text-shadow: 0 1px rgb(255 255 255 / 95%);
  1712. box-shadow: inset 0 0 1px rgb(255 255 255 / 100%), inset 0 0 4px rgb(255 255 255 / 80%),
  1713. 0 4px 6px rgb(190 190 190 / 40%);
  1714. font-weight: 600;
  1715. color: #30659d;
  1716. cursor: pointer;
  1717. position: relative;
  1718. padding: 8px 18px;
  1719. &:hover {
  1720. color: #ff3478;
  1721. }
  1722. &::after {
  1723. content: "";
  1724. display: block;
  1725. background-image: url("/images/arrow.svg");
  1726. background-size: 22px auto;
  1727. background-repeat: no-repeat;
  1728. background-position: center;
  1729. size: 22px 100%;
  1730. position: absolute;
  1731. top: 0;
  1732. right: 15px;
  1733. }
  1734. }
  1735. .collapse-content {
  1736. box-sizing: border-box; /* Work around box-sizing not inheriting in <details> in many browsers */
  1737. padding: 20px 20px 10px;
  1738. @media (--viewport-medium) {
  1739. padding: 20px 50px 10px;
  1740. }
  1741. }
  1742. /* Login
  1743. ========================================================================== */
  1744. .body-login,
  1745. .body-reset {
  1746. display: flex;
  1747. align-items: center;
  1748. justify-content: center;
  1749. background: rgb(102 158 231);
  1750. background: radial-gradient(circle, rgb(102 158 231 / 100%) 0%, rgb(43 86 177 / 100%) 100%);
  1751. & .debug-panel {
  1752. display: none;
  1753. }
  1754. }
  1755. .login {
  1756. flex-grow: 1;
  1757. padding: 30px;
  1758. margin-bottom: 20%;
  1759. & .form-label {
  1760. color: #fff;
  1761. }
  1762. & .error {
  1763. color: #be5abf;
  1764. margin-bottom: 20px;
  1765. }
  1766. @media (--viewport-small) {
  1767. border-radius: 6px;
  1768. background-color: rgb(255 255 255 / 70%);
  1769. box-shadow: 0 8px 25px rgb(0 0 0 / 30%), inset 0 0 2px rgb(255 255 255 / 100%);
  1770. padding: 70px 50px;
  1771. max-width: 370px;
  1772. & .form-label {
  1773. color: #4b4b4b;
  1774. }
  1775. }
  1776. @media (--viewport-medium) {
  1777. display: flex;
  1778. align-items: flex-end;
  1779. gap: 30px;
  1780. max-width: 500px;
  1781. & form {
  1782. flex-grow: 1;
  1783. }
  1784. }
  1785. }
  1786. .login-title {
  1787. color: #fff;
  1788. font-size: 1.05rem;
  1789. font-weight: 500;
  1790. margin-bottom: 30px;
  1791. @media (--viewport-small) {
  1792. color: #4b4b4b;
  1793. }
  1794. }
  1795. .login-form-link {
  1796. color: #fff;
  1797. text-transform: uppercase;
  1798. @media (--viewport-small) {
  1799. color: #326b9b;
  1800. &:hover {
  1801. color: #0077c6;
  1802. }
  1803. }
  1804. }
  1805. /* Spinner
  1806. ========================================================================== */
  1807. .fullscreen-loader {
  1808. position: fixed;
  1809. inset: 0;
  1810. display: flex;
  1811. justify-content: center;
  1812. align-items: center;
  1813. padding: 50px;
  1814. background-color: rgb(0 0 0 / 50%);
  1815. font-size: 50px;
  1816. z-index: 9999;
  1817. visibility: hidden;
  1818. opacity: 0;
  1819. transition: opacity 0.2s ease, visibility 0s 0.2s;
  1820. &.show {
  1821. visibility: visible;
  1822. opacity: 1;
  1823. transition: opacity 0.2s ease, visibility 0s 0s;
  1824. }
  1825. }
  1826. .qr-code {
  1827. border: 1px solid #cfcfcf;
  1828. border-radius: var(--border-radius-base);
  1829. box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
  1830. }
  1831. .l-unit.selected {
  1832. background-color: #f8f8f8;
  1833. color: #4b4b4b;
  1834. box-shadow: 0 2px 10px rgb(150 150 150 / 20%);
  1835. text-shadow: 0 1px rgb(255 255 255 / 50%);
  1836. border-left: 1px solid #ddd;
  1837. border-right: 1px solid #ddd;
  1838. & b,
  1839. & strong {
  1840. color: #4b4b4b;
  1841. }
  1842. &:hover {
  1843. background-color: #fff5ce;
  1844. color: #4b4b4b;
  1845. box-shadow: 0 2px 14px rgb(150 150 150 / 25%);
  1846. text-shadow: 0 1px rgb(255 255 255 / 60%);
  1847. }
  1848. }
  1849. .console-output {
  1850. font-family: var(--font-family-monospace);
  1851. font-size: 0.92rem;
  1852. color: #202020;
  1853. }
  1854. #vstobjects.suspended {
  1855. background-color: #fff;
  1856. padding-bottom: 30px;
  1857. }
  1858. /* Badge component
  1859. ========================================================================== */
  1860. .badge {
  1861. display: inline-block;
  1862. min-width: 26px;
  1863. min-height: 24px;
  1864. line-height: 24px;
  1865. border-radius: 50%;
  1866. font-weight: 700;
  1867. font-size: 0.75rem;
  1868. box-shadow: 0 1px 2px rgb(70 70 70 / 50%), inset 0 2px 2px #fff;
  1869. color: #6c6c6c;
  1870. text-shadow: 0 1px #fafafa;
  1871. border: 1px solid #b8b8b8;
  1872. background-color: #eaeaea;
  1873. margin-top: -2px;
  1874. }
  1875. .l-unit--suspended .badge {
  1876. background: #eaeaea;
  1877. color: #c0c0c0;
  1878. text-shadow: 0 -1px #fafafa;
  1879. box-shadow: 0 1px 2px rgb(120 120 120 / 30%);
  1880. }
  1881. /* Icon component
  1882. ========================================================================== */
  1883. .icon-large {
  1884. font-size: 1rem;
  1885. }
  1886. .icon-teal {
  1887. color: var(--icon-color-teal);
  1888. &:hover {
  1889. color: var(--icon-color-teal);
  1890. }
  1891. }
  1892. .icon-purple {
  1893. color: var(--icon-color-purple);
  1894. &:hover {
  1895. color: var(--icon-color-purple);
  1896. }
  1897. }
  1898. .icon-maroon {
  1899. color: var(--icon-color-maroon);
  1900. &:hover {
  1901. color: var(--icon-color-maroon);
  1902. }
  1903. }
  1904. .icon-red {
  1905. color: var(--icon-color-red);
  1906. &:hover {
  1907. color: var(--icon-color-red);
  1908. }
  1909. }
  1910. .icon-green {
  1911. color: var(--icon-color-green);
  1912. &:hover {
  1913. color: var(--icon-color-green);
  1914. }
  1915. }
  1916. .icon-orange {
  1917. color: var(--icon-color-orange);
  1918. &:hover {
  1919. color: var(--icon-color-orange);
  1920. }
  1921. }
  1922. .icon-blue {
  1923. color: var(--icon-color-blue);
  1924. &:hover {
  1925. color: var(--icon-color-blue);
  1926. }
  1927. }
  1928. .icon-lightblue {
  1929. color: var(--icon-color-lightblue);
  1930. &:hover {
  1931. color: var(--icon-color-lightblue);
  1932. }
  1933. }
  1934. .icon-highlight {
  1935. color: #323232;
  1936. &:hover {
  1937. color: #323232;
  1938. }
  1939. }
  1940. .icon-dim {
  1941. color: #ddd;
  1942. text-shadow: 1px 1px rgb(255 255 255 / 30%);
  1943. }
  1944. .l-unit--suspended .icon-dim {
  1945. color: #c0c0c0;
  1946. }
  1947. .cron-helper-panel {
  1948. border: 1px solid #cfcfcf;
  1949. border-radius: var(--border-radius-base);
  1950. box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
  1951. margin-top: 20px;
  1952. & .ui-tabs-tab a {
  1953. color: #777;
  1954. font-weight: 600;
  1955. line-height: 30px;
  1956. padding: 0 12px;
  1957. text-transform: uppercase;
  1958. &:hover {
  1959. color: #c36;
  1960. }
  1961. &:active {
  1962. color: #3b9de8;
  1963. }
  1964. }
  1965. & .ui-tabs-tab[aria-expanded="true"] a {
  1966. color: #c36;
  1967. }
  1968. @media (--viewport-medium) {
  1969. margin-top: 25px;
  1970. & .form-label {
  1971. padding-right: 15px;
  1972. padding-left: 25px;
  1973. &.first {
  1974. display: inline-block;
  1975. width: 120px;
  1976. padding-left: 0;
  1977. }
  1978. }
  1979. & .form-select {
  1980. display: inline-block;
  1981. max-width: 384px;
  1982. }
  1983. }
  1984. }
  1985. .server-console-output {
  1986. color: #c36;
  1987. padding: 10px 0 20px 20px;
  1988. background: #fff;
  1989. }
  1990. .userlist-email {
  1991. font-size: 0.75rem;
  1992. white-space: nowrap;
  1993. text-overflow: ellipsis;
  1994. }
  1995. .userlist-username {
  1996. margin-top: -2px;
  1997. line-height: 1.2rem;
  1998. }
  1999. /* App footer
  2000. ========================================================================== */
  2001. .app-footer {
  2002. color: #7c7c7c;
  2003. border-top: 1px solid #ddd;
  2004. font-size: 0.8rem;
  2005. padding-top: 20px;
  2006. padding-bottom: 20px;
  2007. @media (--viewport-medium) {
  2008. padding-top: 40px;
  2009. padding-bottom: 40px;
  2010. }
  2011. }
  2012. .app-footer-inner {
  2013. padding-left: 20px;
  2014. padding-right: 20px;
  2015. @media (--viewport-large) {
  2016. padding-left: 15px;
  2017. padding-right: 15px;
  2018. }
  2019. }
  2020. /* Alerts
  2021. ========================================================================== */
  2022. .alert {
  2023. border-radius: var(--border-radius-base);
  2024. border: 1px solid var(--alert-border-color);
  2025. color: #fff;
  2026. font-weight: 400;
  2027. padding: 15px;
  2028. box-shadow: var(--alert-box-shadow);
  2029. text-shadow: var(--alert-text-shadow);
  2030. & a {
  2031. color: #fff;
  2032. font-weight: bold;
  2033. &:hover {
  2034. text-decoration: underline;
  2035. }
  2036. }
  2037. & .fas {
  2038. flex-shrink: 0;
  2039. size: 32px;
  2040. font-size: 1.3rem;
  2041. font-weight: 600;
  2042. line-height: 30px;
  2043. border-radius: 50%;
  2044. text-align: center;
  2045. background-color: #fff;
  2046. margin-bottom: 10px;
  2047. }
  2048. @media (--viewport-small) {
  2049. display: flex;
  2050. & .fas {
  2051. margin-right: 15px;
  2052. margin-bottom: 0;
  2053. }
  2054. }
  2055. }
  2056. .alert-info {
  2057. background-color: var(--alert-info-color);
  2058. & .fas {
  2059. color: var(--alert-info-color);
  2060. }
  2061. }
  2062. .alert-danger {
  2063. background-color: var(--alert-danger-color);
  2064. & .fas {
  2065. color: var(--alert-danger-color);
  2066. }
  2067. }
  2068. .alert-success {
  2069. background-color: var(--alert-success-color);
  2070. & .fas {
  2071. color: var(--alert-success-color);
  2072. }
  2073. }
  2074. /* Inline alerts
  2075. ========================================================================== */
  2076. .inline-alert {
  2077. display: flex;
  2078. font-weight: 600;
  2079. & .fas {
  2080. margin-top: 4px;
  2081. margin-right: 6px;
  2082. }
  2083. }
  2084. .inline-alert-danger {
  2085. color: #f33;
  2086. }
  2087. .inline-alert-success {
  2088. color: #53ba55;
  2089. & a {
  2090. color: #326b9b;
  2091. &:hover {
  2092. color: #c36;
  2093. }
  2094. &:active {
  2095. color: #d53067;
  2096. }
  2097. }
  2098. }
  2099. /* Updates banner
  2100. ========================================================================== */
  2101. .updates-banner {
  2102. width: 100%;
  2103. text-align: center;
  2104. border-top: 1px solid rgb(255 255 255 / 25%);
  2105. box-shadow: 0 -2px 4px rgb(0 0 0 / 40%);
  2106. background-color: green;
  2107. color: #fff;
  2108. font-size: 0.75rem;
  2109. padding: 10px;
  2110. position: fixed;
  2111. bottom: 0;
  2112. & button {
  2113. border: 0;
  2114. padding: 0;
  2115. background-color: transparent;
  2116. color: #fff;
  2117. font-weight: 500;
  2118. &:hover {
  2119. color: #fff;
  2120. text-decoration: underline;
  2121. }
  2122. }
  2123. }
  2124. /* Debug panel
  2125. ========================================================================== */
  2126. .debug-panel {
  2127. position: fixed;
  2128. bottom: 0;
  2129. left: 0;
  2130. width: 100%;
  2131. z-index: 3;
  2132. box-shadow: 0 0 5px rgb(0 0 0 / 40%);
  2133. @media (--viewport-medium) {
  2134. width: auto;
  2135. }
  2136. }
  2137. .debug-panel-toggle {
  2138. display: block;
  2139. width: 100%;
  2140. border: 0;
  2141. text-align: center;
  2142. font-size: 0.8rem;
  2143. font-weight: 500;
  2144. color: #000;
  2145. padding: 10px 15px;
  2146. background-color: #ff0;
  2147. &:hover {
  2148. background-color: #ee0;
  2149. }
  2150. }
  2151. .debug-panel-content {
  2152. background-color: #eee;
  2153. font-size: 0.75rem;
  2154. padding: 20px;
  2155. max-height: 300px;
  2156. overflow: auto;
  2157. }