@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@500;600&family=Spectral:wght@500;600&display=swap'); :root { color-scheme: light; --ink: #20251f; --muted: #6b6f66; --muted-2: #8a8d83; --paper: #f5f0e7; --paper-2: #e9e1d2; --paper-3: #fffaf0; --line: #d2c6b5; --line-soft: #e5dccd; --accent: #8d3f30; --accent-2: #b78342; --link: #245f72; --top: #141d18; --field: #fffdf7; --r: 3px; --r2: 6px; --r3: 10px; --sans: "Helvetica Neue", Helvetica, Arial, sans-serif; --serif: "Spectral", Georgia, "Times New Roman", serif; --display: "Cormorant Garamond", Georgia, serif; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; background: var(--paper); color: var(--ink); font-family: var(--sans); font-size: 14px; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } button, input, select { font: inherit; } /* ── Refined scrollbars ──────────────────────────────────────────────────── */ .workspace, .context-rail { scrollbar-width: thin; scrollbar-color: var(--line) transparent; } .workspace::-webkit-scrollbar, .context-rail::-webkit-scrollbar { width: 11px; height: 11px; } .workspace::-webkit-scrollbar-track, .context-rail::-webkit-scrollbar-track { background: transparent; } .workspace::-webkit-scrollbar-thumb, .context-rail::-webkit-scrollbar-thumb { background: var(--line); border-radius: 999px; border: 3px solid transparent; background-clip: padding-box; } .workspace::-webkit-scrollbar-thumb:hover, .context-rail::-webkit-scrollbar-thumb:hover { background: var(--muted-2); background-clip: padding-box; border: 3px solid transparent; } /* ── Topbar ──────────────────────────────────────────────────────────────── */ .topbar { height: 58px; display: grid; grid-template-columns: auto auto 1fr auto auto; align-items: center; gap: 26px; padding: 0 22px; background: var(--top); color: #efe6d6; border-bottom: 3px solid var(--accent); } .brand { font-family: var(--display); font-weight: 600; font-size: 30px; line-height: 1; letter-spacing: 0.01em; color: #f4ead8; } /* Archive switcher */ .switcher { position: relative; display: inline-flex; align-items: center; } .switcher select { appearance: none; -webkit-appearance: none; border: 1px solid rgba(247, 238, 223, 0.20); background: rgba(247, 238, 223, 0.06); color: #f1e8d8; font-family: var(--sans); font-weight: 550; font-size: 13.5px; letter-spacing: 0.04em; padding: 8px 32px 8px 15px; cursor: pointer; border-radius: 6px; transition: background .15s ease, border-color .15s ease; } .switcher select:hover { background: rgba(247, 238, 223, 0.11); border-color: rgba(247, 238, 223, 0.34); } .switcher::after { content: ""; position: absolute; right: 15px; top: 50%; width: 6px; height: 6px; margin-top: -5px; border-right: 1.2px solid #b6ab98; border-bottom: 1.2px solid #b6ab98; transform: rotate(45deg); pointer-events: none; } .nav { display: flex; gap: 22px; justify-content: flex-end; min-width: 0; } .nav-link { border: 0; background: transparent; color: #cdc1ad; cursor: pointer; padding: 6px 0; font-size: 12.5px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; position: relative; } .nav-link:hover { color: #f4ead8; } .nav-link.is-active { color: #f4ead8; } .nav-link.is-active::after { content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 1px; background: var(--accent-2); } /* Capture button */ .capture-button { display: inline-flex; align-items: center; gap: 8px; position: relative; overflow: hidden; border: 0; background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 88%, #fff) 0%, var(--accent) 55%); color: #f7eddd; padding: 10px 18px; cursor: pointer; font-size: 12px; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; border-radius: var(--r); box-shadow: inset 0 1px 0 rgba(255, 245, 230, 0.16), 0 1px 2px rgba(20, 29, 24, 0.30); transition: filter .18s ease, box-shadow .18s ease; } .capture-button:hover { filter: brightness(0.93); box-shadow: inset 0 1px 0 rgba(255, 245, 230, 0.12), 0 2px 6px rgba(20, 29, 24, 0.34); } .capture-button::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 45%; background: linear-gradient(100deg, transparent 0%, rgba(255, 246, 232, 0.45) 50%, transparent 100%); transform: translateX(-180%) skewX(-18deg); pointer-events: none; } @media (prefers-reduced-motion: no-preference) { .capture-button:hover::before { animation: cap-sheen 0.7s ease; } } @keyframes cap-sheen { from { transform: translateX(-180%) skewX(-18deg); } to { transform: translateX(340%) skewX(-18deg); } } /* ── App shell ───────────────────────────────────────────────────────────── */ .app-shell { height: calc(100vh - 58px); display: grid; grid-template-columns: minmax(0, 1fr) 340px; } .workspace { min-width: 0; overflow: auto; display: flex; flex-direction: column; } /* ── View toggle ─────────────────────────────────────────────────────────── */ .view { display: none; } .view.is-active { display: block; } /* ── Search toolbar ──────────────────────────────────────────────────────── */ .toolbar { position: sticky; top: 0; z-index: 3; display: flex; align-items: center; gap: 16px; padding: 12px 22px; background: color-mix(in srgb, var(--paper) 88%, white); border-bottom: 1px solid var(--line-soft); } .search-field { position: relative; flex: 1 1 auto; min-width: 0; display: flex; align-items: center; height: 42px; background: var(--field); border: 1px solid var(--line); border-radius: 20px; transition: border-color .15s ease, box-shadow .15s ease; } .search-field:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent); } .search-field .ico { display: grid; place-items: center; width: 46px; height: 100%; color: var(--muted-2); flex-shrink: 0; } .search-field .ico svg { width: 16px; height: 16px; } .search-input { flex: 1; min-width: 0; height: 100%; border: 0; background: transparent; color: var(--ink); padding: 0 6px 0 0; font-size: 14px; letter-spacing: 0.01em; outline: none; } .search-input::placeholder { color: var(--muted-2); } .search-field .kbd { margin-right: 12px; display: inline-flex; align-items: center; padding: 3px 7px; font-size: 11px; color: var(--muted); background: var(--paper-2); border: 1px solid var(--line-soft); border-radius: var(--r); flex-shrink: 0; } .result-count { flex-shrink: 0; font-size: 13px; color: var(--muted); letter-spacing: 0.02em; white-space: nowrap; } .result-count b { color: var(--ink); font-weight: 600; font-variant-numeric: tabular-nums; } /* Tag filter badge */ .tag-filter-badge { display: inline-flex; align-items: center; gap: 4px; background: var(--accent); color: #fff; border: 0; border-radius: var(--r); font-size: 12px; padding: 2px 8px; cursor: pointer; margin-left: 8px; } .tag-filter-badge:hover { opacity: 0.85; } /* ── Entry table ─────────────────────────────────────────────────────────── */ .entry-table { width: 100%; font-size: 12.5px; } .entry-header-row { display: flex; align-items: stretch; position: sticky; top: 67px; z-index: 2; background: color-mix(in srgb, var(--paper) 92%, white); border-bottom: 1px solid var(--line-soft); color: var(--muted); font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.08em; } .entry-header-row > div { padding: 9px 10px; flex-shrink: 0; font-weight: 600; display: flex; align-items: center; } #entries-body > div { display: flex; align-items: center; cursor: default; border-bottom: 1px solid var(--line-soft); } #entries-body > div > div { padding: 7px 10px; flex-shrink: 0; overflow: hidden; } /* Skeleton rows (no index class) fall back to nth-child; real rows use explicit classes. */ #entries-body > div:not(.entry-row-outer):nth-child(even) { background: #f2ede5; } #entries-body > div:not(.entry-row-outer):nth-child(odd) { background: var(--paper-3); } /* Index-based stripes for real entry rows — immune to skeleton sibling count. */ #entries-body > .entry-row-outer--light { background: var(--paper-3); } #entries-body > .entry-row-outer--dark { background: #f2ede5; } #entries-body > div.is-selected { background: #eee2d2; box-shadow: inset 0 0 0 2px var(--accent); } #entries-body > div.is-multi-selected { background: #eee2d2; box-shadow: inset 0 0 0 2px var(--accent); } .col-added { width: 162px; color: var(--muted); } .col-title { flex: 1 1 0; min-width: 0; overflow: hidden; display: flex; align-items: center; gap: 0.42em; } .col-type { width: 116px; } .col-size { width: 100px; display: flex; flex-direction: column; justify-content: center; gap: 1px; } .size-total { font-variant-numeric: tabular-nums; } .size-cached-pct { font-size: 10px; color: var(--muted); opacity: 0.8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .col-url { flex: 0 0 30%; min-width: 0; overflow: hidden; } /* col-check is first-child but hidden on desktop — target col-added directly */ .entry-header-row .col-added, #entries-body > div .col-added { padding-left: 22px; } .entry-header-row > div:last-child, #entries-body > div > div:last-child { padding-right: 22px; } .entry-title { color: var(--link); font-weight: 700; min-width: 0; } .entry-header-row > div { padding: 9px 10px; flex-shrink: 0; font-weight: 600; } .source-icon { display: flex; align-items: center; justify-content: center; width: 1.05em; height: 1.05em; flex-shrink: 0; } .source-icon > * { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; } .source-icon svg { width: 100%; height: 100%; } .url-cell { color: #555b55; white-space: nowrap; text-overflow: ellipsis; word-break: break-all; } #entries-body .url-cell:hover { overflow: visible; white-space: normal; } .type-pill { display: inline-block; padding: 2px 6px; background: #d8e3df; color: #275a5f; border: 1px solid #bfd0ca; border-radius: var(--r); } /* ── Multi-select checkbox column ───────────────────────────────────────── */ /* Hidden on desktop (pointer:fine); always visible on touch/mobile */ .col-check { display: none; width: 40px; flex-shrink: 0; align-items: center; justify-content: center; padding: 0 !important; cursor: pointer; } .row-checkbox { /* reset