diff --git a/extension/src/vault/vault.css b/extension/src/vault/vault.css index 270b73b..8d9f994 100644 --- a/extension/src/vault/vault.css +++ b/extension/src/vault/vault.css @@ -1396,6 +1396,281 @@ textarea { color: #484f58; } +/* === 3-column shell === */ +.vault-shell { + display: flex; + height: 100vh; + overflow: hidden; + background: var(--bg-page, #0d1117); +} + +.vault-sidebar { + width: 200px; + min-width: 200px; + display: flex; + flex-direction: column; + border-right: 1px solid var(--border, #30363d); + background: var(--bg-sidebar, #0d1117); + overflow-y: auto; + flex-shrink: 0; +} + +.vault-list-pane { + flex: 1; + display: flex; + flex-direction: column; + overflow-y: auto; + min-width: 0; +} + +.vault-drawer { + width: 440px; + min-width: 440px; + max-width: 440px; + border-left: 1px solid var(--border, #30363d); + background: var(--bg-elevated, #161b22); + overflow-y: auto; + transform: translateX(100%); + transition: transform 0.2s ease; + flex-shrink: 0; +} + +.vault-drawer--open { + transform: translateX(0); +} + +.vault-list-row { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 16px; + cursor: pointer; + border-bottom: 1px solid var(--border-subtle, #21262d); + transition: background 0.1s; +} + +.vault-list-row:hover { background: var(--bg-hover, #161b22); } + +.vault-list-row--selected { + background: var(--bg-selected, #1c2d41); + border-left: 2px solid var(--gold, #b8860b); +} + +.vault-list-row__icon { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + background: var(--bg-elevated, #161b22); + border-radius: 6px; + border: 1px solid var(--border, #30363d); + font-size: 14px; + flex-shrink: 0; +} + +.vault-list-row--selected .vault-list-row__icon { border-color: var(--gold, #b8860b); } + +.vault-list-row__text { flex: 1; min-width: 0; } + +.vault-list-row__title { + font-size: 13px; + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vault-list-row__subtitle { + font-size: 11px; + color: var(--text-muted, #8b949e); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-top: 1px; +} + +.vault-list-row__age { + font-size: 10px; + color: var(--text-dim, #6e7681); + flex-shrink: 0; +} + +/* Bottom sheet */ +.vault-bottom-sheet-scrim { + position: absolute; + inset: 0 0 0 200px; + background: rgba(0,0,0,0.5); + opacity: 0; + transition: opacity 0.2s; + pointer-events: none; + z-index: 100; +} + +.vault-bottom-sheet-scrim--visible { + opacity: 1; + pointer-events: auto; +} + +.vault-bottom-sheet { + position: absolute; + bottom: 0; + left: 200px; + right: 0; + background: var(--bg-elevated, #161b22); + border-top: 1px solid var(--border, #30363d); + border-radius: 12px 12px 0 0; + padding: 16px 24px 24px; + transform: translateY(100%); + transition: transform 0.25s ease; + z-index: 101; + max-height: 60vh; + overflow-y: auto; +} + +.vault-bottom-sheet--open { transform: translateY(0); } + +.vault-bottom-sheet__handle { + width: 40px; + height: 4px; + background: var(--border, #30363d); + border-radius: 2px; + margin: 0 auto 16px; +} + +.vault-bottom-sheet__title { + font-size: 14px; + font-weight: 600; + margin-bottom: 16px; + text-align: center; +} + +.vault-type-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 10px; +} + +.vault-type-card { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 12px 8px; + background: var(--bg-page, #0d1117); + border: 1px solid var(--border, #30363d); + border-radius: 8px; + cursor: pointer; + transition: border-color 0.15s; + gap: 6px; +} + +.vault-type-card:hover { border-color: var(--gold, #b8860b); } + +.vault-type-card__icon { font-size: 28px; } +.vault-type-card__name { font-size: 11px; color: var(--text-muted, #8b949e); } + +/* Drawer header and body */ +.vault-drawer__header { + display: flex; + align-items: center; + padding: 12px 16px; + border-bottom: 1px solid var(--border, #30363d); + gap: 8px; +} + +.vault-drawer__type-pill { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 2px 8px; + background: var(--bg-page, #0d1117); + border: 1px solid var(--border, #30363d); + border-radius: 4px; + color: var(--text-muted, #8b949e); +} + +.vault-drawer__actions { display: flex; gap: 6px; margin-left: auto; } + +.vault-drawer__close { + background: transparent; + border: none; + cursor: pointer; + font-size: 16px; + color: var(--text-muted, #8b949e); + padding: 4px 6px; +} + +.vault-drawer__body { padding: 20px 20px 16px; } + +.vault-drawer__title { font-size: 18px; font-weight: 700; margin-bottom: 4px; } +.vault-drawer__subtitle { font-size: 12px; color: var(--text-muted, #8b949e); margin-bottom: 16px; } + +.vault-drawer__field-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; +} + +.vault-drawer__field-grid > .vault-drawer__field--full { grid-column: 1 / -1; } + +.vault-drawer__field-label { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--text-muted, #8b949e); + margin-bottom: 2px; +} + +.vault-drawer__field-value { + font-size: 13px; + word-break: break-all; +} + +/* Category nav */ +.vault-category-row { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 6px 12px; + background: transparent; + border: none; + cursor: pointer; + color: inherit; + font-size: 13px; + text-align: left; +} + +.vault-category-row:hover { background: var(--bg-hover, #161b22); } +.vault-category-row--active { background: var(--bg-selected, #1c2d41); } +.vault-category-row__icon { font-size: 14px; flex-shrink: 0; } +.vault-category-row__label { flex: 1; } +.vault-category-row__count { font-size: 11px; color: var(--text-muted, #8b949e); } + +/* === Responsive === */ +@media (max-width: 960px) { + .vault-drawer { + position: absolute; + right: 0; + top: 0; + height: 100%; + } +} + +@media (max-width: 720px) { + .vault-sidebar { + width: 48px; + min-width: 48px; + } + .vault-sidebar__category-label, + .vault-sidebar__category-count, + .vault-sidebar__nav-label { + display: none; + } + .vault-sidebar__nav-item { justify-content: center; padding: 10px 0; } +} + /* --- Lock screen (vault tab) --- */ .vault-lock-screen {