philemonchiro_obsidian-note.../styles.css

1953 lines
45 KiB
CSS
Raw Normal View History

/* ========== root ========== */
body .keep-cards-root {
padding: 0;
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;
}
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 07:31:27 +00:00
.theme-light .keep-cards-search-wrap {
background: #ffffff;
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 07:31:27 +00:00
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;
}
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 07:31:27 +00:00
.theme-light .keep-cards-sort-btn,
.theme-light .keep-cards-toolbar {
background: #ffffff;
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 07:31:27 +00:00
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;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
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);
}
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 07:31:27 +00:00
.theme-light .keep-cards-capture-wrap {
background: #ffffff;
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 07:31:27 +00:00
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.
The `input.` tag prefix gives this rule specificity (0,0,2,1) so it wins
against Obsidian's `input[type="text"]` defaults without !important. */
.keep-cards-capture-wrap input.keep-cards-capture-title {
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
display: none;
padding: 14px 18px 10px;
border: none;
background: transparent;
border-radius: 0;
box-shadow: none;
color: var(--text-normal);
font-size: 20px;
font-weight: 500;
font-family: inherit;
outline: none;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
width: 100%;
box-sizing: border-box;
line-height: 1.4;
height: auto;
min-height: 0;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
}
.keep-cards-capture-wrap input.keep-cards-capture-title::placeholder {
font-weight: 500;
font-size: 20px;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
color: var(--text-faint);
}
/* Divider between title and body, only when both visible */
.keep-cards-capture-wrap:focus-within input.keep-cards-capture-title {
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
display: block;
border-bottom: 1px solid var(--background-modifier-border);
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
}
.keep-cards-capture-wrap textarea.keep-cards-capture {
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
width: 100%;
padding: 12px 18px;
border: none;
background: transparent;
border-radius: 0;
box-shadow: none;
color: var(--text-normal);
font-size: 14px;
resize: none;
font-family: inherit;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
line-height: 1.55;
outline: none;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
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);
}
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
/* 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;
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
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);
}
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 07:31:27 +00:00
/* ===== 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: #ffffff;
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 07:31:27 +00:00
}
.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;
}
.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: #ffffff;
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 07:31:27 +00:00
}
.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: #ffffff;
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 07:31:27 +00:00
}
.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;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
bottom: 28px;
left: 50%;
transform: translateX(-50%);
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
border-radius: 36px;
padding: 8px 14px 8px 18px;
display: flex;
align-items: center;
gap: 6px;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.45);
z-index: 100;
}
.keep-cards-bulk-count {
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
padding: 0 10px 0 0;
color: var(--text-normal);
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
font-size: 14px;
font-weight: 600;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
margin-right: 4px;
border-right: 1px solid var(--background-modifier-border);
}
.keep-cards-bulk-btn {
background: transparent;
border: none;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
width: 40px;
height: 40px;
border-radius: 50%;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
color: var(--text-normal);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
padding: 0;
transition: background 0.12s ease, color 0.12s ease;
}
.keep-cards-bulk-btn:hover {
background: var(--background-modifier-hover);
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
color: var(--text-accent);
}
.keep-cards-bulk .keep-cards-bulk-btn svg,
.keep-cards-bulk .keep-cards-bulk-btn .svg-icon {
width: 20px;
height: 20px;
}
/* ========== 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 ========== */
/* These selectors match the same specificity (0,0,1,0) as the base rules
that declare the transitions/animations they suppress; the later source
position lets them win without !important. */
@media (prefers-reduced-motion: reduce) {
.keep-card,
.keep-card-actions,
.keep-shimmer {
transition: none;
animation: none;
}
}
/* ========== note preview modal ========== */
.keep-note-modal {
width: min(900px, 92vw);
max-height: 88vh;
}
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
/* 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;
}
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 07:31:27 +00:00
/* 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. */
.modal.keep-note-modal.has-note-color .modal-content {
background: transparent;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
}
.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);
}
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 07:31:27 +00:00
.keep-note-modal.has-note-color .keep-modal-title {
color: #ffffff;
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 07:31:27 +00:00
}
.modal.keep-note-modal.has-note-color .keep-modal-action-btn {
background: rgba(0, 0, 0, 0.22);
color: rgba(255, 255, 255, 0.92);
border: none;
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 07:31:27 +00:00
}
.modal.keep-note-modal.has-note-color .keep-modal-action-btn:hover {
background: rgba(0, 0, 0, 0.4);
color: #ffffff;
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 07:31:27 +00:00
}
.keep-note-modal.has-note-color .keep-modal-editor {
background: rgba(0, 0, 0, 0.2);
color: #ffffff;
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 07:31:27 +00:00
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);
}
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
/* ========== 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 */
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 07:31:27 +00:00
/* 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;
}
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
/* 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%;
v0.2.1: capture redesign + colored modal + wall polish Capture box (Keep parity): - Title input above body, both visible only when capture is focused - Discard button next to a primary Save button - Pin and color toggles in the action row; picking a color tints the whole capture box so you preview the sticky color before saving - Auto-save on focus loss (200ms grace so the color popup menu doesn't trigger a premature save) - Plain Enter inserts a newline; cmd/ctrl-Enter saves - Title typography: 20px / 500 weight, divider between title and body, inputs are flush (no nested borders) - Capture also auto-adds the new note to the current wall when in wall mode Wall view: - Pinned cards float to the top in pinOrder - 3D pushpin head on pinned wall cards (red gradient + drop shadow, softer shadow on light backgrounds) - Removed the floating + add button (redundant with the capture box) - Removed the wall switcher dropdown; one implicit wall, exposed via a 'Clear wall' command in the palette Modal preview: - Inherits the note's color: paints the modal background, transparent inner panels, lighter tag chips and code-block backgrounds for contrast on the dark color palette - Hidden Obsidian's built-in × close (overlapped with the action row); Esc / click-outside / Open-in-tab still close Bulk actions: - 40px buttons with 20px icons (was 32/16) for better legibility, vertical divider between count and actions Async/await cleanup: - onOpen, onClose, render, and the bulk-trash handler no longer declare async without an await; require-await passes locally
2026-05-02 06:25:24 +00:00
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);
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
}
body .keep-cards-grid.is-wall .keep-card:hover {
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
box-shadow: 0 10px 22px rgba(0, 0, 0, 0.42);
transform: rotate(0deg) translateY(-2px);
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
z-index: 5;
}
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 07:31:27 +00:00
/* ===== 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);
}
v0.2.0: wall mode and reviewer-bot async-no-await fixes The bigger half is the new "wall" view: a sticky-note styled, vertically-scrolled, curated subset of your notes. - New density modes 'wall' and 'wall-compact' selectable from the toolbar. Wall is now the default density on fresh installs. - Per-card sticky-note look: deterministic 1-3 degree rotation seeded by file path, paper-style drop shadow, hover lift to 0deg. - Eight wall backgrounds (cork, whiteboard, slate, paper, graph, blueprint, linen, chalkboard) chosen from the settings tab. Default: slate. - Walls are curated, not auto-filled. The wall starts empty; users add notes via the floating + button (FuzzySuggestModal picker) or via the empty state's "Fill from current view" shortcut (only offered when the current filter has <= 200 notes). - Right-click any card on the wall: "Remove from wall". - Command "Clear wall" (palette) wipes the current wall. - The freeform-canvas prototype was scrapped in favor of the column layout after testing showed dragging cards onto a giant scattered canvas was unusable at vault scale. Bot fixes: - async onClose / async render / async make-trash arrow had no awaits. Made onClose and onOpen non-async (return Promise.resolve) to match Obsidian's signature; render is now sync; the trash arrow is sync too (its body's awaits are inside a ConfirmModal callback). - Switched view content access from this.containerEl.children[1] to this.contentEl. Fixes a tab-switching ghosting bug — newer Obsidian versions can wrap views in extra layers, shifting the children index, so renders were occasionally landing on the wrong element. Per the developer docs, contentEl is the stable getter. - The wall FAB moved from position: fixed to position: absolute inside the body container, so it disappears with its tab instead of bleeding across panes. - Added @typescript-eslint/require-await to the local eslint config so the next round of these doesn't slip past.
2026-05-02 04:39:17 +00:00
/* 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; }
}
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 07:31:27 +00:00
/* ============================================================
* 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: #ffffff;
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 07:31:27 +00:00
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: #ffffff;
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 07:31:27 +00:00
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 input.keep-cards-capture-title,
.keep-cards-capture-wrap.has-pick-color textarea.keep-cards-capture {
color: #ffffff;
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 07:31:27 +00:00
}
.keep-cards-capture-wrap.has-pick-color textarea.keep-cards-capture::placeholder,
.keep-cards-capture-wrap.has-pick-color input.keep-cards-capture-title::placeholder {
color: rgba(255, 255, 255, 0.6);
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 07:31:27 +00:00
}
.keep-cards-capture-wrap.has-pick-color input.keep-cards-capture-title {
border-bottom-color: rgba(255, 255, 255, 0.18);
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 07:31:27 +00:00
}
.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: #ffffff;
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 07:31:27 +00:00
}
.keep-cards-capture-wrap.has-pick-color .keep-cards-capture-action.is-active {
background: rgba(0, 0, 0, 0.32);
color: #ffffff;
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 07:31:27 +00:00
}
.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: #ffffff;
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 07:31:27 +00:00
}
/* ============================================================
* 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);
}