default.css 41 KB

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