* { box-sizing: border-box; font-family: 'Mulish', 'Helvetica Neue', Helvetica, Arial, sans-serif; margin: 0; padding: 0; } body { display: flex; font-family: sans-serif; height: 100vh; width: 100vw; } h1 { font-size: 22pt; } h2 { margin-top: 10px; font-size: 12pt; } p { margin: 15px 0; } code { font-family: monospace; padding: 10px; white-space: pre-wrap; word-break: break-all; } sub { align-items: center; display: flex; gap: 5px; } sub img { cursor: pointer; } .error { color: #c11; font-family: monospace; white-space: pre-wrap; } /* dropzone */ .dropzone { display: flex; flex-direction: column; height: 100%; } .dropzone.hover .overlay { display: flex; } .overlay { font-size: 125%; position: fixed; top: 0; bottom: 0; right: 0; left: 0; background-color: rgba(240, 240, 240, 0.6); backdrop-filter: blur(4px); display: none; padding: 12px; z-index: 40; } .target { border: 6px dashed #444; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; height: 100%; width: 100%; } /* sidebar */ nav { height: 100vh; min-width: 48px; background-image: linear-gradient(to bottom, #667, #585669); box-shadow: 0 0 4px rgba(10, 10, 10, 0.5); height: 100vh; } /* brand logo */ .brand { color: #fff; display: flex; align-items: center; filter: drop-shadow(0 0 2px #444); font-family: 'Century Gothic', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 1.1em; font-weight: bold; text-orientation: mixed; opacity: 0.85; padding: 10px 12px; user-select: none; writing-mode: vertical-rl; text-decoration: none; } .brand:hover { color: #fff; filter: drop-shadow(0 0 2px #333); opacity: 0.9; text-decoration: none; } .brand::before { content: ''; background: url(logo.svg) no-repeat 0 center; background-size: 26px; height: 26px; width: 26px; margin-bottom: 10px; } /* content area */ main, #content { display: flex; flex-direction: column; flex: 1; min-width: 0; } #content { position: relative; } #app { flex: 1; } /* content area */ .content-container { min-width: 0; height: 100vh; display: flex; flex-direction: column; flex: 1; } .content { display: flex; flex-direction: column; flex: 1; height: 100vh; padding: 0; /* no outer scrollbars */ overflow: hidden; } /* error bar */ .error-bar { max-height: 0; padding: 0; background-color: #dd111199; font-family: monospace; overflow-y: auto; transition: max-height 0.3s; white-space: pre-wrap; } .show-error { max-height: 30%; padding: 10px; } .top-header { align-items: center; background: linear-gradient(to right, #353540, #24202b); color: #dde4ea; display: flex; height: 32px; justify-content: space-between; min-height: 32px; padding-left: 8px; } .top-header { color: #f0f8ff; font-family: 'Courier New', Courier, monospace; font-size: 18px; text-overflow: ellipsis; white-space: nowrap; text-decoration-thickness: 1px; } .view-header { align-items: center; background-color: #ccc; color: #444; display: flex; gap: 16px; height: 24px; padding: 0 8px; /* all one line */ text-overflow: ellipsis; white-space: nowrap; } .viewer { display: flex; flex: 1; flex-direction: column; white-space: pre-wrap; overflow-y: auto; } /* dropdown */ .dropdown { display: inline-block; position: relative; text-overflow: ellipsis; user-select: none; white-space: nowrap; } .dropdown-button, .dropdown-button:active, .dropdown-button:focus, .dropdown-button:hover { background: transparent; border: none; color: inherit; cursor: pointer; font-size: inherit; height: 24px; max-width: 300px; overflow: hidden; } /* dropdown caret */ .dropdown-button::before { content: "\25bc"; display: inline-block; font-size: 10px; margin-right: 4px; transform: rotate(-90deg); transition: transform 0.1s; } .open .dropdown-button::before { transform: rotate(0deg); } /* dropdown menu options */ .dropdown-content { position: absolute; left: 0; background-color: #ccc; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; box-shadow: 0px 8px 8px 0px rgba(0, 0, 0, 0.2); max-height: 0; max-width: 200px; min-width: 120px; transition: max-height 0.1s ease-out; overflow-y: hidden; z-index: 20; } .dropdown-content > button { background: none; border: none; padding: 8px 16px; text-align: left; } /* dropdown menu options hover */ .dropdown-content > button:active, .dropdown-content > button:focus, .dropdown-content > button:hover { background-color: rgba(95, 75, 133, 0.4); } /* roll out dropdown menu */ .open .dropdown-content { display: flex; flex-direction: column; max-height: 170px; } /* welcome */ #welcome { position: absolute; bottom: 0; top: 0; right: 0; left: 0; border: 2px #777; border-radius: 10px; color: #444; margin: 10px; padding: 10px; display: flex; flex-direction: column; flex: 1; font-size: 20px; justify-content: center; max-width: 640px; margin: 0 auto; } /* quick link buttons */ .quick-links { display: flex; flex-wrap: wrap; gap: 10px; list-style: none; } .quick-links li { display: flex; flex: 1 1 calc(50% - 10px); min-width: 0; } .quick-links a { background-position: 10px center; background-size: 18px; border: 1px solid #444; border-radius: 4px; font-size: 8pt; overflow: hidden; padding: 12px; padding-left: 36px; text-overflow: ellipsis; white-space: nowrap; width: 100%; } .quick-links a:hover { background-color: #cec; } .huggingface { background: url('assets/huggingface.svg') no-repeat 8px center; } .github { background: url('assets/git.svg') no-repeat 8px center; } .aws { background: url('assets/s3.svg') no-repeat 8px center; } .azure { background: url('assets/azure.svg') no-repeat 8px center; } /* file upload */ input[type="file"] { display: none; } .overlay { font-size: 125%; justify-content: center; position: absolute; top: 0; bottom: 0; right: 0; left: 0; background-color: rgba(240, 240, 240, 0.6); backdrop-filter: blur(4px); display: none; padding: 12px; z-index: 40; } .over .overlay { display: flex; } /* table */ .table-container { display: flex; flex-direction: column; min-height: 0; flex: 1; position: relative; } .table-scroll { flex: 1; overflow: auto; } .table-scroll > div { position: relative; } .table-scroll .table { position: absolute; } table { border-collapse: separate; border-spacing: 0; } table:focus-visible { outline: none; } /* header */ .table thead th { background-color: #eaeaeb; border: none; border-bottom: 2px solid #c9c9c9; box-sizing: content-box; color: #444; height: 20px; padding-top: 8px; position: sticky; top: -1px; /* fix 1px gap above thead */ user-select: none; z-index: 10; } .table thead th:first-child { border: none; } .table thead th:first-child span { cursor: default; width: 0; } .table tbody tr:first-child td { border-top: 1px solid transparent; } /* sortable */ .table.sortable thead th { cursor: pointer; } .table thead th.orderby ::after { position: absolute; right: 8px; top: 8px; padding-left: 2px; background-color: #eaeaeb; content: "▾"; } /* cells */ .table th, .table td { border-bottom: 1px solid #ddd; border-right: 1px solid #ddd; height: 32px; max-width: 1000px; /* prevent columns expanding */ padding: 4px 12px; text-align: left; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } /* pending cell state */ .table td.pending { position: relative; } .table td.pending::after { content: ''; position: absolute; top: 8px; left: 8px; right: 8px; bottom: 8px; border-radius: 4px; background: linear-gradient( 60deg, rgba(0, 0, 0, 0.05) 25%, rgba(0, 0, 0, 0.08) 50%, rgba(0, 0, 0, 0.05) 75% ); background-size: 120px 100%; animation: textshimmer 3s infinite linear; } /* stagger row shimmering */ .table tr:nth-child(2n) td.pending::after { animation-delay: -1s; } .table tr:nth-child(2n+1) td.pending::after { animation-delay: -3s; } .table tr:nth-child(3n) td.pending::after { animation-delay: -2s; } .table tr:nth-child(5n) td.pending::after { animation-delay: -4s; } .table tr:nth-child(7n) td.pending::after { animation-delay: -1.5s; } @keyframes textshimmer { 0% { background-position: -120px 0; } 100% { background-position: 120px 0; } } /* pending table state */ .table th::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 4px; background-color: #706fb1; z-index: 100; } .pending .table th::before { animation: shimmer 2s infinite linear; } @keyframes shimmer { 0%, 100% { background-color: #6fb176; } 50% { background-color: #adc6b0; } } /* column resize */ .table thead span { position: absolute; border-right: 1px solid #ddd; top: 0; right: 0; bottom: 0; width: 8px; cursor: col-resize; transition: background-color 0.2s ease; } .table thead span:hover { background-color: #aab; } /* row numbers */ td:first-child { background-color: #eaeaeb; border-right: 1px solid #ddd; color: #888; font-size: 10px; padding: 0 2px; position: sticky; left: 0; text-align: center; user-select: none; min-width: 32px; max-width: none; width: 32px; } /* table corner */ .table-corner { background-color: #e4e4e6; border-right: 1px solid #ccc; position: absolute; height: 34px; width: 32px; top: 0; left: 0; z-index: 15; box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2); } /* mock row numbers */ .mock-row-label { content: ""; position: absolute; top: 0; left: 0; bottom: 0; background: #eaeaeb; z-index: -10; } #filename { font-size: 10pt; margin-top: 20px; } .sidebar { word-break: break-all; } .sidebar a { color: #445; text-decoration: none; } .sidebar a:hover { text-decoration: underline; } /* layout */ .layout { margin: 10px; max-width: 480px; } .layout, .layout .group, .layout .cell { background-color: rgba(100, 80, 180, 0.05); border: 1px solid #ccc; border-radius: 4px; font-size: 12px; margin-top: 4px; padding: 4px; word-break: break-all; } .cell, .group-header { display: flex; } .group-header > label, .cell > label { display: flex; flex: 1; font-size: 12px; font-weight: normal; justify-content: flex-start; } .group-header > span { font-size: 10px; } .layout div ul { list-style: none; } .layout div li { font-size: 10px; padding: 2px 4px; text-align: right; }