Files
beardrive/internal/webapp/static/style.css
T
Snow LeeandClaude Fable 5 b20ed7c925 feat(web): expandable history notes; Insights as project landing
History notes still clamp to one line so the feed stays scannable, but
clicking (or Enter on) the note expands the full text and back — links
inside keep working. Selecting a project now lands admins/org owners on
the Insights dashboard instead of the empty "select a file" pane;
members keep the placeholder, and routes that carry a path still open
that file or folder.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-12 12:54:02 -07:00

457 lines
30 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* BearDrive viewer — near-black, hairline-crafted, honey accent.
Design language: Linear-grade restraint; the one accent (honey) is spent
only on active state, the live/brand mark, and the palette selection. */
:root {
--bg: #0a0b0d; /* main ground */
--bg-side: #0c0e10; /* sidebar / panels */
--bg-raise: #15171b; /* palette, modals, elevated cards */
--surface: rgba(255,255,255,.03); /* inputs, ghost buttons */
--hover: rgba(255,255,255,.06); /* row / control hover */
--border: rgba(255,255,255,.07);
--border-2: rgba(255,255,255,.11);
--code-bg: #0d0f12;
--text: #eef0f3;
--text-dim: #9aa0a9; /* AA on both grounds */
--text-faint: #868b93; /* ≥4.5:1 on near-black */
--text-ghost: #666b74; /* decorative icons only */
--accent: #f5a623; /* honey */
--accent-bright: #ffcf85; /* honey text / primary hover */
--accent-dim: #d3861a;
--accent-press: #e0951a;
--glow: rgba(245,166,35,.13);
--add: #4cc38a;
--del: #f26d6d;
--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
--ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Segoe UI", Roboto, sans-serif;
--r-ctl: 7px;
--r-card: 10px;
--r-over: 14px;
}
* { box-sizing: border-box; }
[hidden] { display: none !important; }
html, body { height: 100%; margin: 0; }
body {
display: flex;
background: var(--bg);
color: var(--text);
font: 13px/1.5 var(--ui);
letter-spacing: -.006em;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
::selection { background: var(--glow); color: var(--accent-bright); }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; border-radius: 5px; }
.sprite { position: absolute; }
.ico {
width: 16px; height: 16px; flex: none;
stroke: currentColor; stroke-width: 1.6; fill: none;
stroke-linecap: round; stroke-linejoin: round;
}
button, input, a.btn { font-family: inherit; }
/* ---- sidebar ---- */
#sidebar {
width: 264px; min-width: 210px;
background: var(--bg-side);
border-right: 1px solid var(--border);
display: flex; flex-direction: column; overflow: hidden;
}
#vault {
display: flex; align-items: center; gap: 9px;
height: 52px; padding: 0 12px 0 14px;
border-bottom: 1px solid var(--border);
}
#vault-badge {
width: 22px; height: 22px; border-radius: 6px; flex: none;
display: grid; place-items: center; font-size: 13px; line-height: 1;
background: linear-gradient(160deg, #ffcf85, #f5a623 55%, #d3861a);
box-shadow: 0 1px 0 rgba(255,255,255,.35) inset, 0 2px 6px -1px rgba(245,166,35,.4);
}
#vault-name { font-weight: 600; font-size: 13px; letter-spacing: -.01em; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vault-actions { display: flex; align-items: center; gap: 4px; }
#signout, .icon-btn2 {
width: 28px; height: 28px; border-radius: 6px;
display: inline-flex; align-items: center; justify-content: center;
color: var(--text-ghost); background: transparent; border: none; cursor: pointer; text-decoration: none;
}
#signout:hover, .icon-btn2:hover { color: var(--text); background: var(--hover); }
#signout .ico, .icon-btn2 .ico { width: 16px; height: 16px; }
.adminbar {
display: inline-flex; align-items: center; gap: 6px;
height: 26px; padding: 0 9px; border-radius: var(--r-ctl);
border: 1px solid var(--border); background: var(--surface);
color: var(--accent-bright); font-size: 11.5px; font-weight: 600; cursor: pointer;
}
.adminbar:hover { background: var(--glow); border-color: transparent; }
/* projects */
#projects { flex: none; max-height: 32%; overflow-y: auto; padding: 10px 8px 8px; border-bottom: 1px solid var(--border); }
.nav-head { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px; font-size: 10.5px; font-weight: 600; text-transform: uppercase; letter-spacing: .07em; color: var(--text-ghost); }
.nav-add { display: grid; place-items: center; width: 18px; height: 18px; border: none; background: transparent; color: var(--text-ghost); cursor: pointer; border-radius: 5px; }
.nav-add .ico { width: 14px; height: 14px; }
.nav-add:hover { color: var(--text); background: var(--hover); }
#projects ul { list-style: none; margin: 0; padding: 0; }
#projects .row {
display: flex; align-items: center; gap: 9px;
height: 31px; padding: 0 8px; border-radius: 7px;
color: var(--text-dim); cursor: pointer; position: relative;
white-space: nowrap; overflow: hidden;
}
.proj-mark {
width: 17px; height: 17px; border-radius: 5px; flex: none;
display: grid; place-items: center; font-size: 10px; font-weight: 700;
color: #0a0b0d; letter-spacing: -.02em; text-transform: uppercase;
}
#projects .row .label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
#projects .row:hover { background: var(--hover); color: var(--text); }
#projects .row.active { background: var(--glow); color: var(--accent-bright); }
#projects .row.active::before { content: ""; position: absolute; left: 0; top: 6px; bottom: 6px; width: 2px; border-radius: 2px; background: var(--accent); }
/* file tree */
#tree { flex: 1; overflow-y: auto; padding: 8px 8px 24px; }
#tree ul { list-style: none; margin: 0; padding-left: 13px; position: relative; }
#tree > ul { padding-left: 0; }
#tree ul ul::before { content: ""; position: absolute; left: 5px; top: 0; bottom: 0; width: 1px; background: var(--border); }
#tree li > .row {
display: flex; align-items: center; gap: 6px;
height: 28px; padding: 0 8px; border-radius: 7px;
color: var(--text-dim); cursor: pointer; position: relative;
white-space: nowrap; overflow: hidden;
}
#tree li > .row:hover { background: var(--hover); color: var(--text); }
#tree li > .row.active { background: var(--glow); color: var(--accent-bright); }
#tree li > .row.active::before { content: ""; position: absolute; left: 0; top: 5px; bottom: 5px; width: 2px; border-radius: 2px; background: var(--accent); }
#tree .chev { width: 14px; height: 14px; flex: none; color: var(--text-ghost); transition: transform .12s; display: flex; align-items: center; justify-content: center; }
#tree .chev .ico { width: 13px; height: 13px; }
#tree .ticon { flex: none; display: flex; color: var(--text-ghost); }
#tree .ticon .ico { width: 15px; height: 15px; }
#tree li > .row:hover .ticon, #tree li > .row:hover .chev { color: var(--text-faint); }
#tree li > .row.active .ticon, #tree li > .row.active .chev { color: var(--accent); }
#tree .label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
#tree .file .label { font-size: 12.5px; }
#tree .file .chev { visibility: hidden; }
#tree li.collapsed > ul { display: none; }
#tree li.collapsed > .row .chev { transform: rotate(-90deg); }
.dir-history {
margin-left: auto; flex: none; visibility: hidden;
width: 24px; height: 24px; border-radius: 5px;
display: inline-flex; align-items: center; justify-content: center; color: var(--text-ghost);
}
.dir-history .ico { width: 14px; height: 14px; }
#tree li > .row:hover .dir-history { visibility: visible; }
.dir-history:hover { color: var(--text); background: var(--hover); }
/* org bar */
#orgbar { display: flex; align-items: center; gap: 9px; padding: 9px 12px 9px 14px; border-top: 1px solid var(--border); }
#org-name {
flex: 1; min-width: 0; display: inline-flex; align-items: center; gap: 8px;
color: var(--text-dim); font-size: 12.5px; font-weight: 500; cursor: pointer;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
#org-name::before {
content: ""; width: 15px; height: 15px; flex: none; border-radius: 4px;
background: linear-gradient(160deg, #ffcf85, #d3861a); opacity: .85;
}
#org-name:hover { color: var(--text); }
#invite-btn {
flex: none; height: 27px; padding: 0 11px; border-radius: var(--r-ctl);
border: 1px solid var(--border); background: var(--surface);
color: var(--text-dim); font-size: 12px; font-weight: 500; cursor: pointer;
}
#invite-btn:hover { background: var(--hover); color: var(--text); border-color: var(--border-2); }
/* ---- main pane ---- */
#main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
#topbar {
position: relative; display: flex; align-items: center; gap: 9px;
height: 52px; padding: 0 16px; border-bottom: 1px solid var(--border);
}
.icon-btn { display: none; width: 34px; height: 34px; border: none; background: transparent; color: var(--text-dim); cursor: pointer; border-radius: 7px; align-items: center; justify-content: center; }
.icon-btn:hover { color: var(--text); background: var(--hover); }
#crumb { font-size: 12.5px; color: var(--text); font-weight: 500; letter-spacing: -.01em; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#crumb .crumb-seg { color: var(--text-dim); cursor: pointer; }
#crumb .crumb-seg:hover { color: var(--accent-bright); }
#crumb .crumb-sep { color: var(--text-ghost); margin: 0 5px; }
#meta { flex: 1; min-width: 0; font-size: 12px; color: var(--text-faint); text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.btn {
display: inline-flex; align-items: center; gap: 6px; flex: none;
height: 30px; padding: 0 11px; border-radius: var(--r-ctl);
border: 1px solid var(--border); background: var(--surface);
color: var(--text-dim); font-size: 12.5px; font-weight: 500; cursor: pointer; text-decoration: none;
}
.btn:hover { background: var(--hover); color: var(--text); border-color: var(--border-2); }
.btn .ico { width: 15px; height: 15px; }
.btn.ghost { color: var(--text-dim); }
#search-btn kbd {
font: 11px var(--ui); color: var(--text-faint);
background: var(--hover); border: 1px solid var(--border-2); border-radius: 5px;
padding: 1px 5px; margin-left: 2px;
}
#more-menu {
position: absolute; right: 12px; top: calc(100% - 4px); z-index: 80;
background: var(--bg-raise); border: 1px solid var(--border-2);
border-radius: var(--r-card); box-shadow: 0 18px 44px -14px rgba(0,0,0,.75);
padding: 6px; min-width: 168px;
}
.more-item { display: block; width: 100%; text-align: left; min-height: 40px; padding: 0 12px; background: transparent; border: none; cursor: pointer; color: var(--text); font: inherit; font-size: 13.5px; border-radius: var(--r-ctl); }
.more-item:hover { background: var(--hover); }
#content { flex: 1; overflow-y: auto; padding: 44px 40px 110px; scroll-behavior: smooth; }
.empty { color: var(--text-faint); text-align: center; margin-top: 22vh; }
.empty-hint { display: block; margin-top: 6px; font-size: 12px; color: var(--text-ghost); }
/* ---- onboarding ---- */
.onboard { max-width: 560px; margin: 8vh auto 0; }
.onboard h1 { font-size: 25px; font-weight: 640; letter-spacing: -.02em; margin: 0 0 8px; color: #f4f6f9; }
.onboard > p { color: var(--text-dim); margin: 0 0 28px; font-size: 14px; }
.ob-card { background: var(--bg-side); border: 1px solid var(--border); border-radius: var(--r-card); padding: 20px 22px; margin-bottom: 14px; }
.ob-card h3 { margin: 0 0 6px; font-size: 14.5px; font-weight: 600; }
.ob-card p { margin: 0 0 14px; font-size: 13px; color: var(--text-dim); }
.ob-row { display: flex; gap: 9px; }
.ob-row input { flex: 1; height: 34px; padding: 0 12px; border-radius: var(--r-ctl); border: 1px solid var(--border); background: var(--surface); color: var(--text); font: inherit; font-size: 13px; outline: none; }
.ob-row input:focus { border-color: var(--accent); background: var(--hover); }
/* primary + secondary buttons */
.pbtn { display: inline-flex; align-items: center; gap: 6px; flex: none; height: 32px; padding: 0 14px; border-radius: var(--r-ctl); border: none; background: var(--accent); color: #241704; font-size: 13px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.pbtn:hover { background: var(--accent-bright); }
.pbtn .ico { width: 15px; height: 15px; }
.danger-btn { display: inline-flex; align-items: center; height: 32px; padding: 0 14px; border-radius: var(--r-ctl); border: none; background: #b3382e; color: #fff; font-size: 13px; font-weight: 600; cursor: pointer; }
.danger-btn:hover { background: #c94336; }
/* ---- admin panels ---- */
.admin { max-width: 760px; }
.admin h1 { font-size: 21px; font-weight: 640; letter-spacing: -.02em; margin: 0 0 6px; color: #f4f6f9; }
.admin h3 { font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-ghost); font-weight: 600; margin: 30px 0 10px; }
.admin-sub { color: var(--text-dim); font-size: 13.5px; margin: 0 0 6px; line-height: 1.55; }
.admin-h { display: flex; align-items: center; justify-content: space-between; margin: 30px 0 10px; }
.admin-h h3 { margin: 0; }
.admin-row { display: flex; gap: 9px; margin-bottom: 8px; }
.admin-row input { flex: 1; height: 34px; padding: 0 12px; border-radius: var(--r-ctl); border: 1px solid var(--border); background: var(--surface); color: var(--text); font: inherit; font-size: 13px; outline: none; }
.admin-row input:focus { border-color: var(--accent); background: var(--hover); }
.admin-list { border: 1px solid var(--border); border-radius: var(--r-card); overflow: hidden; background: var(--bg-side); }
.admin-item { display: flex; align-items: center; gap: 11px; padding: 11px 14px; border-bottom: 1px solid var(--border); font-size: 13.5px; }
.admin-item:last-child { border-bottom: none; }
.admin-item:hover { background: rgba(255,255,255,.015); }
.ai-main { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); }
.ai-main.mono { font: 12px var(--mono); color: var(--text-dim); cursor: pointer; }
.ai-tag { font-size: 11.5px; color: var(--text-faint); flex: none; }
.admin-item select { height: 28px; background: var(--surface); color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 0 8px; font: inherit; font-size: 12.5px; cursor: pointer; }
.admin-item select:hover { border-color: var(--border-2); }
.ai-btn, .ai-del { flex: none; height: 27px; padding: 0 11px; border-radius: 6px; border: 1px solid var(--border); background: var(--surface); color: var(--text-dim); font: inherit; font-size: 12px; font-weight: 500; cursor: pointer; }
.ai-btn:hover { background: var(--hover); color: var(--text); border-color: var(--border-2); }
.ai-del { color: var(--del); border-color: transparent; background: transparent; }
.ai-del:hover { background: rgba(242,109,109,.12); color: #ff8b8b; }
.admin-empty { padding: 14px; color: var(--text-faint); font-size: 13px; }
.admin-item.toggle { cursor: pointer; align-items: flex-start; }
.admin-item.toggle .ai-main { white-space: normal; }
.tg-label { font-size: 13.5px; font-weight: 550; color: var(--text); }
.tg-desc { font-size: 12px; color: var(--text-faint); margin-top: 3px; line-height: 1.5; }
.admin-item.toggle input { width: 16px; height: 16px; margin-top: 2px; accent-color: var(--accent); flex: none; }
/* ---- folder listing ---- */
.dirlist { max-width: 704px; margin: 0 auto; }
.dl-title { display: flex; align-items: center; gap: 10px; font-size: 21px; font-weight: 640; letter-spacing: -.02em; margin: 0 0 4px; color: #f4f6f9; }
.dl-title-icon { display: flex; color: var(--accent); }
.dl-title-icon .ico { width: 20px; height: 20px; }
.dl-sub { color: var(--text-faint); font-size: 12.5px; margin: 0 0 18px; }
.dl-items { border: 1px solid var(--border); border-radius: var(--r-card); overflow: hidden; background: var(--bg-side); }
.dl-row { display: flex; align-items: center; gap: 11px; padding: 10px 14px; border-bottom: 1px solid var(--border); cursor: pointer; }
.dl-row:last-child { border-bottom: none; }
.dl-row:hover { background: var(--hover); }
.dl-row .ticon { flex: none; display: flex; color: var(--text-ghost); }
.dl-row .ticon .ico { width: 16px; height: 16px; }
.dl-row:hover .ticon { color: var(--text-faint); }
.dl-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13.5px; color: var(--text); }
.dl-meta { flex: none; font-size: 12px; color: var(--text-faint); font-variant-numeric: tabular-nums; }
/* read-heat dot: intensity grows with 30-day reads (heatLevel in app.js) */
.heatdot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--accent); }
.heatdot.lvl1 { opacity: .3; }
.heatdot.lvl2 { opacity: .55; }
.heatdot.lvl3 { opacity: .8; }
.heatdot.lvl4 { opacity: 1; box-shadow: 0 0 6px rgba(245, 166, 35, .55); }
.dl-empty { padding: 24px 14px; color: var(--text-faint); font-size: 13px; border: 1px dashed var(--border); border-radius: var(--r-card); text-align: center; }
.dl-h3 { margin: 28px 0 8px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--text-ghost); font-weight: 600; }
.dl-hlist { border: 1px solid var(--border); border-radius: var(--r-card); background: var(--bg-side); overflow: hidden; max-width: none; }
.dl-hlist .hentry:last-child { border-bottom: none; }
.dl-more { margin-top: 10px; }
/* ---- insights (read×write matrix) ---- */
.insights { max-width: 760px; margin: 0 auto; }
.in-title { font-size: 21px; font-weight: 640; letter-spacing: -.02em; margin: 0 0 4px; color: #f4f6f9; }
.in-lens { display: flex; gap: 6px; margin: 0 0 14px; }
.in-lens-btn { font: inherit; font-size: 12px; padding: 5px 12px; border-radius: 999px; border: 1px solid var(--border); background: none; color: var(--text-faint); cursor: pointer; }
.in-lens-btn:hover { color: var(--text); }
.in-lens-btn.active { color: var(--accent); border-color: var(--accent); }
.in-chart { width: 100%; height: auto; border: 1px solid var(--border); border-radius: var(--r-card); background: var(--bg-side); margin-bottom: 6px; }
.in-axis { stroke: var(--border); stroke-width: 1; }
.in-threshold { stroke: var(--border); stroke-width: 1; stroke-dasharray: 4 4; }
.in-danger-zone { fill: rgba(242, 109, 109, .05); }
.in-label { fill: var(--text-ghost); font-size: 11px; }
.in-quad { fill: var(--text-ghost); font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em; }
.in-quad-danger { fill: #e07070; }
.in-pt { fill: var(--accent); opacity: .5; cursor: pointer; }
.in-pt:hover { opacity: 1; }
.in-pt.cold { fill: var(--text-ghost); opacity: .25; }
.in-pt.danger { fill: #e05d5d; opacity: .6; }
/* treemap */
.in-treemap { background: #0c0d10; }
.in-tm-group { fill: none; stroke: var(--border); stroke-width: 1; cursor: pointer; pointer-events: all; }
.in-tm-glabel { fill: var(--text-faint); font-size: 10px; text-transform: uppercase; letter-spacing: .05em; cursor: pointer; }
.in-tm-cell { cursor: pointer; }
.in-tm-cell:hover { stroke: #fff; stroke-width: 1; }
.in-tm-label { fill: #0c0d10; font-size: 10.5px; font-weight: 620; cursor: pointer; pointer-events: none; }
/* hot path */
.in-hotpath { border: 1px solid var(--border); border-radius: var(--r-card); background: var(--bg-side); overflow: hidden; }
.in-hp-row { display: flex; align-items: center; gap: 10px; padding: 6px 12px; border-bottom: 1px solid var(--border); cursor: pointer; }
.in-hp-row:last-child { border-bottom: none; }
.in-hp-row:hover { background: var(--hover); }
.in-hp-name { flex: 0 0 300px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12.5px; color: var(--text); }
.in-hp-name.danger { color: #e07070; }
.in-hp-bar { flex: 1; display: flex; height: 10px; border-radius: 3px; overflow: hidden; }
.in-hp-agent { background: var(--accent); }
.in-hp-human { background: #5b8def; }
.in-hp-count { flex: none; width: 40px; text-align: right; font-size: 11.5px; color: var(--text-faint); font-variant-numeric: tabular-nums; }
.in-legend { margin: 8px 2px 0; font-size: 11.5px; color: var(--text-faint); }
.in-sw { display: inline-block; width: 10px; height: 10px; border-radius: 2px; vertical-align: -1px; }
.in-sw.agent { background: var(--accent); }
.in-sw.human { background: #5b8def; }
/* coverage matrix */
.in-matrix rect { transition: opacity .1s; }
.in-matrix rect:hover { opacity: .85; }
/* ---- history ---- */
.history { max-width: 860px; }
.hentry { padding: 11px 12px; border-bottom: 1px solid var(--border); }
.hentry:hover { background: rgba(255,255,255,.015); }
.hline { display: flex; gap: 10px; align-items: center; }
.hkind { display: inline-flex; color: var(--add); }
.hkind .ico { width: 13px; height: 13px; }
.hentry.edit .hkind { color: var(--accent); }
.hentry.delete .hkind { color: var(--del); }
.htag { flex: none; font-size: 10px; text-transform: uppercase; letter-spacing: .06em; font-weight: 600; padding: 1px 6px; border-radius: 4px; }
.hentry.add .htag { color: var(--add); background: rgba(76,195,138,.12); }
.hentry.edit .htag { color: var(--accent-bright); background: var(--glow); }
.hentry.delete .htag { color: #ff8b8b; background: rgba(242,109,109,.12); }
.hpath { font-weight: 500; cursor: pointer; color: var(--text); font-size: 13px; }
.hpath:hover { color: var(--accent-bright); }
.htime { margin-left: auto; color: var(--text-faint); font-size: 12px; font-variant-numeric: tabular-nums; }
.hmeta { display: flex; gap: 14px; margin-top: 4px; padding-left: 23px; font-size: 12px; color: var(--text-dim); }
.hdev, .hsize { color: var(--text-faint); }
.hsize { font-variant-numeric: tabular-nums; }
.hact { margin-left: auto; }
.hact a { color: var(--accent-bright); text-decoration: none; margin-left: 10px; }
.hact a:hover { text-decoration: underline; }
.hnote { margin-top: 4px; padding-left: 23px; font-size: 12px; color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.hnote:hover { color: var(--text); }
.hnote.open { white-space: normal; overflow-wrap: anywhere; }
.hnote::before { content: " "; color: var(--text-ghost); }
.hnote a { color: var(--accent-bright); text-decoration: none; }
.hnote a:hover { text-decoration: underline; }
/* ---- command palette ---- */
#palette-overlay { position: fixed; inset: 0; background: rgba(6,7,9,.62); backdrop-filter: blur(3px); display: flex; justify-content: center; align-items: flex-start; padding-top: 12vh; z-index: 100; }
#palette { width: min(560px, 92vw); background: var(--bg-raise); border: 1px solid var(--border-2); border-radius: var(--r-over); box-shadow: 0 24px 70px -18px rgba(0,0,0,.8); overflow: hidden; }
#palette-inputwrap { display: flex; align-items: center; gap: 11px; padding: 14px 16px; border-bottom: 1px solid var(--border); }
#palette-inputwrap .ico { width: 17px; height: 17px; color: var(--text-faint); }
#palette-input { flex: 1; width: 100%; border: none; background: transparent; color: var(--text); font: inherit; font-size: 15px; letter-spacing: -.01em; outline: none; padding: 0; }
#palette-input::placeholder { color: var(--text-ghost); }
#palette-results { list-style: none; margin: 0; padding: 8px; max-height: 46vh; overflow-y: auto; }
#palette-results li { display: flex; align-items: center; gap: 11px; height: 38px; padding: 0 10px; border-radius: 9px; cursor: pointer; color: var(--text-dim); font-size: 13.5px; }
#palette-results li.selected { background: var(--glow); }
#palette-results li.selected .picon { color: var(--accent); }
#palette-results li.selected .plabel { color: var(--accent-bright); }
#palette-results li.selected .plabel b { color: var(--accent-bright); }
#palette-results li .picon { width: 18px; flex: none; display: flex; justify-content: center; color: var(--text-faint); }
#palette-results li .picon .ico { width: 15px; height: 15px; }
#palette-results li .plabel { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text); }
#palette-results li .plabel b { color: var(--accent-bright); font-weight: 600; }
#palette-results li .pkind { flex: none; font-size: 10.5px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-ghost); }
#palette-results .pempty { color: var(--text-faint); cursor: default; justify-content: center; height: auto; padding: 14px; }
#palette-hint { padding: 9px 16px; border-top: 1px solid var(--border); font-size: 11px; color: var(--text-ghost); }
/* ---- modal ---- */
.modal-back { position: fixed; inset: 0; background: rgba(6,7,9,.6); backdrop-filter: blur(3px); display: flex; align-items: center; justify-content: center; z-index: 150; padding: 20px; }
.modal { background: var(--bg-raise); border: 1px solid var(--border-2); border-radius: var(--r-over); padding: 22px 24px; width: min(460px, 100%); box-shadow: 0 24px 70px -18px rgba(0,0,0,.8); }
.modal h3 { margin: 0 0 10px; font-size: 16px; font-weight: 620; letter-spacing: -.01em; }
.modal p { margin: 0 0 16px; font-size: 13.5px; color: var(--text-dim); line-height: 1.55; }
.modal p b { color: var(--text); }
.modal-url { font: 12px var(--mono); background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-ctl); padding: 9px 11px; color: var(--text-dim); word-break: break-all; margin-bottom: 16px; }
.modal-actions { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.modal-label { display: block; font-size: 12.5px; color: var(--text-dim); margin: 0 0 6px; }
.modal-msg { margin: 0 0 16px; font-size: 13.5px; color: var(--text-dim); line-height: 1.55; }
.modal-input { width: 100%; height: 36px; padding: 0 12px; border-radius: var(--r-ctl); border: 1px solid var(--border); background: var(--surface); color: var(--text); font: inherit; font-size: 14px; margin-bottom: 16px; outline: none; }
.modal-input:focus { border-color: var(--accent); background: var(--hover); }
/* ---- toast ---- */
#toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%) translateY(20px); background: var(--bg-raise); color: var(--text); border: 1px solid var(--border-2); border-radius: 10px; padding: 11px 18px; font-size: 13.5px; box-shadow: 0 18px 44px -12px rgba(0,0,0,.7); opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 200; }
#toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
#toast.err { border-color: rgba(242,109,109,.5); color: #ffb0aa; }
#sb-backdrop { display: none; }
/* ---- responsive ---- */
@media (max-width: 760px) {
#sidebar { position: fixed; z-index: 60; top: 0; left: 0; height: 100%; transform: translateX(-100%); transition: transform .2s ease; box-shadow: 0 0 40px rgba(0,0,0,.6); }
body.sb-open #sidebar { transform: translateX(0); }
body.sb-open #sb-backdrop { display: block; position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 50; }
.icon-btn { display: inline-flex; width: 44px; height: 44px; }
#content { padding: 24px 18px 70px; }
#topbar { padding: 0 8px; gap: 4px; }
#search-btn kbd, .btn .lbl { display: none; }
#topbar .btn { min-width: 44px; min-height: 44px; padding: 0; justify-content: center; gap: 0; }
#topbar .btn .ico { width: 18px; height: 18px; }
#more-btn:not([hidden]) { display: inline-flex; }
#history-btn, #upload-btn, #download { display: none !important; }
#meta { display: none; }
#vault { padding: 0 8px 0 12px; }
.icon-btn2, #signout, .adminbar { min-width: 44px; min-height: 44px; }
#tree li > .row, #projects .row { height: 44px; }
#invite-btn { min-height: 40px; padding: 0 14px; }
#org-name { min-height: 44px; }
.nav-add { min-width: 44px; min-height: 44px; }
.markdown, .admin, .onboard, .history, .dirlist { max-width: 100%; }
.markdown table, pre.plain { display: block; overflow-x: auto; max-width: 100%; }
.ob-row { flex-direction: column; }
}
/* ---- markdown reading view ---- */
.markdown { max-width: 704px; margin: 0 auto; }
.markdown h1, .markdown h2, .markdown h3, .markdown h4 { color: #f4f6f9; line-height: 1.25; letter-spacing: -.018em; margin: 1.5em 0 .5em; text-wrap: balance; }
.markdown h1:first-child { margin-top: 0; }
.markdown h1 { font-size: 1.85em; font-weight: 660; letter-spacing: -.024em; }
.markdown h2 { font-size: 1.32em; font-weight: 620; margin-top: 1.7em; }
.markdown h3 { font-size: 1.08em; font-weight: 620; }
.markdown p, .markdown li { color: #c6cbd3; font-size: 14.5px; line-height: 1.72; }
.markdown p { margin: 0 0 1em; }
.markdown strong { color: var(--text); font-weight: 620; }
.markdown a { color: var(--accent-bright); text-decoration: none; border-bottom: 1px solid rgba(245,166,35,.28); }
.markdown a:hover { border-bottom-color: var(--accent); }
.markdown ul, .markdown ol { margin: 0 0 1em; padding-left: 1.4em; }
.markdown li { margin-bottom: .4em; }
.markdown li::marker { color: var(--text-ghost); }
.markdown code { background: var(--hover); border: 1px solid var(--border); padding: .1em .4em; border-radius: 5px; font: 12.5px/1.5 var(--mono); color: #e4d9c4; }
.markdown pre { background: var(--code-bg); border: 1px solid var(--border); border-radius: var(--r-card); padding: 14px 16px; overflow-x: auto; margin: 1.3em 0; }
.markdown pre code { background: none; border: none; padding: 0; color: #c6cbd3; }
.markdown blockquote { margin: 1.3em 0; padding: .3em 1em; border-left: 2px solid var(--accent); background: linear-gradient(90deg, var(--glow), transparent); border-radius: 0 8px 8px 0; color: #d8cdb6; }
.markdown blockquote p { margin: .3em 0; color: #d8cdb6; }
.markdown table { border-collapse: collapse; margin: 1.3em 0; font-size: 13.5px; }
.markdown th, .markdown td { border-bottom: 1px solid var(--border); padding: 9px 13px; text-align: left; }
.markdown th { color: var(--text-faint); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; font-weight: 600; border-bottom-color: var(--border-2); }
.markdown tr:hover td { background: rgba(255,255,255,.02); }
.markdown img { max-width: 100%; border-radius: 8px; border: 1px solid var(--border); }
.markdown hr { border: none; border-top: 1px solid var(--border); margin: 2.2em 0; }
.markdown input[type="checkbox"] { accent-color: var(--accent); }
/* plain file / binary views */
pre.plain { background: var(--code-bg); border: 1px solid var(--border); border-radius: var(--r-card); padding: 14px 16px; overflow-x: auto; font: 12.5px/1.6 var(--mono); color: #c6cbd3; white-space: pre-wrap; overflow-wrap: anywhere; max-width: 900px; }
#content.markdown { min-width: 0; } /* let long unbreakable lines wrap, not blow out the column */
.filecard { margin-top: 15vh; text-align: center; color: var(--text-dim); }
.filecard .name { font-size: 1.2em; color: var(--text); margin-bottom: .3em; }
.filecard .btn { margin-top: 14px; }