default.css 41 KB

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