repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
quickshell/nuguland/.system/specs/NL-SPEC-8EQ0TRBZ-nuguland-vault-widget/vault-widget.html
Raw<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>nuguland vault widget</title>
<style>
* { box-sizing: border-box; }
body { margin: 0; background: #121212; }
.vault {
--bg: #121212;
--panel: #242424;
--panel2: #303030;
--text: #ededed;
--muted: #9d9d9d;
--line: #ffffff38;
--accent: #d86dd8;
--focus: #9aabae;
width: min(920px, 96vw);
height: 580px;
margin: 14px auto;
padding: 14px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--panel);
color: var(--text);
font: 14px/1.25 "IBM Plex Sans", sans-serif;
display: grid;
grid-template-columns: 335px 1fr;
overflow: hidden;
}
button, input { font: inherit; color: inherit; }
button:focus-visible, input:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.browser { padding-right: 14px; border-right: 1px solid var(--line); min-width: 0; overflow: hidden; }
.search { height: 44px; width: 100%; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); padding: 0 13px; font-family: "IBM Plex Mono", monospace; font-size: 16px; }
.sectionlabel { color: var(--muted); font: 11px "IBM Plex Mono", monospace; margin: 13px 3px 5px; }
.results { display: grid; gap: 4px; }
.item { width: 100%; height: 55px; border: 1px solid transparent; border-radius: 10px; background: transparent; text-align: left; padding: 7px 8px; display: grid; grid-template-columns: 36px 1fr 25px; gap: 9px; align-items: center; cursor: pointer; }
.item:hover { background: #ffffff0b; }
.item.on { background: #d86dd81c; border-color: #d86dd875; }
.favicon { width: 34px; height: 34px; border-radius: 8px; background: #ededed; object-fit: contain; padding: 5px; }
.typeicon { width: 34px; height: 34px; border-radius: 8px; background: var(--bg); display: grid; place-items: center; color: var(--accent); font: 16px "IBM Plex Mono", monospace; }
.title { font-weight: 600; }
.meta { color: var(--muted); font-size: 11px; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pin { color: var(--accent); font-size: 15px; text-align: center; }
.detail { padding: 5px 4px 0 22px; min-width: 0; overflow: hidden; }
.head { display: grid; grid-template-columns: 50px 1fr auto; align-items: center; gap: 12px; height: 51px; }
.head .favicon { width: 48px; height: 48px; border-radius: 12px; padding: 7px; }
.head h1 { font-size: 23px; margin: 0; }
.head p { margin: 4px 0 0; color: var(--muted); font: 12px "IBM Plex Mono", monospace; }
.iconbtn { width: 34px; height: 34px; display: grid; place-items: center; border: 1px solid var(--line); border-radius: 8px; background: var(--panel2); cursor: pointer; font-size: 17px; }
.iconbtn:hover { border-color: var(--accent); color: var(--accent); }
.totp { margin-top: 18px; padding: 15px; border: 1px solid #d86dd870; border-radius: 12px; background: #d86dd810; display: grid; grid-template-columns: 1fr 135px; gap: 16px; }
.label { color: var(--muted); font: 11px "IBM Plex Mono", monospace; margin-bottom: 7px; }
.code { border: 0; background: transparent; padding: 0; text-align: left; font: 700 34px/1 "IBM Plex Mono", monospace; letter-spacing: 5px; cursor: pointer; }
.code:hover { color: var(--accent); }
.hint { color: var(--muted); font-size: 11px; margin-top: 8px; }
.next { border-left: 1px solid var(--line); padding-left: 16px; }
.next .code { font-size: 18px; letter-spacing: 2px; }
.count { margin-top: 10px; color: var(--accent); font: 12px "IBM Plex Mono", monospace; }
.fields { display: grid; gap: 7px; margin-top: 15px; }
.field { height: 55px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); display: grid; grid-template-columns: 1fr auto; align-items: center; padding: 8px 9px 8px 12px; min-width: 0; }
.value { font: 14px "IBM Plex Mono", monospace; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.actions { display: flex; gap: 5px; }
.subtle { font-size: 12px; color: var(--muted); margin-top: 11px; }
.svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
</style>
</head>
<body>
<main class="vault">
<section class="browser">
<input class="search" aria-label="search vault" placeholder="search vault">
<div class="sectionlabel">favorites</div>
<div class="results">
<button class="item on"><img class="favicon" src="https://github.com/favicon.ico" alt=""><span><span class="title">github</span><span class="meta">login · oliver@bugabinga.net</span></span><span class="pin">★</span></button>
<button class="item"><img class="favicon" src="https://codeberg.org/assets/img/favicon.svg" alt=""><span><span class="title">codeberg</span><span class="meta">login · bugabinga</span></span><span class="pin">★</span></button>
</div>
<div class="sectionlabel">all items</div>
<div class="results">
<button class="item"><span class="typeicon">▣</span><span><span class="title">daily card</span><span class="meta">card · visa ending 4242</span></span><span></span></button>
<button class="item"><span class="typeicon">◎</span><span><span class="title">oliver jan krylow</span><span class="meta">identity · personal</span></span><span></span></button>
<button class="item"><span class="typeicon">≡</span><span><span class="title">recovery codes</span><span class="meta">secure note</span></span><span></span></button>
<button class="item"><span class="typeicon">⌁</span><span><span class="title">vcs deploy</span><span class="meta">ssh key · ed25519</span></span><span></span></button>
</div>
</section>
<section class="detail">
<header class="head">
<img class="favicon" src="https://github.com/favicon.ico" alt="">
<div><h1>github</h1><p>login · personal</p></div>
<button class="iconbtn" aria-label="unpin favorite" title="unpin favorite">★</button>
</header>
<section class="totp">
<div><div class="label">current code</div><button class="code" title="copy current code">824 193</button><div class="hint">click code to copy</div></div>
<div class="next"><div class="label">next</div><button class="code" title="copy next code">391 420</button><div class="count">18s remaining</div></div>
</section>
<section class="fields">
<div class="field">
<div><div class="label">username</div><div class="value">oliver@bugabinga.net</div></div>
<div class="actions"><button class="iconbtn" aria-label="copy username" title="copy username"><svg class="svg" viewBox="0 0 24 24"><rect x="9" y="9" width="11" height="11" rx="2"/><path d="M15 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3"/></svg></button></div>
</div>
<div class="field">
<div><div class="label">password</div><div class="value">••••••••••••••••</div></div>
<div class="actions">
<button class="iconbtn" aria-label="view password" title="view password"><svg class="svg" viewBox="0 0 24 24"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12Z"/><circle cx="12" cy="12" r="3"/></svg></button>
<button class="iconbtn" aria-label="copy password" title="copy password"><svg class="svg" viewBox="0 0 24 24"><rect x="9" y="9" width="11" height="11" rx="2"/><path d="M15 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3"/></svg></button>
</div>
</div>
<div class="field">
<div><div class="label">website</div><div class="value">github.com</div></div>
<div class="actions">
<button class="iconbtn" aria-label="open website" title="open website"><svg class="svg" viewBox="0 0 24 24"><path d="M14 3h7v7M10 14 21 3M21 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5"/></svg></button>
<button class="iconbtn" aria-label="copy website" title="copy website"><svg class="svg" viewBox="0 0 24 24"><rect x="9" y="9" width="11" height="11" rx="2"/><path d="M15 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3"/></svg></button>
</div>
</div>
</section>
<div class="subtle">additional fields continue below · selected item and position survive close/open</div>
</section>
</main>
</body>
</html>