217 lines
14 KiB
CSS
217 lines
14 KiB
CSS
:root {
|
||
--bg: #0a0e17; --bg2: #131a24; --text: #e1e8f0; --text2: #8899aa;
|
||
--accent: #3b82f6; --danger: #ef4444; --success: #22c55e; --warning: #f59e0b;
|
||
--border: rgba(255,255,255,0.06); --card: rgba(18,25,35,0.85);
|
||
--input: #10161f; --vault-bg: rgba(255,255,255,0.03);
|
||
}
|
||
.light {
|
||
--bg: #f4f6f9; --bg2: #e9ecf1; --text: #1a1f2e; --text2: #5a6475;
|
||
--card: rgba(255,255,255,0.9); --input: #ffffff;
|
||
--border: rgba(0,0,0,0.08); --vault-bg: rgba(255,255,255,0.5);
|
||
}
|
||
|
||
* { margin:0; padding:0; box-sizing:border-box; }
|
||
body {
|
||
background: linear-gradient(145deg, var(--bg) 0%, var(--bg2) 100%);
|
||
font-family: 'Segoe UI', system-ui, sans-serif;
|
||
min-height: 100vh; display: flex; justify-content: center;
|
||
align-items: flex-start; padding: 1.2rem; color: var(--text);
|
||
transition: background 0.3s, color 0.3s;
|
||
}
|
||
|
||
.toast-container { position:fixed; top:1rem; right:1rem; z-index:9999; display:flex; flex-direction:column; gap:0.5rem; }
|
||
.toast { padding:0.7rem 1.2rem; border-radius:0.8rem; font-size:0.85rem; animation:slideIn 0.3s ease; color:#fff; }
|
||
.toast.error { background:var(--danger); }
|
||
.toast.success { background:var(--success); }
|
||
@keyframes slideIn { from { transform:translateX(100%); opacity:0; } to { transform:translateX(0); opacity:1; } }
|
||
|
||
.vault {
|
||
width:96%; max-width:1700px; background:var(--vault-bg);
|
||
backdrop-filter:blur(20px); border:1px solid var(--border);
|
||
border-radius:2rem; padding:1.8rem; margin:0.5rem auto;
|
||
box-shadow:0 30px 50px rgba(0,0,0,0.4);
|
||
}
|
||
h1 { font-size:2rem; margin-bottom:0.6rem; display:flex; align-items:center; gap:0.6rem; flex-wrap:wrap; }
|
||
h1 span { background:var(--accent); padding:0.2rem 0.7rem; border-radius:3rem; font-size:0.8rem; color:#fff; }
|
||
|
||
/* Auth */
|
||
.auth-section { background:rgba(0,0,0,0.25); border-radius:1.5rem; padding:1.3rem; margin-bottom:1rem; border:1px solid var(--border); }
|
||
.auth-tabs { display:flex; gap:1rem; margin-bottom:0.8rem; }
|
||
.auth-tab { background:none; border:none; color:var(--text2); padding:0.4rem 0.8rem; cursor:pointer; border-bottom:2px solid transparent; font-size:0.9rem; }
|
||
.auth-tab.active { color:var(--accent); border-bottom-color:var(--accent); }
|
||
|
||
input, select, textarea {
|
||
flex:1; min-width:130px; background:var(--input); border:1px solid #2d3748;
|
||
padding:0.65rem 1rem; border-radius:2rem; color:var(--text); font-size:0.85rem;
|
||
outline:none; font-family:inherit;
|
||
}
|
||
input:focus, select:focus { border-color:var(--accent); }
|
||
|
||
.btn {
|
||
background:linear-gradient(135deg, #2563eb, #1d4ed8); border:none; color:#fff;
|
||
font-weight:600; padding:0.65rem 1.3rem; border-radius:2rem; cursor:pointer;
|
||
font-size:0.85rem; transition:0.2s; white-space:nowrap;
|
||
}
|
||
.btn:hover { filter:brightness(1.15); transform:scale(1.02); }
|
||
.btn:disabled { opacity:0.5; cursor:not-allowed; transform:none; }
|
||
.btn-outline { background:transparent; border:1px solid #475569; color:var(--text2); }
|
||
.btn-sm { padding:0.35rem 0.9rem; font-size:0.75rem; }
|
||
.btn-xs { padding:0.2rem 0.5rem; font-size:0.7rem; }
|
||
.btn-danger { background:var(--danger); }
|
||
|
||
.input-group { display:flex; gap:0.5rem; margin:0.7rem 0; flex-wrap:wrap; align-items:center; }
|
||
|
||
/* Toolbar */
|
||
.toolbar { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:0.5rem; margin-bottom:0.7rem; }
|
||
.view-toggle { display:flex; gap:0.2rem; background:rgba(0,0,0,0.3); padding:0.2rem; border-radius:2rem; }
|
||
.view-btn { background:none; border:none; color:var(--text2); padding:0.35rem 0.7rem; border-radius:2rem; cursor:pointer; font-size:0.75rem; transition:0.2s; }
|
||
.view-btn.active { background:var(--accent); color:#fff; }
|
||
.view-btn:hover:not(.active) { background:rgba(255,255,255,0.08); }
|
||
|
||
.toggles-row { display:flex; gap:1.2rem; align-items:center; flex-wrap:wrap; }
|
||
.toggle-item { display:flex; align-items:center; gap:0.4rem; font-size:0.75rem; color:var(--text2); }
|
||
.toggle-switch { position:relative; width:36px; height:20px; background:#334155; border-radius:10px; cursor:pointer; transition:0.2s; }
|
||
.toggle-switch.active { background:var(--accent); }
|
||
.toggle-switch::after { content:''; position:absolute; top:2px; left:2px; width:16px; height:16px; background:#fff; border-radius:50%; transition:0.2s; }
|
||
.toggle-switch.active::after { left:18px; }
|
||
|
||
.status-badge { background:var(--bg2); padding:0.25rem 0.8rem; border-radius:2rem; font-size:0.75rem; white-space:nowrap; }
|
||
.hidden { display:none !important; }
|
||
|
||
/* Strength */
|
||
.strength-bar { height:4px; border-radius:2px; transition:0.3s; margin-top:0.2rem; }
|
||
.s0 { background:var(--danger); width:20%; }
|
||
.s1 { background:var(--warning); width:40%; }
|
||
.s2 { background:#eab308; width:60%; }
|
||
.s3 { background:#84cc16; width:80%; }
|
||
.s4 { background:var(--success); width:100%; }
|
||
|
||
/* ========== SEARCH BOX WITH CLEAR BUTTON (FIXED) ========== */
|
||
.search-box {
|
||
position: relative;
|
||
width: 240px; /* fixed width – adjust if needed */
|
||
flex-shrink: 0;
|
||
}
|
||
.search-box input {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
padding-right: 30px; /* space for the ✕ button */
|
||
}
|
||
.clear-search-btn {
|
||
position: absolute;
|
||
right: 6px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
background: none;
|
||
border: none;
|
||
color: var(--text2);
|
||
cursor: pointer;
|
||
font-size: 0.9rem;
|
||
line-height: 1;
|
||
padding: 6px;
|
||
display: none;
|
||
}
|
||
|
||
/* Folders */
|
||
.folders-bar { display:flex; gap:0.4rem; margin-bottom:0.8rem; flex-wrap:wrap; align-items:center; padding:0.4rem 0.6rem; background:rgba(0,0,0,0.2); border-radius:1rem; }
|
||
.folder-chip { background:var(--bg2); border:1px solid var(--border); color:var(--text2); padding:0.3rem 0.8rem; border-radius:2rem; cursor:pointer; font-size:0.78rem; transition:0.2s; white-space:nowrap; }
|
||
.folder-chip:hover { background:var(--accent); color:#fff; border-color:var(--accent); }
|
||
.folder-chip.active { background:var(--accent); color:#fff; border-color:var(--accent); }
|
||
.folder-count { background:rgba(0,0,0,0.3); padding:0.1rem 0.4rem; border-radius:1rem; margin-left:0.3rem; font-size:0.7rem; }
|
||
.folder-delete-btn { background:transparent; border:none; color:var(--danger); cursor:pointer; font-size:0.7rem; margin-left:0.2rem; opacity:0.7; }
|
||
.folder-delete-btn:hover { opacity:1; }
|
||
.folder-add-btn { background:transparent; border:1px dashed #475569; color:var(--text2); padding:0.3rem 0.6rem; border-radius:2rem; cursor:pointer; font-size:0.75rem; transition:0.2s; }
|
||
.folder-add-btn:hover { border-color:var(--accent); color:var(--accent); }
|
||
|
||
#addFolderSelect { min-width:110px; max-width:150px; background:var(--input); border:1px solid #2d3748; color:var(--text); padding:0.5rem 0.8rem; border-radius:2rem; font-size:0.8rem; cursor:pointer; }
|
||
|
||
/* Entries */
|
||
#entriesContainer.grid-view { display:grid; grid-template-columns: repeat(auto-fill, minmax(180px,1fr)); gap:0.6rem; }
|
||
#entriesContainer.list-view { display:flex; flex-direction:column; gap:0.4rem; }
|
||
#entriesContainer.compact-view { display:flex; flex-direction:column; gap:0.2rem; }
|
||
#entriesContainer.table-view { overflow-x:auto; }
|
||
#entriesContainer.table-view table { width:100%; border-collapse:collapse; }
|
||
#entriesContainer.table-view th { text-align:left; padding:0.4rem 0.6rem; color:var(--text2); font-size:0.75rem; border-bottom:1px solid var(--border); }
|
||
#entriesContainer.table-view td { padding:0.4rem 0.6rem; font-size:0.8rem; border-bottom:1px solid rgba(255,255,255,0.03); }
|
||
|
||
.entry-card, .entry-row, .entry-compact, .table-row-drag { cursor:grab; user-select:none; }
|
||
.entry-card.drag-over, .entry-row.drag-over, .entry-compact.drag-over, .table-row-drag.drag-over { border-color:var(--accent)!important; box-shadow:0 0 15px rgba(59,130,246,0.3); }
|
||
.entry-card { background:var(--card); border:1px solid var(--border); border-radius:0.8rem; padding:0.9rem 2.8rem 0.9rem 0.9rem; transition:0.2s; position:relative; word-break:break-word; }
|
||
.entry-card:hover { border-color:rgba(255,255,255,0.15); transform:translateY(-2px); }
|
||
.card-site { font-weight:700; font-size:0.9rem; color:var(--text); margin-bottom:0.2rem; }
|
||
.card-user { color:var(--text2); font-size:0.75rem; margin-bottom:0.3rem; }
|
||
.card-folder { font-size:0.65rem; color:var(--accent); margin-bottom:0.3rem; background:rgba(59,130,246,0.15); display:inline-block; padding:0.1rem 0.5rem; border-radius:1rem; }
|
||
.card-password { background:var(--bg2); padding:0.3rem 0.5rem; border-radius:0.6rem; display:flex; align-items:center; justify-content:space-between; font-family:monospace; font-size:0.75rem; gap:0.2rem; }
|
||
.entry-row { background:var(--card); border:1px solid var(--border); border-radius:0.8rem; padding:0.7rem 2.8rem 0.7rem 0.9rem; display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:0.4rem; position:relative; }
|
||
.entry-compact { display:flex; align-items:center; gap:0.5rem; padding:0.35rem 2.8rem 0.35rem 0.7rem; background:var(--card); border-radius:0.5rem; border:1px solid var(--border); font-size:0.8rem; position:relative; }
|
||
.action-btns { position:absolute; top:4px; right:6px; display:flex; gap:4px; z-index:1; }
|
||
.delete-btn { width:20px; height:20px; background:transparent; color:var(--danger); border:none; cursor:pointer; font-size:0.9rem; font-weight:700; display:flex; align-items:center; justify-content:center; }
|
||
.delete-btn:hover { color:#fff; transform:scale(1.2); }
|
||
.light .delete-btn:hover { color:#000!important; }
|
||
.edit-btn { width:20px; height:20px; background:transparent; color:var(--accent); border:none; cursor:pointer; font-size:0.75rem; display:flex; align-items:center; justify-content:center; }
|
||
.edit-btn:hover { color:#fff; transform:scale(1.2); }
|
||
.light .edit-btn:hover { color:#000!important; }
|
||
.entry-info { display:flex; gap:0.5rem; align-items:center; flex-wrap:wrap; flex:1; }
|
||
.entry-site { font-weight:700; color:var(--text); }
|
||
.entry-user { color:var(--text2); }
|
||
.entry-folder { font-size:0.7rem; color:var(--accent); background:rgba(59,130,246,0.15); padding:0.1rem 0.5rem; border-radius:1rem; }
|
||
.password-field { display:flex; align-items:center; gap:0.3rem; background:var(--bg2); padding:0.2rem 0.5rem; border-radius:2rem; }
|
||
.password-text { font-family:monospace; color:var(--text2); font-size:0.8rem; }
|
||
.icon-btn { background:none; border:1px solid #475569; color:var(--text2); border-radius:2rem; padding:0.2rem 0.5rem; font-size:0.65rem; cursor:pointer; }
|
||
.icon-btn:hover { background:#334155; }
|
||
|
||
/* Settings Dropdown */
|
||
.settings-dropdown { position:relative; display:inline-block; }
|
||
.settings-menu { position:absolute; top:100%; right:0; background:var(--bg2); border:1px solid var(--border); border-radius:0.8rem; padding:0.5rem; min-width:200px; z-index:1000; box-shadow:0 10px 25px rgba(0,0,0,0.4); }
|
||
.settings-item { display:flex; justify-content:space-between; align-items:center; padding:0.4rem 0.6rem; border-radius:0.5rem; font-size:0.8rem; color:var(--text2); cursor:pointer; }
|
||
.settings-item:hover { background:rgba(255,255,255,0.05); }
|
||
.settings-item select { background:var(--input); border:1px solid #334155; color:var(--text); padding:0.2rem 0.5rem; border-radius:1rem; font-size:0.75rem; }
|
||
|
||
/* Trash */
|
||
.trash-badge { background:var(--danger); color:#fff; padding:0.15rem 0.5rem; border-radius:1rem; font-size:0.65rem; margin-left:0.3rem; }
|
||
.trash-info { font-size:0.7rem; color:var(--text2); margin-top:0.2rem; }
|
||
.restore-btn { background:var(--success); color:#fff; border:none; padding:0.2rem 0.6rem; border-radius:1.5rem; cursor:pointer; font-size:0.7rem; }
|
||
.restore-btn:hover { filter:brightness(1.2); }
|
||
.empty-trash-btn { background:var(--danger); color:#fff; border:none; padding:0.3rem 0.8rem; border-radius:1.5rem; cursor:pointer; font-size:0.75rem; }
|
||
.empty-trash-btn:hover { filter:brightness(1.2); }
|
||
|
||
/* Edit Modal */
|
||
.edit-modal { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,0.7); display:none; justify-content:center; align-items:center; z-index:1001; }
|
||
.edit-modal.show { display:flex; }
|
||
.edit-box { background:var(--bg2); border-radius:1.5rem; padding:1.5rem; min-width:380px; max-width:90%; }
|
||
.edit-box h3 { margin-bottom:1rem; color:var(--text); }
|
||
.edit-box label { color:var(--text2); font-size:0.8rem; display:block; margin-bottom:0.2rem; }
|
||
.edit-box input, .edit-box select { width:100%; margin-bottom:0.5rem; }
|
||
|
||
/* Custom modals */
|
||
.custom-modal-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,0.6); display:flex; justify-content:center; align-items:center; z-index:10001; display:none; }
|
||
.custom-modal-overlay.show { display:flex; }
|
||
.custom-modal { background:var(--bg2); border:1px solid var(--border); border-radius:1.2rem; padding:1.5rem; min-width:300px; max-width:90%; }
|
||
.custom-modal h3 { margin-bottom:1rem; color:var(--text); }
|
||
.custom-modal input { width:100%; margin-bottom:1rem; }
|
||
.custom-modal .modal-actions { display:flex; gap:0.5rem; justify-content:flex-end; }
|
||
|
||
/* Confirm popup near element */
|
||
.custom-confirm { position:fixed; background:var(--bg2); border:1px solid var(--accent); border-radius:0.8rem; padding:0.7rem 1rem; z-index:9999; box-shadow:0 10px 30px rgba(0,0,0,0.5); display:none; font-size:0.8rem; color:var(--text); white-space:nowrap; }
|
||
.custom-confirm.show { display:block; }
|
||
.custom-confirm .confirm-text { margin-bottom:0.5rem; }
|
||
.custom-confirm .confirm-btns { display:flex; gap:0.4rem; }
|
||
.custom-confirm .confirm-yes { background:var(--danger); color:#fff; border:none; padding:0.3rem 0.8rem; border-radius:1.5rem; cursor:pointer; font-size:0.75rem; }
|
||
.custom-confirm .confirm-no { background:#334155; color:#fff; border:none; padding:0.3rem 0.8rem; border-radius:1.5rem; cursor:pointer; font-size:0.75rem; }
|
||
|
||
/* Zigzag toast */
|
||
.toast-zigzag { position:fixed; z-index:9998; padding:0.4rem 0.7rem; border-radius:0.5rem; font-size:0.72rem; font-weight:600; pointer-events:none; animation:zigzagUp 1.2s ease-out forwards; white-space:nowrap; }
|
||
.toast-zigzag.success { background:rgba(34,197,94,0.95); color:#fff; }
|
||
.toast-zigzag.error { background:rgba(239,68,68,0.95); color:#fff; }
|
||
@keyframes zigzagUp { 0%{opacity:1;transform:translate(0,0) scale(1)} 20%{opacity:0.9;transform:translate(-10px,-14px) scale(0.9)} 40%{opacity:0.65;transform:translate(12px,-28px) scale(0.75)} 70%{opacity:0.3;transform:translate(-8px,-42px) scale(0.6)} 100%{opacity:0;transform:translate(0,-60px) scale(0.4)} }
|
||
|
||
.idle-warning { position:fixed; top:50%; left:50%; transform:translate(-50%,-50%); background:rgba(0,0,0,0.95); color:#fff; padding:2rem; border-radius:2rem; z-index:10000; text-align:center; display:none; }
|
||
.idle-warning.show { display:block; }
|
||
|
||
@media(max-width:700px) {
|
||
.vault { padding:1rem; border-radius:1.5rem; width:98%; }
|
||
.entry-row { flex-direction:column; }
|
||
#entriesContainer.grid-view { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
|
||
.toolbar { flex-direction:column; }
|
||
.folders-bar { flex-direction:column; align-items:stretch; }
|
||
} |