Files
astrolabe/src/app/components/SnippetLibrary.module.css
T

157 lines
3.3 KiB
CSS

.library {
display: flex;
flex-direction: column;
height: 100%;
}
.createNew {
flex: 0 0 auto;
margin: var(--space-4);
height: 40px;
padding: 0 var(--space-5);
border: var(--border-width) solid transparent;
border-radius: var(--radius);
background: var(--accent);
color: var(--accent-contrast);
font: inherit;
font-weight: 600;
cursor: pointer;
text-align: center;
transition: background var(--dur-fast) var(--ease);
}
.createNew:hover {
background: var(--accent-hover);
}
.list {
list-style: none;
margin: 0;
padding: 0;
flex: 1 1 auto;
min-height: 0;
overflow: auto;
border-top: var(--border-width) solid var(--border);
}
.empty {
color: var(--text-secondary);
font-size: 13px;
padding: var(--space-5) var(--space-4);
}
.item {
display: flex;
align-items: stretch;
gap: var(--space-3);
padding: 0 var(--space-4);
border-left: 2px solid transparent;
transition: background var(--dur-fast) var(--ease);
}
.item + .item {
border-top: var(--border-width) solid var(--border);
}
.item:hover {
background: var(--layer-01);
}
.active {
background: var(--layer-01);
border-left-color: var(--accent);
}
.itemMain {
flex: 1 1 auto;
min-width: 0;
display: flex;
flex-direction: column;
justify-content: center;
gap: var(--space-1);
/* A real <button> for keyboard selection — strip the native chrome and let
the row's own padding live here so the click target fills the row height. */
appearance: none;
border: none;
background: none;
padding: var(--space-3) 0;
font: inherit;
color: inherit;
text-align: left;
cursor: pointer;
}
.name {
display: block;
max-width: 100%;
font-size: 13px;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Secondary metadata line (spec §02): status indicator · relative date · size. */
.sub {
display: flex;
align-items: center;
gap: var(--space-2);
}
/* Fixed-width leading slot for the status indicator. Always present (even when a
snippet is published and shows no dot) so the date never shifts and rows stay
aligned with one another. */
.indicator {
flex: 0 0 auto;
width: 6px;
height: 6px;
}
/* Unpublished-draft indicator (spec §02 status; arch/10 §6 + council). The accent
hue — not a warning colour, since unpublished work is a normal state — and the
meaning rides on presence/absence + the accessible label, never colour alone. */
.draftDot {
/* display:block so the 6px box applies — an inline span with no text content
would ignore width/height and collapse to nothing. */
display: block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent);
}
.date {
min-width: 0;
font-size: 11px;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.delete {
flex: 0 0 auto;
align-self: center;
display: flex;
align-items: center;
justify-content: center;
border: none;
background: none;
color: var(--text-secondary);
cursor: pointer;
font-size: 12px;
padding: var(--space-1);
border-radius: var(--radius);
opacity: 0;
transition: opacity var(--dur-fast) var(--ease);
}
.item:hover .delete,
.delete:focus-visible {
opacity: 1;
}
.delete:hover {
color: var(--support-error);
}