1
Fork 0
mirror of https://github.com/thegeneralist01/archivr synced 2026-07-21 18:55:36 +02:00
archivr/crates/archivr-server/static/styles.css

642 lines
9.8 KiB
CSS

:root {
color-scheme: light;
--ink: #20251f;
--muted: #666a61;
--paper: #f5f0e7;
--paper-2: #e9e1d2;
--paper-3: #fffaf0;
--line: #d2c6b5;
--line-soft: #e5dccd;
--accent: #8d3f30;
--accent-2: #b78342;
--link: #245f72;
--top: #141d18;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
background: var(--paper);
color: var(--ink);
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
button,
input,
select {
font: inherit;
}
.topbar {
height: 56px;
display: grid;
grid-template-columns: auto minmax(180px, 250px) 1fr auto;
align-items: center;
gap: 18px;
padding: 0 18px;
background: var(--top);
color: #f7eedf;
border-bottom: 3px solid var(--accent);
}
.brand {
font-family: Georgia, "Times New Roman", serif;
font-size: 28px;
line-height: 1;
}
.archive-switcher {
width: 100%;
min-width: 0;
border: 1px solid rgba(247, 238, 223, 0.35);
background: #202b25;
color: #f7eedf;
padding: 7px 9px;
}
.nav {
display: flex;
gap: 16px;
justify-content: flex-end;
min-width: 0;
}
.nav-link {
border: 0;
background: transparent;
color: #d7cdbf;
cursor: pointer;
padding: 8px 0;
}
.nav-link.is-active {
color: #fffaf0;
border-bottom: 1px solid #fffaf0;
}
.capture-button {
border: 0;
background: #f7eedf;
color: var(--top);
padding: 9px 12px;
cursor: pointer;
}
.app-shell {
height: calc(100vh - 56px);
display: grid;
grid-template-columns: minmax(0, 1fr) 320px;
}
.workspace {
min-width: 0;
overflow: auto;
}
.search-row {
min-height: 76px;
display: grid;
grid-template-columns: minmax(0, 1fr) max-content;
gap: 18px;
align-items: center;
padding: 14px 16px;
background: var(--paper-2);
border-bottom: 1px solid var(--line);
}
.search-input {
width: 100%;
height: 46px;
border: 2px solid var(--ink);
background: var(--paper-3);
color: var(--ink);
padding: 0 14px;
font-size: 16px;
outline-offset: 3px;
}
.result-count {
min-width: 76px;
color: var(--muted);
font-size: 13px;
text-align: right;
}
.view {
display: none;
}
.view.is-active {
display: block;
}
.entry-table {
width: 100%;
font-size: 13px;
overflow: auto;
}
.entry-header-row {
display: flex;
align-items: stretch;
position: sticky;
top: 0;
z-index: 1;
background: #ded5c7;
border-bottom: 1px solid #cec4b5;
color: #5d625e;
font-size: 11px;
text-transform: uppercase;
}
.entry-header-row > div {
padding: 10px;
flex-shrink: 0;
}
#entries-body > div {
display: flex;
align-items: baseline;
cursor: default;
border-bottom: 1px solid var(--line-soft);
}
#entries-body > div > div {
padding: 10px;
flex-shrink: 0;
overflow: hidden;
}
#entries-body > div:nth-child(even) {
background: #f2ede5;
}
#entries-body > div:nth-child(odd) {
background: var(--paper-3);
}
#entries-body > div.is-selected {
background: #eee2d2;
outline: 2px solid var(--accent);
outline-offset: -2px;
}
.col-added {
width: 168px;
}
.col-title {
flex: 1 1 0;
min-width: 0;
overflow: hidden;
}
.col-type {
width: 120px;
}
.col-size {
width: 100px;
}
.col-url {
flex: 0 0 30%;
min-width: 0;
overflow: hidden;
}
/* Runs table (still a <table>) */
#runs-view .entry-table {
border-collapse: collapse;
table-layout: auto;
}
#runs-view .entry-table th {
position: sticky;
top: 0;
z-index: 1;
text-align: left;
padding: 10px;
background: #ded5c7;
color: #5d625e;
border-bottom: 1px solid #cec4b5;
font-size: 11px;
text-transform: uppercase;
}
#runs-view .entry-table td {
padding: 10px;
border-bottom: 1px solid var(--line-soft);
vertical-align: top;
}
#runs-view .entry-table tr:nth-child(even) td { background: #f2ede5; }
#runs-view .entry-table tr:nth-child(odd) td { background: var(--paper-3); }
.entry-title {
color: var(--link);
font-weight: 750;
}
.source-icon {
display: inline-flex;
align-items: center;
width: 1em;
height: 1em;
margin-right: 0.35em;
vertical-align: middle;
flex-shrink: 0;
}
.source-icon svg {
width: 100%;
height: 100%;
}
.url-cell {
color: #555b55;
word-break: break-all;
}
.type-pill {
display: inline-block;
padding: 2px 6px;
background: #d8e3df;
color: #275a5f;
border: 1px solid #bfd0ca;
}
.context-rail {
border-left: 1px solid var(--line);
background: #efe7dc;
padding: 18px;
overflow: auto;
}
.rail-title {
color: var(--accent);
font-weight: 800;
margin-bottom: 10px;
text-transform: uppercase;
font-size: 12px;
letter-spacing: 0;
}
.rail-body {
color: var(--muted);
font-size: 14px;
line-height: 1.6;
}
.rail-body strong {
color: var(--ink);
}
.rail-item {
padding: 10px 0;
border-bottom: 1px solid var(--line);
}
.admin-view {
padding: 22px;
}
.admin-view h1 {
margin: 0 0 16px;
font-size: 18px;
}
.admin-list {
display: grid;
gap: 10px;
max-width: 780px;
}
.admin-archive {
border: 1px solid var(--line);
background: var(--paper-3);
padding: 12px;
}
.muted {
color: var(--muted);
}
@media (max-width: 900px) {
.topbar {
grid-template-columns: 1fr auto;
height: auto;
min-height: 56px;
padding: 12px;
}
.archive-switcher,
.nav {
grid-column: 1 / -1;
}
.nav {
justify-content: flex-start;
overflow-x: auto;
}
.app-shell {
height: auto;
grid-template-columns: 1fr;
}
.search-row {
grid-template-columns: 1fr;
}
.result-count {
text-align: left;
}
.context-rail {
border-left: 0;
border-top: 1px solid var(--line);
}
.entry-table {
min-width: 860px;
}
}
.rail-entry-title {
display: block;
font-size: 15px;
font-weight: 700;
color: var(--ink);
margin-bottom: 12px;
line-height: 1.4;
}
.rail-section {
margin-bottom: 18px;
}
.rail-section-heading {
font-size: 11px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--accent);
margin-bottom: 6px;
}
.rail-label {
font-weight: 600;
color: var(--ink);
}
.rail-url-link {
color: var(--accent);
word-break: break-all;
font-size: 13px;
}
.artifact-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.artifact-link {
display: block;
padding: 6px 8px;
background: var(--paper-3);
border: 1px solid var(--line);
color: var(--accent);
text-decoration: none;
font-size: 13px;
border-radius: 3px;
}
.artifact-link:hover {
background: var(--line);
text-decoration: underline;
}
/* Search loading state */
.search-input[aria-busy="true"] {
cursor: progress;
}
/* Tag tree */
.tag-tree {
padding: 12px;
}
.tag-tree-list {
list-style: none;
margin: 0;
padding: 0;
}
.tag-children {
padding-left: 16px;
}
.tag-node-btn {
border: 0;
background: transparent;
color: var(--link);
cursor: pointer;
padding: 3px 0;
text-align: left;
font-size: 13px;
display: block;
width: 100%;
}
.tag-node-btn:hover {
text-decoration: underline;
}
.tag-node-btn.is-active {
font-weight: 600;
color: var(--ink);
}
/* Tag pills in context rail */
.entry-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
padding: 8px 0;
}
.tag-pill {
display: inline-flex;
align-items: center;
gap: 4px;
background: var(--paper-2);
border: 1px solid var(--line);
border-radius: 3px;
font-size: 12px;
padding: 2px 6px;
color: var(--ink);
}
.remove-tag {
border: 0;
background: none;
cursor: pointer;
color: var(--muted);
padding: 0;
font-size: 14px;
line-height: 1;
}
.remove-tag:hover {
color: var(--accent);
}
/* Assign tag form */
.assign-tag-form {
display: flex;
gap: 6px;
padding: 6px 0 8px;
border-top: 1px solid var(--line-soft);
margin-top: 4px;
}
.assign-tag-input {
flex: 1;
min-width: 0;
border: 1px solid var(--line);
background: var(--paper-3);
color: var(--ink);
padding: 4px 7px;
font-size: 12px;
}
.assign-tag-btn {
border: 1px solid var(--line);
background: var(--paper-2);
color: var(--ink);
cursor: pointer;
padding: 4px 10px;
font-size: 12px;
white-space: nowrap;
}
.assign-tag-btn:hover {
background: var(--paper);
}
/* Tag filter badge in search row */
.tag-filter-badge {
display: inline-flex;
align-items: center;
gap: 4px;
background: var(--accent);
color: #fff;
border: 0;
border-radius: 3px;
font-size: 12px;
padding: 2px 8px;
cursor: pointer;
margin-left: 8px;
}
.tag-filter-badge:hover {
opacity: 0.85;
}
/* Capture dialog */
.capture-dialog {
border: 2px solid var(--ink);
background: var(--paper);
padding: 0;
min-width: 360px;
max-width: 520px;
box-shadow: 4px 4px 0 var(--ink);
}
.capture-dialog::backdrop {
background: rgba(0, 0, 0, 0.45);
}
.capture-dialog-inner {
padding: 28px;
}
.capture-dialog-title {
margin: 0 0 16px;
font-size: 18px;
font-family: Georgia, "Times New Roman", serif;
}
.capture-label {
display: block;
font-size: 13px;
font-weight: 600;
margin-bottom: 6px;
color: var(--muted);
text-transform: uppercase;
letter-spacing: 0.04em;
}
.capture-input {
width: 100%;
height: 42px;
border: 2px solid var(--ink);
background: var(--paper-3);
color: var(--ink);
padding: 0 12px;
font-size: 15px;
margin-bottom: 10px;
outline-offset: 3px;
}
.capture-error {
color: var(--accent);
font-size: 13px;
margin-bottom: 10px;
min-height: 18px;
}
.capture-actions {
display: flex;
gap: 10px;
justify-content: flex-end;
margin-top: 16px;
}
.capture-cancel {
border: 1px solid var(--line);
background: none;
color: var(--ink);
padding: 8px 18px;
cursor: pointer;
}
.capture-cancel:hover {
background: var(--paper-2);
}
.capture-submit {
border: 0;
background: var(--ink);
color: var(--paper);
padding: 8px 20px;
cursor: pointer;
font-weight: 600;
}
.capture-submit:hover {
opacity: 0.85;
}
.capture-submit:disabled {
opacity: 0.45;
cursor: default;
}