html { font-family: clear-sans, sans-serif; font-size: var(--custom-font-size, 62.5%); height: 100%; } body { font-size: 1.3rem; color: var(--text-color); background-color: var(--background-color); /* causes layout shift on scrollable pages */ /* height: 100vh; display: flex; flex-direction: column; overflow-y: auto; */ padding: 0; margin: 0; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } img { border: none; text-decoration: none; vertical-align: middle; } p { text-align: justify; } /* these selection selectors must be kept as individual rules or they won't work */ ::selection { color: var(--white); background-color: var(--orange-800); } ::-moz-selection { color: var(--white); background-color: var(--orange-800); } /** * The markdown parser will often add
around links, scripts, and styles. * Without this, spacing is off with essentially empty paragraphs. * re. - hidden inputs. If the only child is a hidden input or inputs, remove the margin. */ p:has(> link), p:has(> script), p:has(> style), p:has(> input[type="hidden"]:only-child), p:has(> input[type="hidden"]):not(:has(> :not(input[type="hidden"]))) { margin: 0; } p.centered { text-align: left; } p:empty { display: none; } a:hover { text-decoration: underline; } a { color: var(--blue-800); text-decoration: none; } a.none { color: var(--text-color); } a.img { text-decoration: none; border: none; } a.info { position: relative; } a.info span { display: none; white-space: nowrap; font-variant: small-caps; /* - Must be fixed to avoid CSS limitation with overflow-x: auto; on TableContainer as overflow-y: visible; with that is not supported. - position values are determined by JS in BodyInlineJS.php w/ the a.info element's offset position. */ position: fixed; line-height: 2rem; color: var(--text-color); padding: 5px 8px; border: 1px solid var(--inverse-border-color); border-radius: 3px; background-color: var(--background-color); box-shadow: var(--small-shadow); } a.info:hover span { display: block; z-index: 1; } a.nohand { cursor: default; } a.hand { cursor: pointer; text-decoration: none; } a.static { cursor: default; color: var(--alt-text-color); text-decoration: none; } a.view { display: inline-block; width: 20px; } i.spacing { margin-left: -6px; } i.icon { font-size: 1.6rem; margin-right: 4px; vertical-align: middle; } i.title { margin-right: 8px; } i.control { cursor: pointer; color: var(--alt-text-color); font-size: 1.8rem; } i.favo { display: none; font-size: 1.8rem; position: absolute; margin-left: 12px; } hr { border: none; height: 1px !important; color: var(--hr-color); background-color: var(--hr-color); } .resize-none { resize: none; } input[type="text"], input[type="password"], input[type="number"], input[type="url"], input[type="email"], input[type="date"], input[type="file"], textarea, .textarea { color: var(--text-color); font-family: clear-sans; font-size: 1.3rem; background-color: transparent; border-width: 0; border-style: solid; border-color: var(--input-border-color); border-bottom-width: 1px; padding: .5rem; text-indent: 0; min-height: 2rem; line-height: 2rem; outline: none; width: 100%; margin: 0; box-shadow: none; border-radius: 0; box-sizing: border-box; } .input-instructions { font-style: italic; opacity: .75; } input:focus, textarea:focus, select:focus { + .input-instructions { opacity: 1; } } input[type="button"], input[type="reset"], input[type="submit"], button, button[type="button"], a.button { font-family: clear-sans; font-size: 1.1rem; font-weight: bold; letter-spacing: 1.8px; text-transform: uppercase; min-width: 86px; margin: 10px 12px 10px 0; padding: 8px; text-align: center; text-decoration: none; white-space: nowrap; cursor: pointer; outline: none; border-radius: 4px; border: var(--button-border); color: var(--button-text-color); background: var(--button-background); background-size: var(--button-background-size); } .button-small { font-size: 1rem; padding: 5px 10px; } /* necessary evil until we re-write button styles */ .buttons-no-margin, .buttons-spaced { display: flex; flex-wrap: wrap; gap: 1.2rem; input[type="button"], input[type="reset"], input[type="submit"], button, button[type="button"], a.button { margin: 0; } } .menuNavButtonsTabbed { position: absolute; right: 0; } @media (max-width: 1024px) { .menuNavButtonsTabbed { position: relative; right: auto; } } input[type="checkbox"] { vertical-align: middle; margin-right: 6px; } input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; } input[type="number"] { -moz-appearance: textfield; } input:focus[type="text"], input:focus[type="password"], input:focus[type="number"], input:focus[type="url"], input:focus[type="email"], input:focus[type="file"], textarea:focus { background-color: var(--focus-input-bg-color); outline: 0; } input:hover[type="button"], input:hover[type="reset"], input:hover[type="submit"], button:hover, button:hover[type="button"], a.button:hover { color: var(--hover-button-text-color); background: var(--hover-button-background); } input[disabled], textarea[disabled] { color: var(--text-color); border-bottom-color: var(--disabled-input-border-color); opacity: 0.5; cursor: default; } input[type="button"][disabled], input[type="reset"][disabled], input[type="submit"][disabled], button[disabled], button[type="button"][disabled], a.button[disabled] input:hover[type="button"][disabled], input:hover[type="reset"][disabled], input:hover[type="submit"][disabled], button:hover[disabled], button:hover[type="button"][disabled], a.button:hover[disabled] input:active[type="button"][disabled], input:active[type="reset"][disabled], input:active[type="submit"][disabled], button:active[disabled], button:active[type="button"][disabled], a.button:active[disabled] { opacity: 0.5; cursor: default; color: var(--disabled-text-color); background: -webkit-gradient( linear, left top, right top, from(var(--gray-600)), to(var(--gray-500)) ) 0 0 no-repeat, -webkit-gradient( linear, left top, right top, from(var(--gray-600)), to(var(--gray-500)) ) 0 100% no-repeat, -webkit-gradient( linear, left bottom, left top, from(var(--gray-600)), to(var(--gray-600)) ) 0 100% no-repeat, -webkit-gradient( linear, left bottom, left top, from(var(--gray-500)), to(var(--gray-500)) ) 100% 100% no-repeat; background: linear-gradient(90deg, var(--gray-600) 0, var(--gray-500)) 0 0 no-repeat, linear-gradient(90deg, var(--gray-600) 0, var(--gray-500)) 0 100% no-repeat, linear-gradient(0deg, var(--gray-600) 0, var(--gray-600)) 0 100% no-repeat, linear-gradient(0deg, var(--gray-500) 0, var(--gray-500)) 100% 100% no-repeat; background-size: 100% 2px, 100% 2px, 2px 100%, 2px 100%; } input::-webkit-input-placeholder { color: var(--link-text-color); } select { -webkit-appearance: none; font-family: clear-sans; font-size: 1.3rem; width: 100%; padding: .5rem .8rem .5rem .5rem; text-indent: 0; margin: 0; border: none; border-bottom: 1px solid var(--input-border-color); box-shadow: none; border-radius: 0; color: var(--text-color); background-color: transparent; background-image: linear-gradient(66.6deg, transparent 60%, var(--input-border-color) 40%), linear-gradient(113.4deg, var(--input-border-color) 40%, transparent 60%); background-position: calc(100% - 4px), 100%; background-size: 4px 6px, 4px 6px; background-repeat: no-repeat; outline: none; display: inline-block; cursor: pointer; } select option { color: var(--text-color); background-color: var(--mild-background-color); } select option:disabled { color: var(--disabled-text-color); } select:focus { background-color: var(--focus-input-bg-color); outline: 0; } select[disabled] { color: var(--text-color); border-bottom-color: var(--disabled-border-color); opacity: 0.5; cursor: default; } select[name="enter_view"] { margin: 0; padding: 0 12px 0 0; border: none; min-width: auto; } select[name="enter_share"] { font-size: 1.1rem; padding: 0; border: none; min-width: 40px; float: right; margin-top: 13px; margin-right: 20px; } select[name="port_select"] { border: none; min-width: 54px; padding-top: 0; padding-bottom: 0; } select.narrow { width: 76px; } select.auto { width: auto; } select.slot { min-width: 44rem !important; max-width: 44rem !important; } select.slots-amount { width: 7rem; } input.narrow { max-width: 166px; } input.trim { width: 76px; min-width: 76px; } textarea { resize: none; padding: 6px; border: 1px solid var(--textarea-border-color); border-bottom: 1px solid var(--input-border-color); } #header { position: relative; z-index: 102 !important; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; -webkit-box-align: center; -ms-flex-align: center; align-items: center; gap: 1rem; width: 100%; min-height: 91px; /* legacy carry over from before responsive webgui */ z-index: 102; margin: 0; padding-left: .8rem; /* matches the padding-right of the nested unraid-user-profile #UserProfile element */ color: var(--inverse-text-color); background-color: var(--header-background-color); background-size: 100% 90px; background-repeat: no-repeat; box-sizing: border-box; } #header unraid-user-profile { align-self: stretch; } /** * Tools page, rotate the Downgrade icon to prevent needing to add a new icon to the icon font. * The pseudo element is targeted here otherwise the rotation of the span would mess up spacing with the text. */ a[href="/Tools/Downgrade"] .icon-update:before { display: inline-block; /* required otherwise the rotation won't work */ rotate: 180deg; } /* overriding #header .logo svg */ #header .logo .partner-logo svg { fill: var(--header-text-primary); width: auto; height: 28px; } #header.image { /* .image is conditionally added by DefaultPageLayout.php */ background-image: var(--customer-header-background-image); } #header .logo { float: left; margin-left: 10px; color: var(--brand-red); text-align: center; } #header .logo svg { width: 160px; display: block; margin: 25px 0 8px 0; } #header .block { margin: 0; float: right; text-align: right; background-color: var(--gray-120); padding: 10px 12px; } #header .text-left { float: left; text-align: right; padding-right: 5px; border-right: solid medium var(--orange-800); } #header .text-right { float: right; text-align: left; padding-left: 5px; } #header .text-right a { color: var(--inverse-text-color); } #header .text-right #licensetype { font-weight: bold; font-style: italic; margin-right: 4px; } div.title { display: flex; flex-direction: row; align-items: center; justify-content: space-between; margin: 2rem 0; padding: 8px 10px; clear: both; border-bottom: 1px solid var(--table-border-color); background-color: var(--title-header-background-color); letter-spacing: 1.8px; font-size: 1.4rem; &:first-of-type { margin-top: 0; } } .title + .title { margin-top: 0; } div.title span img { padding-right: 4px; } #menu { width: 100%; display: grid; grid-template-columns: 1fr; /* Single column for mobile */ grid-template-rows: auto auto; /* Two rows stacked */ z-index: 101; } /* For larger screens (desktop/tablet) switch to current horizontal layout */ @media (min-width: 768px) { #menu { position: sticky; top: 0; grid-template-columns: auto max-content; /* Original layout */ grid-template-rows: auto; /* Single row */ } } .nav-tile { height: auto; /* Allow height to adjust */ min-height: 4rem; line-height: 4rem; display: flex; padding: 0; margin: 0; font-size: 1.2rem; letter-spacing: 1.8px; background-color: var(--header-background-color); white-space: nowrap; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; } /* For larger screens, maintain original behavior */ @media (min-width: 768px) { .nav-tile { flex-wrap: nowrap; height: 4rem; } } .nav-tile::-webkit-scrollbar { height: 5px; } @media (min-width: 768px) { .nav-tile.right { justify-content: flex-end; } } .nav-item, .nav-user { position: relative; display: flex; align-items: center; text-align: center; margin: 0; } .nav-item a { min-width: 0; } .nav-item a span { display: none; } .nav-item .system { vertical-align: middle; padding-bottom: 2px; } .nav-item a { color: var(--header-text-color); background-color: transparent; text-transform: uppercase; font-weight: bold; display: block; padding: 0 10px; } .nav-item a { text-decoration: none; text-decoration-skip-ink: auto; -webkit-text-decoration-skip: objects; -webkit-transition: all 0.25s ease-out; transition: all 0.25s ease-out; } .nav-item:after, .nav-user.show:after { border-radius: 4px; display: block; background-color: transparent; content: ""; width: 32px; height: 2px; position: absolute; left: 50%; transform: translateX(-50%) translateY(8px); -webkit-transition: all 0.25s ease-in-out; transition: all 0.25s ease-in-out; pointer-events: none; } .nav-item:focus:after, .nav-item:hover:after, .nav-user.show:hover:after { background-color: var(--orange-800); } .nav-item.active:after { background-color: var(--header-text-color); } .nav-user a { color: var(--inverse-text-color); background-color: transparent; display: block; padding: 0 10px; } .nav-user .system { vertical-align: middle; padding-bottom: 2px; } .ToggleViewMode { display: flex; justify-content: flex-end; align-items: center; gap: .5rem; margin-bottom: 1rem; } #displaybox { width: 100%; margin: 0 auto; padding: 1rem 1rem 4rem; box-sizing: border-box; } .Theme--sidebar #displaybox { padding-left: 8rem; } .Theme--width-boxed #displaybox { max-width: 1920px; } #clear { clear: both; } #footer { box-sizing: border-box; position: relative; color: var(--footer-text); background-color: var(--footer-background-color); padding: .5rem 1rem; width: 100%; text-align: center; display: flex; flex-direction: column; gap: 1rem; margin-top: auto; /* for some reason these have padding by default...so we're removing it in the footer without needing to refactor all usages of these classes throughout the webgui */ .green, .red, .orange, .blue { padding-left: 0; padding-right: 0; } } @media (min-width: 768px) { #footer { display: grid; grid-template-columns: auto 1fr auto; align-items: center; position: fixed; bottom: 0; left: 0; z-index: 10000; } } @media (min-height: 500px) and (orientation: landscape) { #footer { position: fixed; bottom: 0; left: 0; z-index: 10000; max-height: 30px; } } #countdown { margin: 0 auto; } .footer-left { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 1rem; } .footer-spacer { display: none; /* Hidden by default on mobile */ } .footer-right, #copyright { text-align: center; display: flex; flex-wrap: nowrap; align-items: center; gap: 1rem; overflow-x: auto; overflow-y: hidden; font-family: bitstream; font-size: 1.1rem; flex: 0 0 auto; /* Default: natural size for mobile column layout */ width: 100%; /* Full width on mobile */ min-width: 0; /* Critical: allows flex item to shrink below content size */ -webkit-overflow-scrolling: touch; /* Enable smooth scrolling on iOS */ scrollbar-width: thin; /* Firefox */ } .footer-right > *, #copyright > * { flex: 0 0 auto; /* Prevent shrinking and growing */ white-space: nowrap; } /* Show scrollbar on hover for better UX */ .footer-right:hover, #copyright:hover { scrollbar-width: auto; } @media (min-width: 768px) { .footer-left { justify-content: flex-start; } .footer-spacer { display: block; /* Show on desktop */ } .footer-right, #copyright { text-align: right; justify-content: flex-start; /* Start from left to enable overflow */ width: auto; /* Override mobile full width */ min-width: 0; /* Critical for overflow to work */ } } .footer-link { display: inline-flex; align-items: center; gap: 0.5rem; } .green { color: var(--green-800); padding-left: 5px; padding-right: 5px; } .red { color: var(--red-600); padding-left: 5px; padding-right: 5px; } .orange { color: var(--orange-300); padding-left: 5px; padding-right: 5px; } .blue { color: var(--blue-800); padding-left: 5px; padding-right: 5px; } .green-text, .passed { color: var(--green-800); } .red-text, .failed { color: var(--red-600); } .orange-text, .warning { color: var(--orange-300); } .blue-text { color: var(--blue-800); } .grey-text { color: var(--alt-text-color); } .green-orb { color: var(--green-200); } .grey-orb { color: var(--gray-300); } .blue-orb { color: var(--blue-700); } .yellow-orb { color: var(--orange-200); } .red-orb { color: var(--red-500); } .usage-bar { float: left; height: 2rem; line-height: 2rem; width: 14rem; padding: 1px 1px 1px 2px; margin: 8px 12px; border-radius: 3px; background-color: var(--usage-bar-background-color); box-shadow: 0 1px 0 var(--gray-400), inset 0 1px 0 var(--gray-700); } .usage-bar > span { display: block; height: 100%; text-align: right; border-radius: 2px; color: var(--gray-100); background-color: var(--usage-bar-used-background-color); box-shadow: inset 0 1px 0 var(--white-opacity-50); } .usage-disk { position: relative; height: 1.8rem; background-color: var(--usage-disk-background-color); margin: 0; } .usage-disk > span:first-child { position: absolute; left: 0; margin: 0 !important; height: 1.8rem; background-color: var(--gray-400); } .usage-disk > span:last-child { position: relative; top: -0.4rem; right: 0; padding-right: 6px; z-index: 1; } .usage-disk.sys { height: 12px; margin: -1.4rem 20px 0 44px; } .usage-disk.sys > span { height: 12px; padding: 0; } .usage-disk.sys.none { background-color: transparent; } .usage-disk.mm { height: 3px; margin: 5px 20px 0 0; } .usage-disk.mm > span:first-child { height: 3px; } .notice { background: url(../images/notice.png) no-repeat 30px 50%; font-size: 1.5rem; text-align: left; vertical-align: middle; padding-left: 100px; height: 6rem; line-height: 6rem; } .notice.shift { margin-top: 160px; } .greenbar { background: -webkit-gradient( linear, left top, right top, from(var(--green-900)), to(var(--green-500)) ); background: linear-gradient(90deg, var(--green-900) 0, var(--green-500)); } .orangebar { background: -webkit-gradient( linear, left top, right top, from(var(--orange-400)), to(var(--orange-400)) ); background: linear-gradient(90deg, var(--orange-400) 0, var(--orange-400)); } .redbar { background: -webkit-gradient( linear, left top, right top, from(var(--red-900)), to(var(--red-700)) ); background: linear-gradient(90deg, var(--red-900) 0, var(--red-700)); } .graybar { background: -webkit-gradient( linear, left top, right top, from(var(--gray-400)), to(var(--gray-200)) ); background: linear-gradient(90deg, var(--gray-400) 0, var(--gray-200)); } .TableContainer { overflow-x: auto; -webkit-overflow-scrolling: touch; table { min-width: 1000px; } } .TableContainer--no-min-width { overflow-x: auto; -webkit-overflow-scrolling: touch; } table { border-collapse: collapse; border-spacing: 0; border-style: hidden; margin: 0; width: 100%; background-color: var(--background-color); } table thead td { line-height: 2.8rem; height: 2.8rem; white-space: nowrap; } table tbody td { line-height: 2.6rem; height: 2.6rem; white-space: nowrap; } table tbody tr.alert { color: var(--red-600); } table tbody tr.warn { color: var(--orange-300); } table.unraid thead tr:first-child > td { font-size: 1.1rem; text-transform: uppercase; letter-spacing: 1px; background-color: var(--table-header-background-color); } table.unraid thead tr:last-child { border-bottom: 1px solid var(--table-border-color); } table.unraid tbody tr:nth-child(even) { background-color: var(--table-background-color); } table.unraid tbody tr:not(.tr_last):hover > td { background-color: var(--hover-table-row-background-color); } table.unraid tr > td { overflow: hidden; text-overflow: ellipsis; padding-left: 8px; } table.unraid tr > td:hover { overflow: visible; } table.legacy { table-layout: auto !important; } table.legacy thead td { line-height: normal; height: auto; padding: 7px 0; } table.legacy tbody td { line-height: normal; height: auto; padding: 5px 0; } table.disk_status { table-layout: fixed; } table.disk_status tr > td:last-child { padding-right: 8px; } table.disk_status tr > td:nth-child(1) { width: 13%; } table.disk_status tr > td:nth-child(2) { width: 30%; } table.disk_status tr > td:nth-child(3) { width: 8%; text-align: right; } table.disk_status tr > td:nth-child(n + 4) { width: 7%; text-align: right; } table.disk_status tr.offline > td:nth-child(2) { width: 43%; } table.disk_status tr.offline > td:nth-child(n + 3) { width: 5.5%; } table.disk_status tbody tr.tr_last { line-height: 3rem; height: 3rem; background-color: var(--table-background-color); border-top: 1px solid var(--table-border-color); } table.array_status { table-layout: fixed; } table.array_status tr > td { padding-left: 8px; white-space: normal; } table.array_status tr > td:nth-child(1) { width: 33%; } table.array_status tr > td:nth-child(2) { width: 22%; } table.array_status.noshift { margin-top: 0; } table.array_status td.line { border-top: 1px solid var(--table-border-color); } table.share_status { table-layout: fixed; } table.share_status tr > td { padding-left: 8px; } table.share_status tr > td:nth-child(1) { width: 15%; } table.share_status tr > td:nth-child(2) { width: 30%; } table.share_status tr > td:nth-child(n + 3) { width: 10%; } table.share_status tr > td:nth-child(5) { width: 15%; } table.dashboard { margin: 0; background-color: transparent; border: none; } table.dashboard tbody { background-color: var(--mild-background-color); border: 1px solid var(--table-border-color); } table.dashboard tbody td { line-height: normal; height: auto; padding: 3px 10px; } table.dashboard tr:first-child > td { padding-top: 1rem; padding-bottom: 1rem; font-size: 1.6rem; font-weight: bold; /* letter-spacing: 1.8px; */ text-transform: none; vertical-align: top; } table.dashboard tr:nth-child(even) { background-color: transparent; } table.dashboard tr:last-child > td { padding-bottom: 20px; } table.dashboard tr.last > td { padding-bottom: 20px; } table.dashboard tr.header > td { padding-bottom: 10px; } table.dashboard td { line-height: 2.4rem; height: 2.4rem; } table.dashboard td.stopgap { height: 20px !important; line-height: 20px !important; padding: 0 !important; background-color: var(--background-color); } table.dashboard td.vpn { font-size: 1.1rem; font-weight: bold; text-transform: uppercase; letter-spacing: normal; } table.dashboard td div.section { display: inline-block; vertical-align: top; /* margin-left: 4px; */ font-size: 1.2rem; font-weight: bold; /* text-transform: uppercase; */ letter-spacing: normal; } table.dashboard td div.section span { font-weight: normal; text-transform: none; letter-spacing: 0; white-space: normal; } table.dashboard td span.info { float: right; margin-right: 20px; font-size: 1.2rem; font-weight: normal; text-transform: none; letter-spacing: 0; } table.dashboard td span.info.title { font-weight: bold; } table.dashboard td span.load { display: inline-block; width: 38px; text-align: right; } table.dashboard td span.finish { float: right; margin-right: 24px; } table.dashboard .control { font-size: 1.4rem !important; cursor: pointer; color: var(--dashboard-icon-color); background-color: var(--dashboard-title-action-color); padding: .25rem; border-radius: .5rem; opacity: 1; &:hover { opacity: .75; } } .dashboard select { /* color: var(--dashboard-icon-color); background-color: var(--dashboard-title-action-color); border-radius: .5rem; opacity: 1; &:hover, &:focus { opacity: .75; } */ } span.error { color: var(--red-600); background-color: var(--red-300); display: block; width: 100%; } span.warn { color: var(--orange-300); background-color: var(--yellow-200); display: block; width: 100%; } span.system { color: var(--blue-700); background-color: var(--blue-300); display: block; width: 100%; } span.array { color: var(--green-800); background-color: var(--green-100); display: block; width: 100%; } span.login { color: var(--orange-900); background-color: var(--red-100); display: block; width: 100%; } span.lite { background-color: var(--background-color); } span.label { font-size: 1.2rem; padding: 2px 0 2px 6px; margin-right: 6px; border-radius: 4px; display: inline; width: auto; vertical-align: middle; } span.cpu-speed { display: block; color: var(--blue-900); } span.status { font-size: 1.4rem; display: inline-block; margin-left: auto; } span.diskinfo { float: left; clear: both; margin-top: 5px; padding-left: 10px; } span.bitstream { font-family: bitstream; font-size: 1.1rem; } span.ucfirst { text-transform: capitalize; } span.strong { font-weight: bold; } span.big { font-size: 1.4rem; } span.small { font-size: 1.2rem; } span.outer { margin-bottom: 20px; margin-right: 0; } span.outer.solid { background-color: var(--mild-background-color); } span.hand { cursor: pointer; } span.outer.started > img, span.outer.started > i.img { opacity: 1; } span.outer.stopped > img, span.outer.stopped > i.img { opacity: 0.3; } span.outer.paused > img, span.outer.paused > i.img { opacity: 0.6; } span.inner { display: inline-block; vertical-align: top; } span.state { font-size: 1.1rem; margin-left: 7px; } span.slots { display: inline-block; width: 44rem; margin: 0 !important; } span.slots-left { float: left; margin: 0 !important; } input.subpool { float: right; margin: 2px 0 0 0; } i.padlock { margin-right: 8px; cursor: default; vertical-align: middle; } i.nolock { visibility: hidden; margin-right: 8px; vertical-align: middle; } i.lock { margin-left: 8px; cursor: default; vertical-align: middle; } i.orb { font-size: 1.1rem; margin: 0 8px 0 3px; } img.img, i.img { width: 32px; height: 32px; margin-right: 10px; } img.icon { margin: -3px 4px 0 0; } img.list { width: auto; max-width: 32px; height: 32px; } i.list { font-size: 32px; } a.list { text-decoration: none; color: inherit; } .content { position: relative; width: 100%; box-sizing: border-box; overflow-x: auto; /* Allows unresponsive set width legacy content to scroll horizontally as needed. */ /** * Force remove any small empty space elements. * Necessary evil to prevent needing to rewrite .page file parsing and allow for a more responsive page. */ dt, dd, p { &:has(input[type="hidden"]:only-child), &:empty { display: none !important; margin: 0 !important; padding: 0 !important; height: 0 !important; min-height: 0 !important; } } } .tabs { display: flex; align-items: center; justify-content: space-between; gap: .5rem; } .tabs-container { display: flex; flex-direction: row; align-items: center; gap: .5rem; overflow-x: auto; width: 100%; } .tabs button[role="tab"] { appearance: none; -webkit-appearance: none; -moz-appearance: none; background-color: transparent; border: 1px solid var(--disabled-input-border-color); border-radius: 0; border-top-left-radius: 6px; border-top-right-radius: 6px; border-bottom: 1px solid transparent; color: var(--text-color); font-weight: normal; font-family: inherit; font-size: 1.4rem; letter-spacing: 1.8px; margin: 0; padding: .75rem 1rem; min-width: 0; box-shadow: none; outline: none; display: flex; align-items: center; justify-content: center; flex-shrink: 0; vertical-align: middle; line-height: 1.0; cursor: pointer; transition: border-color 0.2s, color 0.2s, background 0.2s, opacity 0.2s; text-transform: none; background-image: none; opacity: .5; } .tabs button[role="tab"]:focus, .tabs button[role="tab"]:hover, .tabs button[role="tab"][aria-selected="true"] { background-color: transparent; color: var(--text-color); border-color: var(--brand-orange); border-bottom: 1px solid transparent; opacity: 1; } .tab-content { display: none; padding-top: 2rem; form:first-of-type { padding-top: 1rem; } /* Remove padding for forms inside TableContainer elements */ .TableContainer form:first-of-type, .TableContainer--no-min-width form:first-of-type { padding-top: 0; } .shade form { padding-top: 0; } } .Panels { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 120px)); gap: 1rem; margin-top: 2rem; box-sizing: border-box; justify-content: center; } @media (min-width: 769px) { .Panels { justify-content: start; } } .Panel { position: relative; text-align: center; box-sizing: border-box; background-color: transparent; max-width: 120px; a { position: relative; text-decoration: none; padding: 1rem; display: grid; gap: 1rem; align-items: flex-start; justify-content: center; } &:hover, &:focus { .PanelText { text-decoration: underline; } } } .PanelImg { width: auto; max-width: 33px; height: 33px; margin: 0 auto; } .PanelIcon { color: var(--text-color); font-size: 32px; /* Results in height of 33px... */ line-height: 1; } div.up { border: 1px solid var(--border-color); padding: 4px 6px; overflow: auto; } div.spinner { text-align: center; cursor: wait; } div.spinner.fixed { display: none; position: fixed; top: 0; left: 0; z-index: 99999; bottom: 0; right: 0; margin: 0; } div.spinner .unraid_mark { height: 64px; position: fixed; top: 50%; left: 50%; margin-top: -16px; margin-left: -64px; } div.spinner .unraid_mark_2, div .unraid_mark_4 { animation: mark_2 1.5s ease infinite; } div.spinner .unraid_mark_3 { animation: mark_3 1.5s ease infinite; } div.spinner .unraid_mark_6, div .unraid_mark_8 { animation: mark_6 1.5s ease infinite; } div.spinner .unraid_mark_7 { animation: mark_7 1.5s ease infinite; } @keyframes mark_2 { 50% { transform: translateY(-40px); } 100% { transform: translateY(0px); } } @keyframes mark_3 { 50% { transform: translateY(-62px); } 100% { transform: translateY(0px); } } @keyframes mark_6 { 50% { transform: translateY(40px); } 100% { transform: translateY(0px); } } @keyframes mark_7 { 50% { transform: translateY(62px); } 100% { transform: translateY(0px); } } pre { border: 1px solid var(--border-color); font-family: bitstream; font-size: 1.3rem; line-height: 1.8rem; padding: 4px 6px; overflow: auto; width: 100%; box-sizing: border-box; } iframe#progressFrame { position: fixed; bottom: 32px; left: 0; margin: 0; padding: 8px 8px 0 8px; width: 100%; height: 1.2rem; line-height: 1.2rem; border-style: none; overflow: hidden; font-family: bitstream; font-size: 1.1rem; color: var(--alt-text-color); white-space: nowrap; z-index: -10; } dl { display: grid; grid-template-columns: 1fr; gap: .5rem; margin: 0; padding: 1rem 0; box-sizing: border-box; align-items: baseline; } dl + dl { margin-top: 1rem; } dt { font-weight: 600; text-align: left; } dd { margin: 0; white-space: normal; box-sizing: border-box; p { margin: 0 0 4px 0; } blockquote { padding-left: 0; } } /* Necessary evil to prevent rewrites of complex page templates for responsive layout - i.e. VMedit.php */ .content--non-responsive { min-width: 1200px; /* override the dl > dt + dd responsive styles, inheriting the "desktop" styles defined below */ dl { grid-template-columns: 35% 1fr; gap: 1.5rem 2rem; } dt { text-align: right; } dd { display: flex; flex-direction: column; gap: 0.5rem; /* white-space: nowrap; */ input[type="text"], input[type="password"], input[type="number"], input[type="url"], input[type="email"], input[type="date"], input[type="file"], input:not([type="submit"]), input:not([type="button"]), input:not([type="checkbox"]), input:not([type="radio"]), input:not([class*="narrow"]), textarea, .textarea, select, .ui-dropdownchecklist-selector-wrapper { max-width: 400px; } .narrow { max-width: 150px !important; } } } /* Responsive styles for definition lists */ @media (min-width: 769px) { dl { grid-template-columns: 35% 1fr; gap: 1.5rem 2rem; } dt { text-align: right; } dd { display: flex; flex-direction: column; gap: 0.5rem; /* white-space: nowrap; */ input[type="text"], input[type="password"], input[type="number"], input[type="url"], input[type="email"], input[type="date"], input[type="file"], input:not([type="submit"]), input:not([type="button"]), input:not([type="checkbox"]), input:not([type="radio"]), input:not([class*="narrow"]), textarea, .textarea, select, .ui-dropdownchecklist-selector-wrapper { max-width: 400px; } .narrow { max-width: 150px !important; } } } blockquote { width: 100%; max-width: 100ch; margin: 1rem auto; text-align: left; padding: .5rem 2rem; border-top: 2px solid var(--blue-200); border-bottom: 2px solid var(--blue-200); color: var(--blockquote-text-color); background-color: var(--blue-100); box-sizing: border-box; } blockquote.ontop { margin-top: -20px; margin-bottom: 46px; } blockquote a { color: var(--brand-orange); font-weight: 600; } blockquote a:hover, blockquote a:focus { color: var(--orange-800); } label.checkbox { display: block; position: relative; padding-left: 28px; margin: 3px 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } label.checkbox input { position: absolute; opacity: 0; cursor: pointer; } span.checkmark { position: absolute; top: 0; left: 6px; height: 14px; width: 14px; background-color: var(--checkbox-color); border-radius: 100%; } label.checkbox:hover input ~ .checkmark { background-color: var(--checkbox-hover-color); } label.checkbox input:checked ~ .checkmark { background-color: var(--brand-orange); } label.checkbox input:disabled ~ .checkmark { opacity: 0.5; } ::-webkit-scrollbar { width: 8px; height: 8px; background: transparent; } ::-webkit-scrollbar-thumb { background: var(--scrollbar-color); border-radius: 10px; } ::-webkit-scrollbar-corner { background: var(--scrollbar-color); border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-hover-color); } .inline_help { display: none; } .upgrade_notice, .ca_element_notice { color: var(--black); background-color: var(--yellow-200); border: 1px solid var(--orange-300); position: fixed; top: 1rem; left: 50%; transform: translateX(-50%); width: 95%; max-width: 100ch; padding: 1rem; border-radius: 1rem; text-align: center; font-size: 1.4rem; z-index: 999; box-sizing: border-box; } .upgrade_notice.done { color: var(--green-800); background-color: var(--green-100); border-color: var(--green-800); } .upgrade_notice.alert { color: var(--red-600); background-color: var(--red-300); border-color: var(--red-600); } .bannerDismiss::before { content: "\e92f"; font-family: Unraid; color: var(--orange-300); } .ca_PluginUpdateInstall, .bannerInfo { cursor: pointer; text-decoration: none; padding: 0 .5rem; } .bannerInfo::before { content: "\f05a"; font-family: fontAwesome; color: var(--orange-300); } /* Add padding to the right so the icon can sit absolutely positioned in the padding */ .upgrade_notice:has(.bannerDismiss), .ca_element_notice:has(.ca_PluginUpdateDismiss) { padding-right: 3.5rem; } .upgrade_notice .bannerDismiss, .ca_element_notice .bannerDismiss, .ca_PluginUpdateDismiss { position: absolute; top: 50%; right: 1rem; transform: translateY(-50%); cursor: pointer; z-index: 1; } .back_to_top, .move_to_end { display: none; position: fixed; bottom: 24px; color: var(--red-800); font-size: 2.5rem; z-index: 999; } .back_to_top { right: 40px; } .move_to_end { right:12px; } span.big.blue-text { cursor: pointer; } span.strong.tour { margin-left: 5px; padding-left: 0; } i.abortOps { font-size: 2rem; float: right; cursor: pointer; } pre#swalbody p { margin-block-end: 1em; } span#wlan0 { cursor: pointer; } .shade { margin-top: 1rem; padding: 1rem; background-color: var(--shade-bg-color); border-radius: .25rem; } @media (min-width: 769px) { .shade { padding: 1rem 0; } } /* TailwindCSS inspired utility classes */ .relative { position: relative; } .font-mono { font-family: bitstream, monospace; } .font-sans { font-family: clear-sans, sans-serif; } .text-center { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } .text-justify { text-align: justify; } .hidden { display: none; } .inline-block { display: inline-block; } .flex { display: flex; } .inline-flex { display: inline-flex; } .flex-wrap { flex-wrap: wrap; } .flex-wrap-reverse { flex-wrap: wrap-reverse; } .flex-nowrap { flex-wrap: nowrap; } .flex-col { flex-direction: column; } .flex-col-reverse { flex-direction: column-reverse; } .flex-row { flex-direction: row; } .flex-row-reverse { flex-direction: row-reverse; } .flex-shrink-0 { flex-shrink: 0; } .justify-start { justify-content: flex-start; } .justify-end { justify-content: flex-end; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .items-center { align-items: center; } .items-start { align-items: flex-start; } .items-end { align-items: flex-end; } .items-stretch { align-items: stretch; } .items-baseline { align-items: baseline; } .gap-1 { gap: .25rem; } .gap-2 { gap: .5rem; } .gap-3 { gap: .75rem; } .gap-4 { gap: 1rem; } .gap-5 { gap: 1.25rem; } .gap-6 { gap: 1.5rem; } .gap-7 { gap: 1.75rem; } .gap-8 { gap: 2rem; } .gap-x-1 { column-gap: .25rem; } .gap-x-2 { column-gap: .5rem; } .gap-x-3 { column-gap: .75rem; } .gap-x-4 { column-gap: 1rem; } .gap-y-1 { row-gap: .25rem; } .gap-y-2 { row-gap: .5rem; } .gap-y-3 { row-gap: .75rem; } .gap-y-4 { row-gap: 1rem; } .justify-self-auto { justify-self: auto; } .justify-self-start { justify-self: start; } .justify-self-center { justify-self: center; } .justify-self-center-safe { justify-self: safe center; } .justify-self-end { justify-self: end; } .justify-self-end-safe { justify-self: safe end; } .justify-self-stretch { justify-self: stretch; } .h-full { height: 100%; } .w-full { width: 100%; } /* matches Tailwind scale */ .max-w-20 { max-width: 80rem; /* 1rem = 4. 80/4 = 20. 1rem = 10px with current font-size */ } .mx-auto { margin-left: auto; margin-right: auto; } .h-50 { height: 20rem; } .overflow-y-auto { overflow-y: auto; } .overflow-y-scroll { overflow-y: scroll; } .scrollbar-thin { scrollbar-width: thin; } .text-wrap { text-wrap: wrap; } .text-nowrap { text-wrap: nowrap; } .text-balance { text-wrap: balance; } .text-pretty { text-wrap: pretty; } .whitespace-normal { white-space: normal; } .whitespace-nowrap { white-space: nowrap; } .whitespace-pre { white-space: pre; } .whitespace-pre-line { white-space: pre-line; } .whitespace-pre-wrap { white-space: pre-wrap; } @media (min-width: 1330px) { .clone-settings { position: absolute; top: 0; right: 0; width: 40rem; margin: 0; padding: 1rem; background-color: transparent; dl { align-items: center; gap: 1.5rem 1rem; } } } /* plugin overrides */ /* fix UD title margin-top from overlapping tabs */ div.title.ud, div#title.ud { margin-top: 0 !important; } /* * Using CSS Nesting, to narrow down the scope of the styles to the .Theme--sidebar class. * This allows us to have default-azure & default-gray set css variables * * @todo check version of included Firefox in Unraid OS gui * * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_nesting * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Nesting_selector * @see https://caniuse.com/?search=nesting */ .Theme--sidebar { p { text-align: left; } i.spacing { margin-left: 0; margin-right: 10px; } i.title { display: none; } i.favo { margin-left: 0; } pre ul { margin: 0; padding-top: 0; padding-bottom: 0; padding-left: 28px; } pre li { margin: 0; padding-top: 0; padding-bottom: 0; padding-left: 18px; } big { font-size: 1.4rem; font-weight: bold; text-transform: uppercase; } input[type="text"], input[type="password"], input[type="number"], input[type="url"], input[type="email"], input[type="date"], input[type="file"], textarea, .textarea { padding: 5px 6px; border-width: 1px; } input[type="button"], input[type="reset"], input[type="submit"], button, button[type="button"], a.button { font-family: clear-sans; font-size: 1.2rem; font-weight: normal; text-transform: none; letter-spacing: normal; border: 1px solid var(--button-border); color: var(--button-text-color); background: none; background-color: var(--button-background); } input:focus[type="text"], input:focus[type="password"], input:focus[type="number"], input:focus[type="url"], input:focus[type="email"], input:focus[type="file"], textarea:focus { background: none; background-color: var(--focus-input-background-color); border-color: var(--focus-input-border-color); } input:hover[type="button"], input:hover[type="reset"], input:hover[type="submit"], button:hover, button:hover[type="button"], a.button:hover { border-color: var(--hover-button-border); color: var(--hover-button-text-color); background: none; background-color: var(--hover-button-background) !important; } input:active[type="button"], input:active[type="reset"], input:active[type="submit"], button:active, button:active[type="button"], a.button:active { border-color: var(--hover-button-border); box-shadow: none; } input[disabled], button[disabled], input:hover[type="button"][disabled], input:hover[type="reset"][disabled], input:hover[type="submit"][disabled], button:hover[disabled], button:hover[type="button"][disabled], input:active[type="button"][disabled], input:active[type="reset"][disabled], input:active[type="submit"][disabled], button:active[disabled], button:active[type="button"][disabled], textarea[disabled] { color: var(--disabled-text-color) !important; border-color: var(--disabled-input-border-color) !important; background: none !important; background-size: 0 !important; background-color: var(--disabled-input-background-color) !important; } input::-webkit-input-placeholder { color: var(--blue-700); } select { min-width: 188px; max-width: 314px; padding: 6px 14px 6px 6px; border: 1px solid var(--border-color); color: var(--text-color); background-image: linear-gradient(66.6deg, transparent 60%, var(--border-color) 40%), linear-gradient(113.4deg, var(--border-color) 40%, transparent 60%); background-position: calc(100% - 8px), calc(100% - 4px); background-size: 4px 6px, 4px 6px; } select option { color: var(--text-color); background-color: var(--opac-background-color); } select option:disabled { color: var(--disabled-text-color); } select[disabled] { color: var(--disabled-text-color); border-color: var(--disabled-input-border-color); background-color: var(--disabled-input-background-color); } select[name="enter_view"] { font-size: 1.2rem; } select[name="enter_share"] { color: var(--gray-500); min-width: 40px; margin-top: 0; padding: 0; border: none; } select.narrow { min-width: 87px; } input.narrow { width: 174px; } input.trim { width: 74px; min-width: 74px; } #header { position: relative; z-index: 100; border-bottom: 1px solid var(--gray-600); box-sizing: border-box; padding-left: 80px; } #header .logo { margin-left: 0; color: var(--brand-red); } #header .block { background-color: var(--gray-120); } #header .text-left { border-right: solid medium var(--orange-800); } #header .text-right a { color: var(--text-color); } #menu { position: fixed; top: 0; left: 0; bottom: 12px; width: 64px; padding: 0; margin: 0; background-color: var(--alt-background-color); z-index: 2000; box-shadow: inset -1px 0 2px var(--gray-900); } #nav-block { position: absolute; top: 0; bottom: 12px; color: var(--orange-100); white-space: nowrap; float: left; overflow-y: scroll; direction: rtl; scrollbar-width: none; -ms-overflow-style: none; overflow: -moz-scrollbars-none; } #nav-block::-webkit-scrollbar { display: none; } #nav-block > div { direction: ltr; } .nav-tile { height: auto; line-height: 1; display: flex; flex-direction: column; padding: 0; margin: 0; font-size: 1.2rem; letter-spacing: 1.8px; background-color: transparent; white-space: nowrap; overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; } .nav-item { display: block; width: 64px; text-align: left; padding: 0; border-bottom: 1px solid var(--gray-600); font-size: 18px !important; overflow: hidden; transition: 0.2s background-color ease; } .nav-item::after, .nav-user.show::after { width: 0; height: 0; } .nav-item:hover { width: auto; padding-right: 0; color: var(--orange-100); background: -webkit-gradient( linear, left top, right top, from(var(--red-800)), to(var(--brand-orange)) ); background: linear-gradient(90deg, var(--red-800) 0, var(--brand-orange)); -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; border-bottom-color: var(--red-800); } .nav-item:hover a { color: var(--orange-100); background: -webkit-gradient( linear, left top, right top, from(var(--red-800)), to(var(--brand-orange)) ); background: linear-gradient(90deg, var(--red-800) 0, var(--brand-orange)); border-bottom-color: var(--red-800); font-size: 18px; } .nav-item img { display: none; } .nav-item a { display: inline-flex; color: var(--gray-400); text-decoration: none; padding: 16px 18px; gap: 25px; justify-content: start; align-items: center; text-transform: none; font-weight: normal; } .nav-item.util a { padding-left: 24px; } .nav-item a:before { font-family: docker-icon, fontawesome, unraid; font-size: 26px; /* margin-right: 25px; */ } .nav-item.util a:before { font-size: 16px; } .nav-item.active, .nav-item.active a { color: var(--orange-100); background: -webkit-gradient( linear, left top, right top, from(var(--red-800)), to(var(--brand-orange)) ); background: linear-gradient(90deg, var(--red-800) 0, var(--brand-orange)); } .nav-item.HelpButton.active:hover, .nav-item.HelpButton.active a:hover { background: -webkit-gradient( linear, left top, right top, from(var(--red-800)), to(var(--brand-orange)) ); background: linear-gradient(90deg, var(--red-800) 0, var(--brand-orange)); font-size: 18px; } .nav-item.HelpButton.active, .nav-item.HelpButton.active a { font-size: 18px; } .nav-item a span { display: inline; } .nav-item a b { display: none; } .nav-user { position: fixed; top: 102px; right: 10px; } .nav-user a { color: var(--text-color); padding: 0; } .Theme--nav-top .LanguageButton { font-size: 12px !important; } /* Fix Switch Language Being Cut-Off */ div.title { color: var(--text-color); font-size: 1.6rem; margin: 20px 0 10px 0; padding: 10px 0; clear: both; background-color: var(--background-color); border-bottom: 1px solid var(--border-color); letter-spacing: 1.8px; } /* div.title span.left { font-size: 1.6rem; text-transform: uppercase; } */ div.title span.right { font-size: 1.6rem; padding-right: 10px; } div.title span img, .title p { display: none; } div.title:first-of-type { margin-top: 0; } .usage-bar { position: absolute; bottom: .5rem; left: 50%; width: 14rem; margin: 0; padding: 0; } .usage-disk { height: 2.2rem; line-height: 2.2rem; } .usage-disk > span:first-child { height: 3px; background-color: var(--border-color); } .usage-disk > span:last-child { padding-right: 4px; top: 0; z-index: 1000; } .usage-disk.sys { line-height: normal; background-color: transparent; margin: -15px 20px 0 44px; } .usage-disk.sys > span { line-height: normal; } .usage-disk.mm { line-height: normal; background-color: transparent; } .usage-disk.mm > span:first-child { line-height: normal; } table { margin: 0; background-color: transparent; } table tbody tr.tr_last { border-bottom: 1px solid var(--border-color); } table.unraid tbody tr:nth-child(even) { background-color: var(--table-background-color); } table.unraid thead tr:first-child > td { font-size: 1.2rem; color: var(--gray-500); border-bottom: 1px solid var(--border-color); background-color: transparent; } table.unraid tbody tr:not(.tr_last):hover > td { /* background-color: var(--black-opacity-05); */ background-color: var(--hover-table-row-background-color); } table.disk_status tbody tr { border-bottom: 1px solid var(--table-alt-border-color); } table.array_status td.line { border-top: 1px solid var(--table-alt-border-color); } table.share_status { margin-top: 12px; } table.dashboard { background-color: transparent; } table.dashboard tbody { background-color: var(--dashboard-background-color); border: 1px solid var(--dashboard-border-color); } table.dashboard tr { border: none; } table.dashboard td { line-height: normal; height: auto; padding: 3px 10px; border: none !important; } tr.alert { background-color: var(--red-300); } tr.warn { background-color: var(--yellow-200); } tr.past { color: var(--orange-900); background-color: var(--red-100); } span.label { font-size: 1.1rem; } span.status { margin-top: 0; padding-right: 0; } span.status.vhshift { margin-right: 8px; } span.p0 { padding-left: 0; } span.small { font-size: 1.1rem; } span.outer.solid { background-color: var(--dashboard-background-color); } .vmtemplate br { display: none; } div.vmheader { display: block; clear: both; } div.vmtemplate { height: 12rem; width: 12rem; border: 1px solid var(--table-alt-border-color); } div.vmtemplate:hover { background-color: var(--opac-background-color); } div.vmtemplate img { margin-top: 20px; } div.up { border: 1px solid var(--table-alt-border-color); } pre { border: 1px solid var(--table-alt-border-color); margin-bottom: 10px; padding: 10px; } iframe#progressFrame { left: 60px; color: var(--gray-500); z-index: -2; } blockquote { border: 1px solid var(--blue-200); color: var(--blockquote-text-color); background-color: var(--blue-100); box-sizing: border-box; } blockquote.ontop { margin-top: 0; } span.checkmark { background-color: var(--gray-200); } label.checkbox:hover input ~ .checkmark { background-color: var(--gray-400); } label.checkbox input:checked ~ .checkmark { background-color: var(--brand-orange); } }