philemonchiro_obsidian-note.../styles.css
Philemon Chiro 83a09fec59 v0.2.2: light/dark theme polish across all surfaces
Single light-theme override block in styles.css covering:
- Cards (border, hover lift), card hover-action buttons, tag chips
- Active filter chip, sort/archive/density toolbar buttons
- Bulk-action floating bar, capture action buttons + Discard button
- Modal action buttons on uncolored notes

New theme-agnostic colored-surface treatment:
- Capture wrap gets has-pick-color when a color is chosen; title,
  body, placeholders, action icons and Discard button all flip
  to white so they remain legible against the dark color palette
- Card hover-action buttons on colored cards now have a dark
  translucent backdrop instead of just floating white icons
- Backlinks badge readability rules for both colored and light states

Wall view:
- New 'theme' wall background that uses Obsidian's
  --background-primary and --background-modifier-border for full
  theme adaptivity; this is the new default
- Light-theme variants for the dark-only walls (slate, blueprint,
  chalkboard, cork) so picking them in light mode doesn't crash
  a dark wall into a light card surface
- Wall card shadows lighter in light mode

Modal preview:
- Inherits the note color: paints the modal background, makes
  inner content transparent, lighter tag chips and code-block
  backgrounds for contrast
- Title, action buttons, and edit-mode textarea all forced to
  light colors when the modal has a note color
- Restored Obsidian's .modal-bg dim backdrop (was being set
  transparent, removing the dim overlay)
- Hidden Obsidian's built-in × close (it overlapped the action row)

Capture box:
- Auto-saves on focus loss with a 200ms grace window so the color
  popup doesn't trigger a premature save
- Title input no longer triggers save on Enter; plain Enter inserts
  a newline; ⌘/Ctrl + Enter saves explicitly
- Discard button next to Save
- Save button styled as mod-cta primary

Lint:
- Discard tooltip lowercased to satisfy ui/sentence-case
- document.activeElement → activeDocument.activeElement for
  popout-window compatibility (obsidianmd/prefer-active-doc)
2026-05-02 09:31:27 +02:00

1955 lines
45 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.

/* ========== root ========== */
.keep-cards-root {
padding: 0 !important;
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
}
/* ========== header ========== */
.keep-cards-header {
display: flex;
flex-direction: column;
gap: 14px;
flex-shrink: 0;
background: var(--background-primary);
padding: 12px 16px 12px;
border-bottom: 1px solid var(--background-modifier-border);
}
.keep-cards-header-top {
display: flex;
gap: 12px;
align-items: center;
}
.keep-cards-header-capture {
display: flex;
justify-content: center;
}
/* search */
.keep-cards-search-wrap {
flex: 1;
display: flex;
align-items: center;
border-radius: 8px;
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
overflow: hidden;
height: 36px;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.theme-light .keep-cards-search-wrap {
background: #fff;
border-color: rgba(0, 0, 0, 0.12);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}
.keep-cards-search-wrap:focus-within {
border-color: var(--text-accent);
}
.keep-cards-search-icon {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 10px 0 12px;
color: var(--text-faint);
}
.keep-cards-search-icon svg,
.keep-cards-search-icon .svg-icon {
width: 15px;
height: 15px;
}
.keep-cards-search {
flex: 1;
padding: 0 12px 0 0;
border: none;
background: transparent;
color: var(--text-normal);
font-size: 13px;
height: 100%;
outline: none;
}
/* sort button */
.keep-cards-sort-btn {
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
color: var(--text-muted);
width: 36px;
height: 36px;
border-radius: 8px;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
padding: 0;
transition: background 0.12s ease, color 0.12s ease;
}
.theme-light .keep-cards-sort-btn,
.theme-light .keep-cards-toolbar {
background: #fff;
border-color: rgba(0, 0, 0, 0.14);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}
.keep-cards-sort-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.keep-cards-sort-btn.is-active {
background: var(--background-modifier-hover);
color: var(--text-accent);
border-color: var(--text-accent);
}
/* active filter chip */
.keep-cards-active-filter {
display: inline-flex;
align-items: center;
gap: 2px;
padding: 0 4px 0 12px;
height: 28px;
background: var(--background-modifier-hover);
border: 1px solid var(--background-modifier-border);
border-radius: 14px;
color: var(--text-normal);
font-size: 12px;
flex-shrink: 0;
}
.keep-cards-active-filter-label {
white-space: nowrap;
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
}
.keep-cards-active-filter-x {
background: transparent;
border: none;
color: var(--text-muted);
width: 20px;
height: 20px;
border-radius: 50%;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
margin-left: 2px;
}
.keep-cards-active-filter-x:hover {
background: var(--background-modifier-active-hover, var(--background-modifier-border));
color: var(--text-normal);
}
.keep-cards-active-filter-x svg,
.keep-cards-active-filter-x .svg-icon {
width: 12px;
height: 12px;
}
.keep-cards-sort-btn svg,
.keep-cards-sort-btn .svg-icon {
width: 16px;
height: 16px;
}
/* toolbar — segmented control */
.keep-cards-toolbar {
display: inline-flex;
align-items: stretch;
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
overflow: hidden;
background: var(--background-secondary);
height: 36px;
flex-shrink: 0;
}
.keep-cards-tb-btn {
background: transparent;
border: none;
color: var(--text-muted);
width: 38px;
height: 100%;
border-radius: 0;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
border-right: 1px solid var(--background-modifier-border);
transition: background 0.12s ease, color 0.12s ease;
}
.keep-cards-tb-btn:last-child {
border-right: none;
}
.keep-cards-tb-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.keep-cards-tb-btn.is-active {
background: var(--background-modifier-hover);
color: var(--text-accent);
}
.keep-cards-tb-btn svg,
.keep-cards-tb-btn .svg-icon {
width: 16px;
height: 16px;
}
/* capture */
.keep-cards-capture-wrap {
width: 100%;
max-width: 600px;
display: flex;
flex-direction: column;
border-radius: 10px;
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
overflow: hidden;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.keep-cards-capture-wrap:focus-within {
border-color: var(--background-modifier-border-hover, var(--background-modifier-border));
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.25);
}
.theme-light .keep-cards-capture-wrap {
background: #fff;
border-color: rgba(0, 0, 0, 0.14);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
}
.theme-light .keep-cards-capture-wrap:focus-within {
border-color: rgba(0, 0, 0, 0.22);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
}
/* Title field — collapsed by default, slides in when capture is focused */
.keep-cards-capture-title {
display: none;
padding: 14px 18px 10px !important;
border: none !important;
background: transparent !important;
border-radius: 0 !important;
box-shadow: none !important;
color: var(--text-normal) !important;
font-size: 20px !important;
font-weight: 500 !important;
font-family: inherit !important;
outline: none !important;
width: 100%;
box-sizing: border-box;
line-height: 1.4 !important;
height: auto !important;
min-height: 0 !important;
}
.keep-cards-capture-title::placeholder {
font-weight: 500 !important;
font-size: 20px !important;
color: var(--text-faint) !important;
}
/* Divider between title and body, only when both visible */
.keep-cards-capture-wrap:focus-within .keep-cards-capture-title {
border-bottom: 1px solid var(--background-modifier-border) !important;
}
.keep-cards-capture-title::placeholder {
color: var(--text-faint);
}
.keep-cards-capture-wrap:focus-within .keep-cards-capture-title {
display: block;
}
.keep-cards-capture {
width: 100%;
padding: 12px 18px;
border: none !important;
background: transparent !important;
border-radius: 0 !important;
box-shadow: none !important;
color: var(--text-normal);
font-size: 14px;
resize: none;
font-family: inherit;
line-height: 1.55;
outline: none;
box-sizing: border-box;
}
/* When the capture is expanded, the body has at least 3 visible lines */
.keep-cards-capture-wrap:focus-within .keep-cards-capture {
min-height: calc(3 * 1.55em + 24px);
}
.keep-cards-capture::placeholder {
color: var(--text-faint);
}
/* Action row — collapsed by default, expands on focus */
.keep-cards-capture-actions {
display: none;
align-items: center;
gap: 4px;
padding: 4px 6px 6px;
}
.keep-cards-capture-wrap:focus-within .keep-cards-capture-actions {
display: flex;
}
.keep-cards-capture-actions-spacer {
flex: 1;
}
.keep-cards-capture-action {
background: transparent;
border: none;
width: 32px;
height: 32px;
border-radius: 50%;
color: var(--text-muted);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
transition: background 0.12s ease, color 0.12s ease;
}
.keep-cards-capture-action:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.keep-cards-capture-action.is-active {
background: var(--background-modifier-hover);
color: var(--text-accent);
}
.keep-cards-capture-action svg,
.keep-cards-capture-action .svg-icon {
width: 16px;
height: 16px;
}
.keep-cards-capture-close {
padding: 9px 22px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
border-radius: 8px;
font-family: inherit;
letter-spacing: 0.01em;
}
.keep-cards-capture-discard {
background: transparent;
border: none;
padding: 9px 16px;
color: var(--text-muted);
font-size: 14px;
font-weight: 500;
cursor: pointer;
border-radius: 8px;
font-family: inherit;
margin-right: 4px;
}
.keep-cards-capture-discard:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
/* shared icon sizing across buttons */
.keep-card-action svg,
.keep-card-action .svg-icon,
.keep-cards-bulk-btn svg,
.keep-cards-bulk-btn .svg-icon,
.keep-modal-action-btn svg,
.keep-modal-action-btn .svg-icon,
.keep-sidebar-icon svg,
.keep-sidebar-icon .svg-icon,
.keep-sidebar-edit svg,
.keep-sidebar-edit .svg-icon,
.keep-sidebar-more svg,
.keep-sidebar-more .svg-icon,
.keep-card-backlinks-icon svg,
.keep-card-backlinks-icon .svg-icon,
.keep-empty-icon svg,
.keep-empty-icon .svg-icon {
width: 16px;
height: 16px;
}
.keep-empty-icon svg,
.keep-empty-icon .svg-icon {
width: 32px;
height: 32px;
}
/* ========== body row ========== */
.keep-cards-body {
display: flex;
gap: 16px;
align-items: stretch;
flex: 1;
min-height: 0;
overflow: hidden;
padding: 12px 16px 16px;
position: relative;
}
/* ========== sidebar ========== */
.keep-cards-sidebar {
width: 220px;
flex-shrink: 0;
display: flex;
flex-direction: column;
gap: 2px;
padding-top: 4px;
padding-bottom: 12px;
overflow-y: auto;
overflow-x: hidden;
align-self: stretch;
min-height: 0;
}
.keep-sidebar-item {
display: flex;
align-items: center;
gap: 10px;
padding: 8px 12px;
border-radius: 0 24px 24px 0;
cursor: pointer;
color: var(--text-muted);
font-size: 13px;
user-select: none;
position: relative;
}
.keep-sidebar-item:hover {
background: var(--background-modifier-hover);
}
.keep-sidebar-item.is-active {
background: var(--background-modifier-active-hover, var(--background-modifier-hover));
color: var(--text-normal);
font-weight: 600;
}
.keep-sidebar-item.is-drop-target {
outline: 2px dashed var(--text-accent);
outline-offset: -2px;
}
.keep-sidebar-icon {
display: inline-flex;
width: 16px;
height: 16px;
}
.keep-sidebar-color-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
}
.keep-sidebar-label {
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.keep-sidebar-more {
background: transparent;
border: none;
color: var(--text-muted);
padding: 0;
width: 22px;
height: 22px;
border-radius: 4px;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
opacity: 0;
}
.keep-sidebar-item:hover .keep-sidebar-more {
opacity: 1;
}
.keep-sidebar-more:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.keep-sidebar-divider {
height: 1px;
background: var(--background-modifier-border);
margin: 8px 0;
}
.keep-sidebar-heading {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-faint);
padding: 4px 12px;
display: flex;
align-items: center;
justify-content: space-between;
}
.keep-sidebar-edit {
background: transparent;
border: none;
color: var(--text-faint);
padding: 0;
width: 18px;
height: 18px;
border-radius: 4px;
cursor: pointer;
}
.keep-sidebar-edit:hover {
color: var(--text-muted);
background: var(--background-modifier-hover);
}
/* ========== grid + sections ========== */
.keep-cards-grid {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 24px;
overflow-y: auto;
align-self: stretch;
min-height: 0;
padding-bottom: 12px;
}
.keep-section {
display: flex;
flex-direction: column;
gap: 10px;
}
.keep-section-header {
font-size: 11px;
letter-spacing: 0.08em;
color: var(--text-faint);
text-transform: uppercase;
padding-left: 4px;
}
.keep-section-cols {
display: flex;
gap: 16px;
align-items: flex-start;
}
.keep-col {
flex: 1;
display: flex;
flex-direction: column;
gap: 16px;
min-width: 0;
}
/* ========== card ========== */
.keep-card {
position: relative;
border-radius: 10px;
border: 1px solid var(--background-modifier-border);
background: var(--background-secondary);
cursor: pointer;
transition: box-shadow 0.15s ease, transform 0.15s ease, border-color 0.15s ease;
overflow: hidden;
display: flex;
flex-direction: column;
}
.keep-card:hover {
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
}
.keep-card.is-focused {
outline: 2px solid var(--text-accent);
outline-offset: 2px;
}
.keep-card.is-selected {
outline: 2px solid var(--text-accent);
outline-offset: 2px;
}
.keep-card.is-dragging {
opacity: 0.4;
}
.keep-card.is-drop-target {
border-color: var(--text-accent);
box-shadow: 0 0 0 2px var(--text-accent);
}
.keep-card--pinned {
border-color: var(--text-accent);
}
.keep-card-checkbox {
position: absolute;
top: 8px;
left: 8px;
z-index: 2;
opacity: 0;
margin: 0;
cursor: pointer;
}
.keep-card:hover .keep-card-checkbox,
.keep-card.is-selected .keep-card-checkbox {
opacity: 1;
}
.keep-card-image {
width: 100%;
max-height: 220px;
object-fit: cover;
display: block;
}
.keep-card-title {
font-weight: 600;
font-size: 15px;
padding: 12px 14px 4px;
color: var(--text-normal);
word-wrap: break-word;
}
.keep-card-body {
padding: 0 14px 8px;
font-size: 13px;
color: var(--text-muted);
line-height: 1.5;
word-wrap: break-word;
overflow: hidden;
}
.keep-card-body p {
margin: 0 0 8px;
}
.keep-card-body p:last-child { margin-bottom: 0; }
.keep-card-body ul,
.keep-card-body ol {
margin: 0 0 8px;
padding-left: 20px;
}
.keep-card-body h1,
.keep-card-body h2,
.keep-card-body h3,
.keep-card-body h4 {
margin: 8px 0 4px;
font-size: 14px;
color: var(--text-normal);
}
.keep-card-body code {
font-size: 12px;
}
.keep-card-body pre {
font-size: 12px;
overflow-x: auto;
max-height: 120px;
}
.keep-card-body img {
max-width: 100%;
height: auto;
}
.keep-card-body a.tag {
cursor: pointer;
}
.keep-card-body input[type="checkbox"] {
cursor: pointer;
}
.keep-card-tags {
margin-top: 4px;
padding: 0 14px 8px;
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.keep-card-tag {
font-size: 11px;
padding: 2px 8px;
border-radius: 12px;
background: var(--background-modifier-hover);
color: var(--text-muted);
cursor: pointer;
}
.keep-card-tag:hover {
background: var(--background-modifier-active-hover, var(--background-modifier-hover));
color: var(--text-normal);
}
.keep-card-meta {
padding: 0 14px;
display: flex;
gap: 8px;
font-size: 11px;
color: var(--text-faint);
align-items: center;
min-height: 0;
}
.keep-card-backlinks {
display: inline-flex;
align-items: center;
gap: 4px;
}
.keep-card-backlinks-icon {
display: inline-flex;
width: 12px;
height: 12px;
}
.keep-card-actions {
display: flex;
gap: 2px;
padding: 4px 6px 6px;
opacity: 0;
transition: opacity 0.12s ease;
justify-content: flex-start;
}
.keep-card:hover .keep-card-actions,
.keep-card.is-focused .keep-card-actions {
opacity: 1;
}
.keep-card-action {
background: transparent;
border: none;
color: var(--text-muted);
width: 28px;
height: 28px;
border-radius: 50%;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
}
.keep-card-action:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
/* ===== Colored cards ===== always force light text since the COLORS palette
is dark-tone (designed to read against white text in either theme). */
.keep-card.has-card-color {
color: rgba(255, 255, 255, 0.95);
border-color: transparent;
}
.keep-card.has-card-color .keep-card-title {
color: #fff;
}
.keep-card.has-card-color .keep-card-body,
.keep-card.has-card-color .keep-card-body p,
.keep-card.has-card-color .keep-card-body li,
.keep-card.has-card-color .keep-card-body h1,
.keep-card.has-card-color .keep-card-body h2,
.keep-card.has-card-color .keep-card-body h3,
.keep-card.has-card-color .keep-card-body h4 {
color: rgba(255, 255, 255, 0.88);
}
.keep-card.has-card-color .keep-card-body a {
color: rgba(255, 255, 255, 0.92);
text-decoration: underline;
text-decoration-color: rgba(255, 255, 255, 0.4);
}
.keep-card.has-card-color .keep-card-body code {
background: rgba(0, 0, 0, 0.28);
color: rgba(255, 255, 255, 0.95);
}
.keep-card.has-card-color .keep-card-body pre {
background: rgba(0, 0, 0, 0.28);
color: rgba(255, 255, 255, 0.95);
}
.keep-card.has-card-color .keep-card-body blockquote {
border-left-color: rgba(255, 255, 255, 0.35);
color: rgba(255, 255, 255, 0.78);
}
.keep-card.has-card-color .keep-card-tag {
background: rgba(0, 0, 0, 0.28);
color: rgba(255, 255, 255, 0.92);
}
.keep-card.has-card-color .keep-card-tag:hover {
background: rgba(0, 0, 0, 0.42);
color: #fff;
}
.keep-card.has-card-color .keep-card-meta,
.keep-card.has-card-color .keep-card-backlinks {
color: rgba(255, 255, 255, 0.62);
}
.keep-card.has-card-color .keep-card-action {
background: rgba(0, 0, 0, 0.22);
color: rgba(255, 255, 255, 0.88);
}
.keep-card.has-card-color .keep-card-action:hover {
background: rgba(0, 0, 0, 0.42);
color: #fff;
}
.keep-card.has-card-color .keep-shimmer {
background: linear-gradient(
90deg,
rgba(255, 255, 255, 0.08) 0%,
rgba(255, 255, 255, 0.18) 50%,
rgba(255, 255, 255, 0.08) 100%
);
}
/* ========== inline editor ========== */
.keep-card-editor {
width: 100%;
margin: 0;
padding: 0 14px 8px;
border: none;
background: transparent;
color: var(--text-normal);
font-family: inherit;
font-size: 13px;
line-height: 1.5;
resize: none;
outline: none;
min-height: 60px;
box-sizing: border-box;
}
.keep-card.is-editing-card {
cursor: default;
outline: 2px solid var(--text-accent);
outline-offset: 2px;
}
/* ========== color picker ========== */
.keep-color-picker {
position: absolute;
bottom: 44px;
left: 6px;
display: grid;
grid-template-columns: repeat(6, 1fr);
gap: 6px;
padding: 8px;
border-radius: 10px;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
z-index: 5;
}
.keep-color-swatch {
width: 22px;
height: 22px;
border-radius: 50%;
cursor: pointer;
border: 1px solid var(--background-modifier-border);
}
.keep-color-swatch:hover {
outline: 2px solid var(--text-accent);
outline-offset: 1px;
}
.keep-color-swatch--default {
background:
linear-gradient(45deg, transparent 45%, var(--text-muted) 45%, var(--text-muted) 55%, transparent 55%),
var(--background-primary);
}
/* ========== skeleton shimmer ========== */
.keep-card.is-skeleton .keep-card-body {
display: flex;
flex-direction: column;
gap: 8px;
padding: 6px 14px 14px;
}
.keep-shimmer {
height: 10px;
border-radius: 4px;
background: linear-gradient(
90deg,
var(--background-modifier-border) 0%,
var(--background-modifier-hover) 50%,
var(--background-modifier-border) 100%
);
background-size: 200% 100%;
animation: keep-shimmer 1.6s infinite;
}
.keep-shimmer:nth-child(2) { width: 80%; }
.keep-shimmer:nth-child(3) { width: 60%; }
@keyframes keep-shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
/* ========== empty state ========== */
.keep-cards-empty {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 80px 16px;
color: var(--text-muted);
text-align: center;
gap: 8px;
}
.keep-empty-icon {
display: inline-flex;
width: 48px;
height: 48px;
color: var(--text-faint);
margin-bottom: 8px;
}
.keep-empty-title {
font-size: 16px;
color: var(--text-normal);
font-weight: 600;
}
.keep-empty-sub {
font-size: 13px;
}
/* ========== bulk actions bar ========== */
.keep-cards-bulk {
position: fixed;
bottom: 28px;
left: 50%;
transform: translateX(-50%);
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 36px;
padding: 8px 14px 8px 18px;
display: flex;
align-items: center;
gap: 6px;
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.45);
z-index: 100;
}
.keep-cards-bulk-count {
padding: 0 10px 0 0;
color: var(--text-normal);
font-size: 14px;
font-weight: 600;
margin-right: 4px;
border-right: 1px solid var(--background-modifier-border);
}
.keep-cards-bulk-btn {
background: transparent;
border: none;
width: 40px;
height: 40px;
border-radius: 50%;
color: var(--text-normal);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
transition: background 0.12s ease, color 0.12s ease;
}
.keep-cards-bulk-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-accent);
}
.keep-cards-bulk-btn svg,
.keep-cards-bulk-btn .svg-icon {
width: 20px !important;
height: 20px !important;
}
/* ========== undo toast ========== */
.keep-undo-toast {
position: fixed;
bottom: 24px;
right: 24px;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
padding: 10px 14px;
display: flex;
align-items: center;
gap: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
color: var(--text-normal);
z-index: 100;
font-size: 13px;
}
.keep-undo-btn {
background: transparent;
border: none;
color: var(--text-accent);
cursor: pointer;
font-size: 13px;
font-weight: 600;
padding: 0;
}
/* ========== density: list ========== */
.density-list .keep-section-cols {
flex-direction: column;
gap: 8px;
}
.density-list .keep-col {
flex-direction: column;
gap: 8px;
}
.density-list .keep-card {
flex-direction: row;
align-items: stretch;
max-height: 120px;
}
.density-list .keep-card-image {
width: 120px;
height: auto;
max-height: 120px;
flex-shrink: 0;
}
.density-list .keep-card-body {
-webkit-line-clamp: 3;
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
}
.density-list .keep-card-actions {
flex-direction: column;
padding: 4px;
}
/* ========== density: compact ========== */
.density-compact .keep-card-title {
font-size: 13px;
padding: 8px 10px 2px;
}
.density-compact .keep-card-body {
font-size: 12px;
padding: 0 10px 6px;
}
.density-compact .keep-card-tags {
padding: 0 10px 6px;
}
.density-compact .keep-card-image {
max-height: 140px;
}
/* ========== reduced motion ========== */
@media (prefers-reduced-motion: reduce) {
.keep-card,
.keep-card-actions,
.keep-shimmer {
transition: none !important;
animation: none !important;
}
}
/* ========== note preview modal ========== */
.keep-note-modal {
width: min(900px, 92vw);
max-height: 88vh;
}
/* Hide Obsidian's built-in close (×) — overlaps the action row, and Esc /
click-outside / the open-in-tab button already cover closing. */
.keep-note-modal .modal-close-button {
display: none;
}
.keep-note-modal .modal-title {
margin-bottom: 8px;
}
/* When the note has a color, paint the modal in it and make the inner content
transparent so the color shows through. Keep .modal-bg (the dim backdrop)
alone so the rest of the UI stays dimmed behind the modal. */
.keep-note-modal.has-note-color .modal-content {
background: transparent !important;
}
.keep-note-modal.has-note-color .keep-modal-md {
color: var(--text-on-accent, var(--text-normal));
}
.keep-note-modal.has-note-color .keep-modal-md pre,
.keep-note-modal.has-note-color .keep-modal-md code {
background: rgba(0, 0, 0, 0.25);
}
.keep-note-modal.has-note-color .keep-modal-meta,
.keep-note-modal.has-note-color .keep-modal-path {
color: rgba(255, 255, 255, 0.6);
border-top-color: rgba(255, 255, 255, 0.15);
}
.keep-note-modal.has-note-color .keep-card-tag {
background: rgba(0, 0, 0, 0.25);
color: rgba(255, 255, 255, 0.85);
}
.keep-note-modal.has-note-color .keep-modal-title {
color: #fff;
}
.keep-note-modal.has-note-color .keep-modal-action-btn {
background: rgba(0, 0, 0, 0.22) !important;
color: rgba(255, 255, 255, 0.92) !important;
border: none !important;
}
.keep-note-modal.has-note-color .keep-modal-action-btn:hover {
background: rgba(0, 0, 0, 0.4) !important;
color: #fff !important;
}
.keep-note-modal.has-note-color .keep-modal-editor {
background: rgba(0, 0, 0, 0.2);
color: #fff;
border-color: rgba(255, 255, 255, 0.18);
}
.keep-note-modal.has-note-color .keep-modal-editor:focus {
border-color: rgba(255, 255, 255, 0.5);
}
.keep-modal-titlerow {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
}
.keep-modal-title {
flex: 1;
font-size: 18px;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: left;
}
.keep-modal-actions {
display: flex;
gap: 2px;
flex-shrink: 0;
}
.keep-modal-action-btn {
background: transparent;
border: none;
color: var(--text-muted);
width: 30px;
height: 30px;
border-radius: 50%;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
}
.keep-modal-action-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
}
.keep-modal-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-bottom: 12px;
}
.keep-modal-body {
max-height: 65vh;
overflow-y: auto;
padding: 4px 4px 8px;
}
.keep-modal-md {
font-size: 14px;
line-height: 1.6;
color: var(--text-normal);
}
.keep-modal-md p { margin: 0 0 12px; }
.keep-modal-md p:last-child { margin-bottom: 0; }
.keep-modal-md h1, .keep-modal-md h2, .keep-modal-md h3 { margin-top: 16px; }
.keep-modal-md ul, .keep-modal-md ol { padding-left: 24px; margin: 0 0 12px; }
.keep-modal-md img { max-width: 100%; border-radius: 6px; }
.keep-modal-md pre { padding: 10px; border-radius: 6px; background: var(--background-secondary); overflow-x: auto; }
.keep-modal-md blockquote { border-left: 3px solid var(--background-modifier-border); padding-left: 12px; margin: 0 0 12px; color: var(--text-muted); }
.keep-modal-meta {
display: flex;
gap: 16px;
align-items: center;
margin-top: 16px;
padding-top: 12px;
border-top: 1px solid var(--background-modifier-border);
font-size: 11px;
color: var(--text-faint);
}
.keep-modal-path {
font-family: var(--font-monospace);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
flex: 1;
}
.keep-modal-editor {
width: 100%;
min-height: 60vh;
padding: 14px;
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
background: var(--background-primary);
color: var(--text-normal);
font-family: inherit;
font-size: 14px;
line-height: 1.6;
resize: vertical;
outline: none;
box-sizing: border-box;
}
.keep-modal-editor:focus {
border-color: var(--text-accent);
}
/* ========== shared modal helpers ========== */
.keep-modal-stack {
display: flex;
flex-direction: column;
gap: 8px;
}
.keep-modal-row {
display: flex;
align-items: center;
gap: 8px;
padding: 4px 0;
}
.keep-modal-spacer {
flex: 1;
}
.keep-modal-input {
width: 100%;
}
.keep-modal-buttons {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 12px;
}
.keep-modal-hint {
font-size: 12px;
color: var(--text-muted);
margin-top: 8px;
}
.keep-modal-color-grid {
display: grid;
grid-template-columns: repeat(6, 1fr);
gap: 8px;
margin-top: 8px;
}
.keep-modal-color-swatch {
width: 32px;
height: 32px;
border-radius: 50%;
cursor: pointer;
border: 1px solid var(--background-modifier-border);
}
.keep-tag-dot {
width: 12px;
height: 12px;
border-radius: 50%;
border: 1px solid var(--background-modifier-border);
flex-shrink: 0;
}
.keep-confirm-message {
margin: 8px 0 4px;
color: var(--text-muted);
}
/* ========== wall view ========== */
.keep-cards-wall-switcher {
display: inline-flex;
align-items: center;
gap: 6px;
height: 36px;
padding: 0 10px 0 14px;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
color: var(--text-normal);
cursor: pointer;
font-size: 13px;
font-family: inherit;
flex-shrink: 0;
max-width: 220px;
}
.keep-cards-wall-switcher:hover {
background: var(--background-modifier-hover);
}
.keep-cards-wall-switcher-name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 160px;
}
.keep-cards-wall-switcher-chev {
display: inline-flex;
align-items: center;
color: var(--text-muted);
}
.keep-cards-wall-switcher-chev svg,
.keep-cards-wall-switcher-chev .svg-icon {
width: 14px;
height: 14px;
}
.keep-cards-grid.is-wall {
position: relative;
background-color: var(--background-secondary);
padding: 16px;
}
/* Backgrounds */
/* Theme (auto): inherits Obsidian's theme. Quietest option.
Adapts to light/dark out of the box. */
.keep-cards-grid.wall-theme {
background-color: var(--background-primary);
background-image:
linear-gradient(var(--background-modifier-border) 1px, transparent 1px),
linear-gradient(90deg, var(--background-modifier-border) 1px, transparent 1px);
background-size: 32px 32px;
background-blend-mode: normal;
opacity: 1;
}
/* Cork: layered dot textures + warm noise */
.keep-cards-grid.wall-cork {
background-color: #8a5f3a;
background-image:
radial-gradient(rgba(255, 240, 220, 0.04) 0.7px, transparent 0.7px),
radial-gradient(rgba(40, 20, 0, 0.18) 1.2px, transparent 1.2px),
radial-gradient(rgba(60, 30, 5, 0.10) 1.6px, transparent 1.6px);
background-size: 5px 5px, 11px 11px, 19px 19px;
background-position: 0 0, 2px 3px, 5px 1px;
}
/* Whiteboard: clean light with crisp grid + a hairline major grid */
.keep-cards-grid.wall-whiteboard {
background-color: #fafaf7;
background-image:
linear-gradient(rgba(0, 0, 0, 0.035) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.035) 1px, transparent 1px),
linear-gradient(rgba(0, 0, 0, 0.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.06) 1px, transparent 1px);
background-size: 24px 24px, 24px 24px, 120px 120px, 120px 120px;
}
/* Slate: deep neutral with subtle grid */
.keep-cards-grid.wall-slate {
background-color: #1f2227;
background-image:
linear-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px),
linear-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
background-size: 24px 24px, 24px 24px, 120px 120px, 120px 120px;
}
/* Paper: warm beige, soft noise */
.keep-cards-grid.wall-paper {
background-color: #fbf6e8;
background-image:
radial-gradient(rgba(102, 70, 30, 0.07) 1px, transparent 1.4px),
radial-gradient(rgba(102, 70, 30, 0.05) 0.8px, transparent 1.2px);
background-size: 14px 14px, 7px 7px;
background-position: 0 0, 3px 4px;
}
/* Graph paper: minor + major grid in a soft blue, white field */
.keep-cards-grid.wall-graph {
background-color: #f6f9ff;
background-image:
linear-gradient(rgba(60, 110, 200, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(60, 110, 200, 0.08) 1px, transparent 1px),
linear-gradient(rgba(60, 110, 200, 0.18) 1px, transparent 1px),
linear-gradient(90deg, rgba(60, 110, 200, 0.18) 1px, transparent 1px);
background-size: 12px 12px, 12px 12px, 60px 60px, 60px 60px;
}
/* Blueprint: dark navy with crisp white grid (architect / maker) */
.keep-cards-grid.wall-blueprint {
background-color: #163a5f;
background-image:
linear-gradient(rgba(255, 255, 255, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.08) 1px, transparent 1px),
linear-gradient(rgba(255, 255, 255, 0.18) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.18) 1px, transparent 1px);
background-size: 14px 14px, 14px 14px, 70px 70px, 70px 70px;
}
/* Linen: cross-hatched fabric weave */
.keep-cards-grid.wall-linen {
background-color: #ede4d3;
background-image:
repeating-linear-gradient(45deg, rgba(80, 60, 30, 0.05) 0 1px, transparent 1px 4px),
repeating-linear-gradient(-45deg, rgba(80, 60, 30, 0.05) 0 1px, transparent 1px 4px),
radial-gradient(rgba(80, 60, 30, 0.04) 0.6px, transparent 0.8px);
background-size: auto, auto, 8px 8px;
}
/* Chalkboard: dark green with chalk dust + faint major grid */
.keep-cards-grid.wall-chalkboard {
background-color: #2d3a2d;
background-image:
radial-gradient(rgba(255, 255, 255, 0.025) 0.8px, transparent 1.2px),
radial-gradient(rgba(255, 255, 255, 0.015) 0.5px, transparent 1px),
linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
background-size: 6px 6px, 3px 3px, 80px 80px, 80px 80px;
background-position: 0 0, 2px 1px, 0 0, 0 0;
}
/* Cards on a wall: paper-feeling stickies in the masonry flow */
.keep-cards-grid.is-wall .keep-card {
box-shadow: 0 6px 14px rgba(0, 0, 0, 0.35);
transition: box-shadow 0.18s ease, transform 0.18s ease;
transform-origin: 50% 50%;
overflow: visible;
}
/* 3D pushpin on pinned wall cards */
.keep-cards-grid.is-wall .keep-card--pinned {
border-color: transparent;
}
.keep-cards-grid.is-wall .keep-card--pinned::before {
content: '';
position: absolute;
top: -10px;
right: 18px;
width: 18px;
height: 18px;
border-radius: 50%;
background:
radial-gradient(circle at 32% 30%, rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 35%),
radial-gradient(circle at 50% 50%, #ff5a5f 0%, #b1232a 70%, #6e1118 100%);
box-shadow:
0 4px 6px rgba(0, 0, 0, 0.45),
inset -1px -2px 3px rgba(0, 0, 0, 0.35);
z-index: 3;
pointer-events: none;
}
.keep-cards-grid.is-wall .keep-card--pinned::after {
content: '';
position: absolute;
top: 5px;
right: 23px;
width: 6px;
height: 8px;
border-radius: 50%;
background: rgba(0, 0, 0, 0.28);
filter: blur(3px);
z-index: 2;
pointer-events: none;
}
/* On lighter backgrounds: smaller, softer pin shadow */
.keep-cards-grid.wall-whiteboard .keep-card--pinned::after,
.keep-cards-grid.wall-paper .keep-card--pinned::after,
.keep-cards-grid.wall-graph .keep-card--pinned::after,
.keep-cards-grid.wall-linen .keep-card--pinned::after {
background: rgba(0, 0, 0, 0.18);
filter: blur(2px);
}
.keep-cards-grid.is-wall .keep-card:hover {
box-shadow: 0 10px 22px rgba(0, 0, 0, 0.42);
transform: rotate(0deg) translateY(-2px) !important;
z-index: 5;
}
/* ===== Light-theme overrides for dark-only backgrounds =====
Slate, blueprint, chalkboard, cork are designed for dark themes.
Lighten them in light mode so the wall doesn't crash into the rest of the UI. */
.theme-light .keep-cards-grid.wall-slate {
background-color: #c9ccd1;
background-image:
linear-gradient(rgba(0, 0, 0, 0.05) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, transparent 1px),
linear-gradient(rgba(0, 0, 0, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.08) 1px, transparent 1px);
}
.theme-light .keep-cards-grid.wall-blueprint {
background-color: #4d80b8;
background-image:
linear-gradient(rgba(255, 255, 255, 0.18) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.18) 1px, transparent 1px),
linear-gradient(rgba(255, 255, 255, 0.32) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.32) 1px, transparent 1px);
}
.theme-light .keep-cards-grid.wall-chalkboard {
background-color: #6c8a6c;
background-image:
radial-gradient(rgba(255, 255, 255, 0.06) 0.8px, transparent 1.2px),
radial-gradient(rgba(255, 255, 255, 0.04) 0.5px, transparent 1px),
linear-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
}
.theme-light .keep-cards-grid.wall-cork {
background-color: #c9a073;
background-image:
radial-gradient(rgba(255, 240, 220, 0.10) 0.7px, transparent 0.7px),
radial-gradient(rgba(80, 50, 20, 0.18) 1.2px, transparent 1.2px),
radial-gradient(rgba(80, 50, 20, 0.10) 1.6px, transparent 1.6px);
}
/* Light wall backgrounds: lighter shadow against the lighter surface */
.keep-cards-grid.wall-whiteboard .keep-card,
.keep-cards-grid.wall-paper .keep-card,
.keep-cards-grid.wall-graph .keep-card,
.keep-cards-grid.wall-linen .keep-card {
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.18);
}
.keep-cards-grid.wall-whiteboard .keep-card:hover,
.keep-cards-grid.wall-paper .keep-card:hover,
.keep-cards-grid.wall-graph .keep-card:hover,
.keep-cards-grid.wall-linen .keep-card:hover {
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.24);
}
/* Empty state */
.keep-wall-empty {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 10px;
text-align: center;
pointer-events: none;
}
.keep-wall-empty-title {
font-size: 18px;
font-weight: 600;
color: var(--text-normal);
}
.keep-wall-empty-sub {
font-size: 13px;
color: var(--text-muted);
max-width: 420px;
line-height: 1.5;
}
.keep-wall-empty-actions {
display: flex;
gap: 8px;
margin-top: 8px;
pointer-events: auto;
}
/* Floating action buttons (bottom-right of wall — anchored to body, not viewport) */
.keep-wall-fab {
position: absolute;
right: 28px;
bottom: 28px;
display: flex;
flex-direction: column;
gap: 8px;
z-index: 5;
pointer-events: auto;
}
.keep-wall-fab-btn {
width: 40px;
height: 40px;
border-radius: 50%;
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
color: var(--text-muted);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0;
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
transition: background 0.12s ease, color 0.12s ease, transform 0.1s ease;
}
.keep-wall-fab-btn:hover {
background: var(--background-modifier-hover);
color: var(--text-normal);
transform: translateY(-1px);
}
.keep-wall-fab-btn svg,
.keep-wall-fab-btn .svg-icon {
width: 18px;
height: 18px;
}
.keep-wall-fab-add {
background: var(--interactive-accent);
color: var(--text-on-accent);
border-color: transparent;
width: 48px;
height: 48px;
}
.keep-wall-fab-add svg,
.keep-wall-fab-add .svg-icon {
width: 22px;
height: 22px;
}
.keep-wall-fab-add:hover {
background: var(--interactive-accent-hover);
color: var(--text-on-accent);
}
/* ========== batch sentinel ========== */
.keep-batch-sentinel {
height: 1px;
width: 100%;
pointer-events: none;
}
/* ========== narrow widths ========== */
@media (max-width: 700px) {
.keep-cards-sidebar { display: none; }
.keep-cards-search { width: 160px; }
}
/* ============================================================
* LIGHT-THEME OVERRIDES
*
* Obsidian's modifier-hover and modifier-border variables are quite
* subtle in the default light theme — almost invisible on neutral
* surfaces. The rules below give specific surfaces a stronger
* contrast in light mode while leaving dark mode untouched.
* ============================================================ */
/* Cards — slightly stronger border + softer shadow in light mode */
.theme-light .keep-card {
border-color: rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}
.theme-light .keep-card:hover {
border-color: rgba(0, 0, 0, 0.18);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
}
.theme-light .keep-card.is-selected,
.theme-light .keep-card.is-focused {
outline-color: var(--text-accent);
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.16);
}
/* Card hover-action buttons — beefier hover background in light mode */
.theme-light .keep-card-action {
color: var(--text-muted);
}
.theme-light .keep-card-action:hover {
background: rgba(0, 0, 0, 0.08);
color: var(--text-normal);
}
/* Card tag chips — uses modifier-hover by default; bump contrast */
.theme-light .keep-card-tag {
background: rgba(0, 0, 0, 0.06);
color: var(--text-muted);
}
.theme-light .keep-card-tag:hover {
background: rgba(0, 0, 0, 0.12);
color: var(--text-normal);
}
/* Card checkbox visible in light too */
.theme-light .keep-card-checkbox {
accent-color: var(--text-accent);
}
/* Active filter chip — barely visible against light theme; punch it up */
.theme-light .keep-cards-active-filter {
background: #fff;
border-color: rgba(0, 0, 0, 0.16);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
color: var(--text-normal);
}
.theme-light .keep-cards-active-filter-x:hover {
background: rgba(0, 0, 0, 0.08);
color: var(--text-normal);
}
/* Density toolbar segmented buttons — currently inherit toolbar bg */
.theme-light .keep-cards-tb-btn {
color: var(--text-muted);
}
.theme-light .keep-cards-tb-btn:hover {
background: rgba(0, 0, 0, 0.06);
color: var(--text-normal);
}
.theme-light .keep-cards-tb-btn.is-active {
background: rgba(0, 0, 0, 0.08);
color: var(--text-accent);
}
/* Sort + archive single buttons */
.theme-light .keep-cards-sort-btn {
color: var(--text-muted);
}
.theme-light .keep-cards-sort-btn:hover {
background: rgba(0, 0, 0, 0.06);
color: var(--text-normal);
}
.theme-light .keep-cards-sort-btn.is-active {
background: rgba(0, 0, 0, 0.08);
color: var(--text-accent);
border-color: var(--text-accent);
}
/* Bulk action floating bar — already styled, but light theme needs more shadow */
.theme-light .keep-cards-bulk {
background: #fff;
border-color: rgba(0, 0, 0, 0.14);
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.18);
}
.theme-light .keep-cards-bulk-btn {
color: var(--text-normal);
}
.theme-light .keep-cards-bulk-btn:hover {
background: rgba(0, 0, 0, 0.08);
color: var(--text-accent);
}
/* Capture action row inside the wrap */
.theme-light .keep-cards-capture-action {
color: var(--text-muted);
}
.theme-light .keep-cards-capture-action:hover {
background: rgba(0, 0, 0, 0.08);
color: var(--text-normal);
}
.theme-light .keep-cards-capture-action.is-active {
background: rgba(0, 0, 0, 0.1);
color: var(--text-accent);
}
.theme-light .keep-cards-capture-discard:hover {
background: rgba(0, 0, 0, 0.08);
color: var(--text-normal);
}
/* Empty state text */
.theme-light .keep-cards-empty {
color: var(--text-muted);
}
/* Note-preview modal (non-colored) action buttons */
.theme-light .keep-note-modal:not(.has-note-color) .keep-modal-action-btn {
color: var(--text-muted);
}
.theme-light .keep-note-modal:not(.has-note-color) .keep-modal-action-btn:hover {
background: rgba(0, 0, 0, 0.07);
color: var(--text-normal);
}
/* Sidebar items would inherit muted; the wall switcher dropdown menu is
theme-aware via Obsidian's own classes, so no override needed there. */
/* ============================================================
* COLORED-SURFACE OVERRIDES (theme-agnostic)
*
* When the capture wrap is tinted with a chosen color, every text/icon
* inside it must flip to light to read against the dark color palette.
* Same logic as has-card-color on the cards / has-note-color on the modal.
* ============================================================ */
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-title,
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture {
color: #fff !important;
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture::placeholder,
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-title::placeholder {
color: rgba(255, 255, 255, 0.6) !important;
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-title {
border-bottom-color: rgba(255, 255, 255, 0.18) !important;
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-action {
color: rgba(255, 255, 255, 0.78);
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-action:hover {
background: rgba(0, 0, 0, 0.28);
color: #fff;
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-action.is-active {
background: rgba(0, 0, 0, 0.32);
color: #fff;
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-discard {
color: rgba(255, 255, 255, 0.78);
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-discard:hover {
background: rgba(0, 0, 0, 0.28);
color: #fff;
}
/* ============================================================
* REMAINING DARK-MODE TWEAKS
* ============================================================ */
/* On wall light backgrounds in dark theme, soften card outline so dark cards
on white walls don't look harsh. */
.theme-dark .keep-cards-grid.wall-whiteboard .keep-card,
.theme-dark .keep-cards-grid.wall-paper .keep-card,
.theme-dark .keep-cards-grid.wall-graph .keep-card,
.theme-dark .keep-cards-grid.wall-linen .keep-card {
border-color: rgba(0, 0, 0, 0.12);
}
/* Color picker swatches in light mode get a stronger border so the lighter
colors (Default / Sand / Peach) don't blend into the white panel */
.theme-light .keep-color-swatch {
border-color: rgba(0, 0, 0, 0.18);
}
/* Skeleton shimmer in light mode reads better against light cards */
.theme-light .keep-shimmer {
background: linear-gradient(
90deg,
rgba(0, 0, 0, 0.06) 0%,
rgba(0, 0, 0, 0.12) 50%,
rgba(0, 0, 0, 0.06) 100%
);
background-size: 200% 100%;
}
/* Wall card hover lift shadow in light mode should be lighter than dark mode default */
.theme-light .keep-cards-grid.is-wall .keep-card {
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12);
}
.theme-light .keep-cards-grid.is-wall .keep-card:hover {
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18);
}
/* Backlinks badge readability in both themes */
.keep-card.has-card-color .keep-card-backlinks {
color: rgba(255, 255, 255, 0.7);
}
.theme-light .keep-card-backlinks {
color: var(--text-muted);
}