:root { --text: #333; --table-border: rgba(16, 24, 40, .1); --dark: brightness(.90); --bg-blue: rgb(0, 74, 157); --bg-blue-op: rgba(0, 74, 157, .35); --bg-green: rgb(0, 128, 0); --bg-green-op: rgba(0, 128, 0, .35); --bg-yellow: rgb(255, 140, 0); --bg-yellow-op: rgba(255, 140, 0, .35); --bg-red: rgb(255, 0, 0); --bg-red-op: rgba(255, 0, 0, .35); --bg-gray: rgb(112, 128, 144); --bg-gray-op: rgba(112, 128, 144, .35); } * { font-family: sans-serif; box-sizing: border-box; } html { background: linear-gradient(transparent 30rem, white 50rem), linear-gradient(-135deg, transparent 20vw, #004d6e10 25vw, transparent 30vw), linear-gradient(-135deg, transparent 30vw, #706f6f10 35vw, transparent 40vw), linear-gradient(-135deg, transparent 40vw, #f59e0010 45vw, transparent 50vw); overflow-y: scroll; } body { margin: 0; font-size: .8rem; color: var(--text); background-size: contain; } code { font-family: monospace; } div.headline { position: fixed; display: block; top: 0; z-index: 1000; width: 100%; height: 5rem; align-content: center; background: white; border-bottom: 1px solid var(--table-border); } nav { display: flex; margin: 0 auto; line-height: 1.5rem; max-width: 1140px; } nav a.nav-home { margin: auto 0; color: var(--text); line-height: 1.5rem; text-decoration: none; font-size: 2rem; font-weight: bold; } nav a.nav-home > img { width: 1.5rem; vertical-align: middle; } nav > ul { display: block; margin: 0 0 0 auto; padding: 0; width: max-content; } nav > ul > li { display: inline-block; padding: 0 1rem; } nav > ul > li.login { margin: 0 0 0 1rem; padding: 0 0 0 2rem; border-left: 1px solid var(--table-border); line-height: 3.5rem; } nav > ul > li.login a { text-decoration: none; text-transform: none; padding: 1rem; } nav .login .user-name { font-weight: bold; } nav > ul > li.login > span { display: inline-block; margin: 0 .5rem; } nav > ul > li.login .user-icon { flex-direction: column; display: inline flex; vertical-align: middle; inline-size: 4rem; } nav > ul > li.login .user-icon img { margin: 0 0 -1em 0; width: 80%; align-self: center; } nav > ul > li.login .user-icon span { padding: 0 .6em; color: white; font-size: .8rem; font-weight: bold; border-radius: 4px; line-height: normal; text-align: center; } nav > ul > li.login .user-icon span.guest { background: darkslategray; } nav > ul > li.login .user-icon span.user { background: darkgreen; } nav > ul > li.login .user-icon span.admin { background: darkred; } nav li a { color: var(--bg-blue); text-transform: uppercase; text-decoration: none; font-weight: 700; } nav li a:hover { text-decoration: underline; } a { color: var(--bg-blue); } .breadcrumps { margin: 0 auto; max-width: 1140px; } .breadcrumps ul { margin: 2px 0; padding: .4rem 1rem; list-style: none; background: #eee; } .breadcrumps ul li { display: inline; } .breadcrumps ul li + li:before { padding: .4rem; color: gray; content: "/\00a0"; } .breadcrumps ul li a { color: var(--text); text-decoration: none; } .centered { text-align: center; } .container { margin: auto; } main { margin: 6rem auto 0; min-height: calc(100dvh - 10rem); } main, .container { max-width: 1140px; } footer { width: 100%; height: 4rem; position: relative; align-content: center; display: flex; bottom: 0; padding: 1rem 0; border-top: 1px solid var(--table-border); background: var(--bg-blue); color: white; } footer > .container > div { margin: 0 auto; max-width: 1140px; display: inline-block; } footer > .container > div, footer > .container > div:after { content: "-"; padding-left: 1rem; } footer > .container > div:last-child, footer > .container > div:last-child:after { content: ""; } footer svg { height: 1.4rem; color: white; vertical-align: text-bottom; } section { margin: 3rem 0; } .login-form { width: fit-content; margin: 3rem auto; padding: 2em 5rem; border: 1px solid var(--table-border); border-radius: .5rem; background: white; } .login-form form { width: 20rem; margin: 0 auto; display: grid; grid-gap: .5rem; border: none; background: none; } .login-form img { margin: 0 auto; width: 4rem; display: block; } .search-form { width: max-content; margin: 0 0 0 auto; } .search-form form { width: max-content; border: 1px solid var(--table-border); border-radius: 3px; transition: 0.2s; background: white; } .search-form form:has(input:focus) { border: 1px solid var(--bg-blue); } .search-form form input { width: 34rem; border: none; display: inline-block; outline: none; font-family: monospace; } .search-form form a { background: var(--text); color: #fff; aspect-ratio: 1; text-align: center; border-radius: 50%; align-content: center; height: 1.2rem; font-size: 1.2rem; text-decoration: none; display: inline-grid; padding: 0; margin: 0 1rem; vertical-align: text-bottom; } .search-form form select { border: none; background: white; } .token-form { margin: 1rem 0; padding: 1rem; border: 1px solid lightgray; border-radius: 3px; background: #eee; text-align: center; } .userrole-form { display: inline-block; } .userrole-form form { margin: 0; padding: 0; border: none; border-radius: 0; background: none; text-align: inherit; } .login-form form *, .token-form form *, .search-form form * { padding: 0.5rem; border: 1px solid var(--table-border); border-radius: 3px; } .login-form form hr, .token-form form hr, .userrole-form form hr { padding: 0; width: 100%; } .login-form button, .login-form a.btn, .token-form button { margin: 1rem 0; background: var(--bg-blue); color: white; border: none; text-align: center; } .userrole-form form select { padding: 0.5rem; border: none; border-radius: 3px; line-height: 1.2rem; font-size: 0.8rem; } .border { padding: 1rem; border: 1px solid var(--table-border); border-radius: .5rem; background: white; } table, .chart { border: 1px solid var(--table-border); padding: 1.5rem; border-spacing: 0; border-radius: .5rem; background: white; } table { min-width: 100%; font-family: sans-serif; } table.config-table td:first-child { width: 26rem; min-width: fit-content; } table.config-table td > button:last-of-type { float: right; } .border > table { padding: 0; border: none; background: transparent; } .page-control { border-radius: .5rem; padding: 1rem 2rem; text-align: center; line-height: 1.75em; } .page-control a { padding: 0 .25rem; font-size: 1.75rem; color: var(--bg-gray); text-decoration: none; vertical-align: middle; } .page-control a[href] { color: var(--bg-blue); } .page-control span { padding: 0 .5rem; vertical-align: text-bottom; font-size: 1rem; vertical-align: middle; } #samples-table.max { width: 100vw; position: fixed; padding: 1rem; top: 0; left: 0; background: white; min-height: 100vh; } .card { margin: .5rem 0; min-height: 5rem; border-left: 0.5rem solid var(--bg-gray); border-radius: .2rem; background: white; overflow: hidden; box-shadow: 0 .1rem .2rem var(--table-border); } .card > .card-header { content: ""; padding: 0.2rem; color: white; background: var(--bg-gray); font-family: monospace; font-size: 0.8rem; } .card > .card-header.bg-red { background: var(--bg-red); } .card:has(> .card-header.bg-red) { border-left: 0.5rem solid var(--bg-red); } .card > .card-header.bg-yellow { background: var(--bg-yellow); } .card:has(> .card-header.bg-yellow) { border-left: 0.5rem solid var(--bg-yellow); } .card > .card-header.bg-green { background: var(--bg-green); } .card:has(> .card-header.bg-green) { border-left: 0.5rem solid var(--bg-green); } .card > .card-header.bg-blue { background: var(--bg-blue); } .card:has(> .card-header.bg-blue) { border-left: 0.5rem solid var(--bg-blue); } .card > .card-sub-header { display: flex; padding: 0 .5rem; border-bottom: 1px solid var(--table-border); font-size: 1rem; font-weight: bold; background: #eeeeee; align-items: center; height: 3rem; } .card > .card-sub-header.delete { background: #ffdddd; } .card > .card-sub-header > *:nth-child(2) { margin: 0 0 0 auto; } .card > .card-content { padding: .5rem; display: grid; grid-template-columns: 1fr 5fr; } .card > .card-content > div:nth-child(even), .card > .card-content > div:nth-child(even) * { font-family: monospace; } .card > .card-content > *:nth-child(odd) { font-weight: bold; } .card > .card-content > div { padding: 0.1rem 0; } table.samples { max-width: 100%; overflow-x: scroll; display: block; } th, td { padding: 0.4rem .2rem; line-height: 2rem; text-align: left; white-space: nowrap; vertical-align: top; } th { border-bottom: 1px solid var(--bg-gray); } td { border-bottom: 1px solid var(--bg-gray-op); } td, td > a { font-family: monospace; } tr:last-of-type > td { border-bottom: none; } td > small { display: block; text-align: center; } td.patient-id { min-width: 20rem; text-overflow: ellipsis; overflow: hidden; } td.bg-blue, th.bg-blue, td.bg-green, th.bg-green, td.bg-yellow, th.bg-yellow, td.bg-red, th.bg-red, td.bg-gray, th.bg-gray { width: 8rem; } td.bg-blue > small, th.bg-blue > small { background: var(--bg-blue); color: white; border-radius: 0.4rem; } td.bg-green > small, th.bg-green > small { background: var(--bg-green); color: white; border-radius: 0.4rem; } td.bg-yellow > small, th.bg-yellow > small { background: var(--bg-yellow); color: white; border-radius: 0.4rem; } td.bg-red > small, th.bg-red > small { background: var(--bg-red); color: white; border-radius: 0.4rem; } td.bg-gray > small, th.bg-gray > small { background: var(--bg-gray); color: white; border-radius: 0.4rem; } .bg-path { background: var(--bg-gray-op); } .bg-from { background: var(--bg-red-op); } .bg-to { background: var(--bg-green-op); } .bg-path, .bg-from, .bg-to { padding: 0.25rem 0.5rem; border-radius: 3px; font-family: monospace; } td.bg-shaded, th.bg-shaded { background: repeating-linear-gradient(140deg, white, #e5e5f5 4px, white 8px); } td.clipboard { cursor: copy; } td.clipboard.clipped { box-shadow: 0 0 1rem lightgreen inset; } .btn { margin: 4px; padding: 4px 8px; line-height: 1.2rem; border: 0 solid transparent; border-radius: 3px; text-decoration: none; font-size: 0.8rem; font-weight: normal; cursor: pointer; } .btn:active, .btn:hover { filter: drop-shadow(0px 1px 1px var(--bg-gray)) var(--dark); } .btn:active { translate: 0 1px; } .btn.btn-red { background: var(--bg-red); color: white; } .btn.btn-yellow { background: var(--bg-yellow); color: white; } .btn.btn-green { background: var(--bg-green); color: white; } .btn.btn-blue { background: var(--bg-blue); color: white; } .btn.btn-delete:before { content: '\1F5D1'; padding: .2rem; } button:disabled, .btn:disabled { background: slategray !important; color: lightgray; filter: none; cursor: default; } input.inline { border: none; font-size: 1.1rem; outline: none; } input.inline:focus-visible { background: lightgreen; } .monospace { font-family: monospace; color: #333333; border-bottom: 1px dotted gray !important; } .help { padding: 1rem; border: 1px solid darkslategray; border-radius: 3px; background: slategray; color: white; } .help.error { border: 3px dashed red; background: darkorange; } .help .help-header { font-size: 1.2rem; font-weight: bold; } .charts { display: grid; grid-gap: 1em; grid-template: "a b" 28rem "c c" 28rem / 1fr 1fr; } .charts > .grid-left { grid-area: a; } .charts > .grid-right { grid-area: b; } .charts > .grid-full { grid-area: c; } .connection-display { display: grid; grid-template-columns: 10rem 16rem 10rem; place-items: center; width: fit-content; margin: 1em auto; } .connection-display > * { text-align: center; margin: auto 0; } .connection-display .connection { display: block; width: 100%; height: 4px; background: repeating-linear-gradient(to left, white, white 2px, transparent 2px, transparent 8px, white 8px) var(--bg-red); } .connection-display .connection.available { background: var(--bg-green); } .notification { margin: 1rem; padding: .5rem; border-radius: 3px; text-align: center; } .notification.info { color: var(--bg-blue); } .notification.success { color: var(--bg-green); } .notification.notice { color: var(--bg-yellow); } .notification.error { color: var(--bg-red); } .tab { padding: 1rem; border: none; border-radius: 3px 3px 0 0; cursor: pointer; transition: all 0.2s; font-weight: bold; } .tab:hover, .tab.active { background: var(--bg-gray); color: white; } .tabcontent { border: 2px solid var(--bg-gray); border-radius: 0 .5rem .5rem .5rem; display: none; padding: 1rem; background: white; } .tabcontent.active { display: block; } a.reload { display: none; margin: 0; vertical-align: top; border-radius: 1.4rem; } a.reload::before { content: "⟳"; font-size: 1.2rem; vertical-align: top; } a.reload span { display: none; } a.reload:hover span { display: inline; } .new-token { padding: 1rem; background: var(--bg-green-op); } .new-token > pre { margin: 0; border: 1px solid var(--bg-green); padding: .5rem; width: max-content; display: inline-block; } .no-token { padding: 1rem; background: var(--bg-red-op); } .issue-message { font-family: monospace; font-weight: bolder; } .issue-path { font-family: monospace; line-height: 1rem; }