vault backup: 2026-11-07 16:33:44

This commit is contained in:
cheney
2026-11-07 16:33:55 +08:00
commit 7015312702
1208 changed files with 132432 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
{
"promptDelete": false,
"alwaysUpdateLinks": true,
"attachmentFolderPath": "./attach"
}
+1
View File
@@ -0,0 +1 @@
{}
+5
View File
@@ -0,0 +1,5 @@
[
"consistent-attachments-and-links",
"studio-kanban",
"obsidian-git"
]
+33
View File
@@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": true,
"webviewer": false,
"footnotes": false,
"bases": true
}
+4
View File
@@ -0,0 +1,4 @@
{
"format": "YYYY-MM WW",
"folder": "日记"
}
+10
View File
@@ -0,0 +1,10 @@
{
"editor:download-attachments": [
{
"modifiers": [
"Alt"
],
"key": "D"
}
]
}
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
{
"id": "clippermaster",
"name": "ClipperMaster",
"version": "0.1.10",
"minAppVersion": "0.15.0",
"description": "Works with the ClipperMaster Chrome extension to clip structured content from the web and save it to your vault as Markdown files.",
"author": "ClipperMaster Team",
"authorUrl": "https://clippermaster.com/",
"isDesktopOnly": true
}
+8
View File
@@ -0,0 +1,8 @@
/*
This CSS file will be included with your plugin, and
available in the app when your plugin is enabled.
If your plugin does not need CSS, delete this file.
*/
@@ -0,0 +1,19 @@
{
"collectAttachmentUsedByMultipleNotesMode": "Skip",
"consistencyReportFile": "consistency-report.md",
"emptyFolderBehavior": "DeleteWithEmptyParents",
"excludePaths": [],
"excludePathsFromAttachmentCollecting": [],
"includePaths": [],
"moveAttachmentToProperFolderUsedByMultipleNotesMode": "CopyAll",
"shouldChangeNoteBacklinksDisplayText": true,
"shouldCollectAttachmentsAutomatically": false,
"shouldDeleteAttachmentsWithNote": true,
"shouldDeleteExistingFilesWhenMovingNote": false,
"shouldMoveAttachmentsWithNote": true,
"shouldShowBackupWarning": false,
"shouldUpdateLinks": true,
"treatAsAttachmentExtensions": [
".excalidraw.md"
]
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
{
"id": "consistent-attachments-and-links",
"name": "Consistent Attachments and Links",
"version": "3.33.4",
"minAppVersion": "1.12.4",
"description": "This plugin ensures the consistency of attachments and links",
"author": "Dmitry Savosh",
"authorUrl": "https://github.com/dy-sh/",
"isDesktopOnly": false,
"fundingUrl": "https://www.buymeacoffee.com/mnaoumov"
}
@@ -0,0 +1 @@
.consistent-attachments-and-links.obsidian-dev-utils.multiple-text-component textarea{height:6em;width:20em}
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
{
"id": "obsidian-clipper",
"name": "Clipper",
"version": "0.2.9",
"minAppVersion": "0.15.0",
"description": "This plugin helps you capture highlights from the web.",
"author": "John Christopher",
"authorUrl": "https://github.com/jgchristopher/",
"fundingUrl": "https://www.buymeacoffee.com/jgchristopher",
"isDesktopOnly": false
}
+127
View File
@@ -0,0 +1,127 @@
.my-4 {
margin-top: 1rem;
margin-bottom: 1rem;
}
.ml-3 {
margin-left: 0.75rem;
}
.mt-3 {
margin-top: 0.75rem;
}
.block {
display: block;
}
.flex {
display: flex;
}
.h-5 {
height: 1.25rem;
}
.w-5 {
width: 1.25rem;
}
.flex-1 {
flex: 1 1 0%;
}
.flex-shrink-0 {
flex-shrink: 0;
}
.basis-0 {
flex-basis: 0px;
}
.flex-row {
flex-direction: row;
}
.flex-wrap {
flex-wrap: wrap;
}
.whitespace-nowrap {
white-space: nowrap;
}
.rounded-md {
border-radius: 0.375rem;
}
.border {
border-width: 1px;
}
.bg-blue-50 {
--tw-bg-opacity: 1;
background-color: rgb(239 246 255 / var(--tw-bg-opacity));
}
.p-4 {
padding: 1rem;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem;
}
.font-extrabold {
font-weight: 800;
}
.font-medium {
font-weight: 500;
}
.text-blue-400 {
--tw-text-opacity: 1;
color: rgb(96 165 250 / var(--tw-text-opacity));
}
.text-blue-700 {
--tw-text-opacity: 1;
color: rgb(29 78 216 / var(--tw-text-opacity));
}
a {
color: var(--link-color);
}
div.clp_section_margin {
margin: 0 0 20px 0 !important;
}
.internal-embed[alt="clipped"] h1 {
display: none;
}
.hover\:text-blue-600:hover {
--tw-text-opacity: 1;
color: rgb(37 99 235 / var(--tw-text-opacity));
}
@media (min-width: 768px) {
.md\:ml-6 {
margin-left: 1.5rem;
}
.md\:mt-0 {
margin-top: 0px;
}
.md\:flex {
display: flex;
}
.md\:justify-between {
justify-content: space-between;
}
}
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
{
"author": "Vinzent",
"authorUrl": "https://github.com/Vinzent03",
"id": "obsidian-git",
"name": "Git",
"description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "2.43.0",
"minAppVersion": "1.13.0"
}
+937
View File
@@ -0,0 +1,937 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
}
.workspace-leaf-content[data-type="git-view"] .view-content {
padding-left: 0;
padding-top: 0;
padding-right: 0;
}
.workspace-leaf-content[data-type="git-history-view"] .view-content {
padding-left: 0;
padding-top: 0;
padding-right: 0;
}
.loading {
overflow: hidden;
}
.loading > svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-disabled {
opacity: 0.5;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
.tooltip.obsidian-git-commit-tooltip {
text-align: start;
white-space: pre-wrap;
max-width: min(480px, 90vw);
}
.obsidian-git-statusbar-conflict-indicator,
.obsidian-git-statusbar-paused-indicator,
.obsidian-git-statusbar-icon {
float: left;
}
.obsidian-git-statusbar-text {
float: right;
margin-left: 5px;
}
.obsidian-git-statusbar-conflict {
cursor: pointer;
margin-right: 5px;
}
.obsidian-git-statusbar-paused {
margin-right: 5px;
}
/* Limits the scrollbar to the view body */
.git-view {
display: flex;
flex-direction: column;
position: relative;
height: 100%;
}
/* Re-enable wrapping of nav buttns to prevent overflow on smaller screens #*/
.workspace-drawer .git-view .nav-buttons-container {
flex-wrap: wrap;
}
.git-tools {
display: flex;
margin-left: auto;
}
.git-tools .type {
padding-left: var(--size-2-1);
display: flex;
align-items: center;
justify-content: center;
width: 11px;
}
.git-tools .type[data-type="M"] {
color: orange;
}
.git-tools .type[data-type="D"] {
color: red;
}
.git-tools .buttons {
display: flex;
}
.git-tools .buttons > * {
padding: 0;
height: auto;
}
.workspace-leaf-content[data-type="git-view"] .tree-item-self,
.workspace-leaf-content[data-type="git-history-view"] .tree-item-self {
align-items: center;
}
.workspace-leaf-content[data-type="git-view"]
.tree-item-self:hover
.clickable-icon,
.workspace-leaf-content[data-type="git-history-view"]
.tree-item-self:hover
.clickable-icon {
color: var(--icon-color-hover);
}
/* Highlight an item as active if it's diff is currently opened */
.is-active .git-tools .buttons > * {
color: var(--nav-item-color-active);
}
.git-author {
color: var(--text-accent);
}
.git-date {
color: var(--text-accent);
}
.git-ref {
color: var(--text-accent);
}
.obsidian-git-merge-help ol {
padding-inline-start: var(--size-4-6);
}
.obsidian-git-merge-help-resolved {
padding: var(--size-4-3);
border-inline-start: 2px solid var(--color-green);
background-color: var(--background-secondary);
}
/* ====== diff2html ======
The following styles are adapted from the obsidian-version-history plugin by
@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss
which itself is adapted from the diff2html library with the following original license:
https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md
Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
.theme-dark,
.theme-light {
--git-delete-bg: #ff475040;
--git-delete-hl: #96050a75;
--git-insert-bg: #68d36840;
--git-insert-hl: #23c02350;
--git-change-bg: #ffd55840;
--git-selected: #3572b0;
--git-delete: #cc3333;
--git-insert: #399839;
--git-change: #d0b44c;
--git-move: #3572b0;
--git-conflict-ours: var(--color-cyan);
--git-conflict-theirs: var(--color-blue);
--git-conflict-ours-bg: color-mix(
in oklch,
var(--git-conflict-ours) 10%,
transparent
);
--git-conflict-theirs-bg: color-mix(
in oklch,
var(--git-conflict-theirs) 10%,
transparent
);
--git-conflict-ours-header-bg: color-mix(
in oklch,
var(--git-conflict-ours) 25%,
transparent
);
--git-conflict-theirs-header-bg: color-mix(
in oklch,
var(--git-conflict-theirs) 25%,
transparent
);
--git-conflict-ours-button-bg: color-mix(
in oklab,
var(--git-conflict-ours) 25%,
var(--interactive-normal)
);
--git-conflict-theirs-button-bg: color-mix(
in oklab,
var(--git-conflict-theirs) 25%,
var(--interactive-normal)
);
--git-conflict-base-button-bg: color-mix(
in oklab,
var(--color-purple) 15%,
var(--interactive-normal)
);
--git-conflict-base-bg: color-mix(
in oklch,
var(--color-purple) 4%,
transparent
);
}
.git-diff {
.d2h-d-none {
display: none;
}
.d2h-wrapper {
text-align: left;
border-radius: 0.25em;
overflow: auto;
}
.d2h-file-header.d2h-file-header {
background-color: var(--background-secondary);
border-bottom: 1px solid var(--background-modifier-border);
font-family:
Source Sans Pro,
Helvetica Neue,
Helvetica,
Arial,
sans-serif;
height: 35px;
padding: 5px 10px;
}
.d2h-file-header,
.d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.d2h-file-header {
display: none;
}
.d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.d2h-lines-added {
border: 1px solid var(--color-green);
border-radius: 5px 0 0 5px;
color: var(--color-green);
padding: 2px;
text-align: right;
vertical-align: middle;
}
.d2h-lines-deleted {
border: 1px solid var(--color-red);
border-radius: 0 5px 5px 0;
color: var(--color-red);
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.d2h-file-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--text-normal);
font-size: var(--h5-size);
}
.d2h-file-wrapper {
border: 1px solid var(--background-secondary-alt);
border-radius: 3px;
margin-bottom: 1em;
max-height: 100%;
}
.d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-secondary-alt);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.d2h-file-collapse.d2h-selected {
background-color: var(--git-selected);
}
.d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.d2h-diff-table {
border-collapse: collapse;
font-family: var(--font-monospace);
font-size: var(--code-size);
width: 100%;
}
.d2h-files-diff {
width: 100%;
}
.d2h-file-diff {
/*
overflow-y: scroll;
*/
border-radius: 5px;
font-size: var(--font-text-size);
line-height: var(--line-height-normal);
}
.d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.d2h-code-line {
padding-left: 6em;
padding-right: 1.5em;
}
.d2h-code-line,
.d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.d2h-code-side-line {
/* needed to be changed */
padding-left: 0.5em;
padding-right: 0.5em;
}
.d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
width: 100%;
/* only works for line-by-line */
white-space: pre-wrap;
}
.d2h-code-line del,
.d2h-code-side-line del {
background-color: var(--git-delete-hl);
color: var(--text-normal);
}
.d2h-code-line del,
.d2h-code-line ins,
.d2h-code-side-line del,
.d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.d2h-code-line ins,
.d2h-code-side-line ins {
background-color: var(--git-insert-hl);
text-align: left;
}
.d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.line-num1 {
float: left;
}
.line-num1,
.line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
/*
padding: 0 0.5em;
*/
text-overflow: ellipsis;
width: 2.5em;
padding-left: 0;
}
.line-num2 {
float: right;
}
.d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-faint);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 5.5em;
}
.d2h-code-linenumber:after {
content: "\200b";
}
.d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-faint);
cursor: pointer;
overflow: hidden;
padding: 0 0.5em;
text-align: right;
text-overflow: ellipsis;
width: 4em;
/* needed to be changed */
display: table-cell;
position: relative;
}
.d2h-code-side-linenumber:after {
content: "\200b";
}
.d2h-code-side-emptyplaceholder,
.d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.d2h-code-line-prefix,
.d2h-code-linenumber,
.d2h-code-side-linenumber,
.d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d2h-code-linenumber,
.d2h-code-side-linenumber {
direction: rtl;
}
.d2h-del {
background-color: var(--git-delete-bg);
border-color: var(--git-delete-hl);
}
.d2h-ins {
background-color: var(--git-insert-bg);
border-color: var(--git-insert-hl);
}
.d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-faint);
}
.d2h-del,
.d2h-ins,
.d2h-file-diff .d2h-change {
color: var(--text-normal);
}
.d2h-file-diff .d2h-del.d2h-change {
background-color: var(--git-change-bg);
}
.d2h-file-diff .d2h-ins.d2h-change {
background-color: var(--git-insert-bg);
}
.d2h-file-list-wrapper {
a {
text-decoration: none;
cursor: default;
-webkit-user-drag: none;
}
svg {
display: none;
}
}
.d2h-file-list-header {
text-align: left;
}
.d2h-file-list-title {
display: none;
}
.d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.d2h-file-list {
}
.d2h-file-list > li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.d2h-file-list > li:last-child {
border-bottom: none;
}
.d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.d2h-deleted {
color: var(--git-delete);
}
.d2h-added {
color: var(--git-insert);
}
.d2h-changed {
color: var(--git-change);
}
.d2h-moved {
color: var(--git-move);
}
.d2h-tag {
background-color: var(--background-secondary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.d2h-deleted-tag {
border: 1px solid var(--git-delete);
}
.d2h-added-tag {
border: 1px solid var(--git-insert);
}
.d2h-changed-tag {
border: 1px solid var(--git-change);
}
.d2h-moved-tag {
border: 1px solid var(--git-move);
}
/* needed for line-by-line*/
.d2h-diff-tbody {
position: relative;
}
/* My additions */
.cm-merge-revert {
width: 4em;
}
/* Ensure that merge revert markers are positioned correctly */
.cm-merge-revert > * {
position: absolute;
background-color: var(--background-secondary);
display: flex;
}
}
/* ====================== Line Authoring Information ====================== */
.markdown-source-view.mod-cm6 .cm-gutters.obsidian-git-line-author-gutters {
margin-left: unset;
}
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
}
.cm-gutterElement.obs-git-blame-gutter > div,
.line-author-settings-preview {
/* delegate text color to settings */
color: var(--obs-git-gutter-text);
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}
@media (max-width: 800px) {
/* hide git blame gutter not to superpose text */
.cm-gutterElement.obs-git-blame-gutter {
display: none;
}
}
.git-unified-diff-view,
.git-split-diff-view .cm-deletedLine .cm-changedText {
background-color: #ee443330;
}
.git-unified-diff-view,
.git-split-diff-view .cm-insertedLine .cm-changedText {
background-color: #22bb2230;
}
.git-obscure-prompt .git-show-password {
margin-right: 32px;
}
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
}
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
}
/* Override styling of Codemirror merge view "collapsed lines" indicator */
.git-split-diff-view .ͼ2 .cm-collapsedLines {
background: var(--interactive-normal);
border-radius: var(--radius-m);
color: var(--text-accent);
font-size: var(--font-small);
padding: var(--size-4-1) var(--size-4-1);
}
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
background: var(--interactive-hover);
color: var(--text-accent-hover);
}
.git-signs-gutter {
.cm-gutterElement {
display: grid;
/* Needed to align the sign properly for different line heigts. Such as
* when having a heading or list item.
*/
padding-top: 0 !important;
}
}
.git-gutter-marker:hover {
border-radius: 2px;
}
.git-gutter-marker.git-add {
background-color: var(--color-green);
justify-self: center;
height: inherit;
width: 0.2rem;
}
.git-gutter-marker.git-change {
background-color: var(--color-yellow);
justify-self: center;
height: inherit;
width: 0.2rem;
}
.git-gutter-marker.git-changedelete {
color: var(--color-yellow);
font-weight: var(--font-bold);
font-size: 1rem;
justify-self: center;
height: inherit;
}
.git-gutter-marker.git-delete {
background-color: var(--color-red);
height: 0.2rem;
width: 0.8rem;
align-self: end;
}
.git-gutter-marker.git-topdelete {
background-color: var(--color-red);
height: 0.2rem;
width: 0.8rem;
align-self: start;
}
div:hover > .git-gutter-marker.git-change {
width: 0.6rem;
}
div:hover > .git-gutter-marker.git-add {
width: 0.6rem;
}
div:hover > .git-gutter-marker.git-delete {
height: 0.6rem;
}
div:hover > .git-gutter-marker.git-topdelete {
height: 0.6rem;
}
div:hover > .git-gutter-marker.git-changedelete {
font-weight: var(--font-bold);
}
.git-gutter-marker.staged {
opacity: 0.5;
}
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
margin-inline-end: 0;
.git-signs-gutter {
margin-inline-start: -1rem;
}
}
.git-changes-status-bar-colored {
.git-add {
color: var(--color-green);
}
.git-change {
color: var(--color-yellow);
}
.git-delete {
color: var(--color-red);
}
}
.git-changes-status-bar .git-add {
margin-right: 0.3em;
}
.git-changes-status-bar .git-change {
margin-right: 0.3em;
}
.cm-line.git-conflict-marker-line {
display: flex !important;
align-items: center;
background-color: var(--background-modifier-hover);
}
.cm-line.git-conflict-marker-line.HyperMD-quote {
/* The closing Git marker (`>>>>>>>`) is parsed by Live Preview as nested
* Markdown blockquotes. Obsidian marks these layout rules as important, so
* the conflict marker must use important as well to undo that styling. */
text-indent: 0 !important;
padding-inline-start: 0 !important;
border-inline-start: none !important;
}
.git-conflict-marker {
background-color: transparent;
}
.markdown-source-view.mod-cm6
.cm-line.git-conflict-marker-line.git-conflict-marker-ours {
background-color: var(--git-conflict-ours-header-bg);
}
.markdown-source-view.mod-cm6
.cm-line.git-conflict-marker-line.git-conflict-marker-theirs {
background-color: var(--git-conflict-theirs-header-bg);
}
.git-conflict-panel {
display: flex;
align-items: center;
gap: var(--size-2-2);
padding: var(--size-2-2) var(--size-4-2);
background-color: var(--background-secondary);
border-bottom: 1px solid var(--background-modifier-border);
}
.git-conflict-panel-label {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
margin-inline-end: auto;
}
.is-mobile .git-conflict-panel {
flex-direction: column;
align-items: stretch;
}
.is-mobile .git-conflict-panel .git-conflict-actions-group {
flex-wrap: wrap;
}
.is-mobile .git-conflict-panel .nav-action-button {
flex: 1 1 auto;
}
.git-conflict-actions-group {
display: inline-flex;
gap: 0;
overflow: hidden;
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-s);
.nav-action-button {
margin: 0;
border-radius: 0;
font-weight: bold;
padding: var(--size-2-3);
}
.nav-action-button + .nav-action-button {
border-left: 1px solid var(--background-modifier-border);
}
}
.git-conflict-actions-group .git-conflict-choose-ours {
background-color: var(--git-conflict-ours-button-bg);
color: var(--text-normal);
}
.git-conflict-actions-group .git-conflict-choose-theirs {
background-color: var(--git-conflict-theirs-button-bg);
color: var(--text-normal);
}
.git-conflict-actions-group .git-conflict-choose-base {
background-color: var(--git-conflict-base-button-bg);
color: var(--text-normal);
}
.git-conflict-actions-group .git-conflict-choose-both {
background-color: var(--interactive-normal);
color: var(--text-normal);
}
.git-conflict-actions-widget {
flex: none;
margin-left: var(--size-2-2);
border-radius: 0;
}
.cm-line.git-conflict-ours-line {
background-color: var(--git-conflict-ours-bg);
}
.cm-line.git-conflict-theirs-line {
background-color: var(--git-conflict-theirs-bg);
}
.cm-line.git-conflict-base-line {
background-color: var(--git-conflict-base-bg);
}
.cm-line.git-conflict-marker-line::after {
content: "";
flex: 1;
margin-left: var(--size-2-2);
}
.cm-line.git-conflict-marker-line .git-conflict-actions-widget {
order: 2;
}
.is-mobile .cm-line.git-conflict-marker-line {
flex-wrap: wrap;
}
.is-mobile .cm-line.git-conflict-marker-line::after {
display: none;
}
.is-mobile .cm-line.git-conflict-marker-line .git-conflict-actions-widget {
flex: 0 0 100%;
margin: var(--size-2-1) 0 0;
}
.is-mobile .git-conflict-actions-widget {
flex-wrap: wrap;
}
.is-mobile .git-conflict-actions-widget .nav-action-button {
flex: 1 1 auto;
}
+28
View File
@@ -0,0 +1,28 @@
{
"foldMode": "auto",
"cardLimit": 4,
"currency": "¥",
"accent": "#D7F25C",
"showSidebar": true,
"newBoardFolder": "",
"fontSize": "s",
"language": "auto",
"show": {
"priority": true,
"date": true,
"assignee": true,
"value": true,
"description": true,
"tags": true,
"images": true,
"headerStats": true,
"headerPeople": true,
"sideTags": true,
"sidePeople": true
},
"image": {
"layout": "cover",
"height": "m",
"fit": "cover"
}
}
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
{
"id": "studio-kanban",
"name": "Kanban Studio",
"version": "0.4.1",
"minAppVersion": "1.8.7",
"description": "干净、现代的看板:优先级、日期、负责人、标签、图片、拖拽,数据就是普通的 Markdown.",
"author": "Adrian",
"isDesktopOnly": false
}
+679
View File
@@ -0,0 +1,679 @@
/* Kanban Studio — 样式
* 所有颜色都是 .sk-root 上的变量,想调配色只改这一段即可。
*/
.sk-root {
--sk-bg: #FFFFFF;
--sk-panel: #F4F4F2;
--sk-panel-2: #ECECEA;
--sk-card: #FFFFFF;
--sk-chip: #F3F3F1;
--sk-line: #E8E8E5;
--sk-text: #18191B;
--sk-text-2: #4F5257;
--sk-text-3: #74777C;
--sk-ink: #1C1D1F;
--sk-ink-text: #FFFFFF;
--sk-danger: #C9401F;
--sk-danger-bg: #FCE9E3;
--sk-ok: #3F7A3A;
--sk-accent: var(--sk-accent-global, #D7F25C);
--sk-accent-ink: var(--sk-accent-ink-global, #18191B);
--sk-shadow: 0 1px 2px rgba(24, 25, 27, .05), 0 0 0 1px rgba(24, 25, 27, .025);
--sk-shadow-lift: 0 12px 28px rgba(24, 25, 27, .12), 0 2px 6px rgba(24, 25, 27, .06);
--sk-r-xl: 24px;
--sk-r-lg: 16px;
--sk-r-md: 12px;
--sk-fs: 1;
--sk-font: var(--font-interface, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif);
}
.theme-dark .sk-root {
--sk-bg: #131416;
--sk-panel: #1B1C1F;
--sk-panel-2: #232428;
--sk-card: #24252A;
--sk-chip: #2F3036;
--sk-line: #2E2F34;
--sk-text: #EDEDEB;
--sk-text-2: #C2C4C8;
--sk-text-3: #9B9EA3;
--sk-ink: #EDEDEB;
--sk-ink-text: #131416;
--sk-danger: #FF8F75;
--sk-danger-bg: rgba(255, 128, 100, .14);
--sk-ok: #A8D69F;
--sk-shadow: 0 0 0 1px rgba(255, 255, 255, .04);
--sk-shadow-lift: 0 14px 32px rgba(0, 0, 0, .45), 0 0 0 1px rgba(255, 255, 255, .06);
}
.workspace-leaf-content[data-type="studio-kanban-view"] .view-content.sk-view-content {
padding: 0;
overflow: hidden;
}
/* ---------- 字号档位 ---------- */
.sk-root.sk-size-s { --sk-fs: .9; }
.sk-root.sk-size-m { --sk-fs: 1; }
.sk-root.sk-size-l { --sk-fs: 1.14; }
/* ---------- 布局 ---------- */
.sk-root {
display: flex;
gap: 20px;
height: 100%;
padding: 16px;
box-sizing: border-box;
background: var(--sk-bg);
color: var(--sk-text);
font-family: var(--sk-font);
font-size: calc(14px * var(--sk-fs, 1));
-webkit-font-smoothing: antialiased;
}
.sk-root * { box-sizing: border-box; }
.sk-root .sk-spacer { flex: 1 1 auto; }
.sk-root .sk-ico { display: inline-flex; align-items: center; justify-content: center; flex: none; }
.sk-root .sk-ico svg { width: 16px; height: 16px; stroke-width: 1.75; }
/* 重置 Obsidian 的按钮样式 */
.sk-root button.sk-btn {
appearance: none;
border: 0;
background: none;
box-shadow: none;
margin: 0;
padding: 0;
height: auto;
font: inherit;
color: inherit;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 8px;
transition: background-color .15s ease, color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.sk-root button.sk-btn:focus-visible,
.sk-root .sk-card:focus-visible {
outline: 2px solid var(--sk-text);
outline-offset: 2px;
}
/* ---------- 侧栏 ---------- */
.sk-root .sk-side {
flex: 0 0 264px;
width: 264px;
transition: flex-basis .28s ease, width .28s ease, padding .28s ease, margin .28s ease, opacity .2s ease;
display: flex;
flex-direction: column;
gap: 14px;
padding: 22px 16px 16px;
background: var(--sk-panel);
border-radius: var(--sk-r-xl);
overflow-y: auto;
}
/* 内容超出高度时让侧栏滚动,而不是把搜索框等子元素压扁 */
.sk-root .sk-side > * { flex-shrink: 0; }
.sk-root .sk-side-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 0 4px; }
.sk-root button.sk-round {
width: 40px; height: 40px; justify-content: center;
border-radius: 999px; background: var(--sk-card); box-shadow: var(--sk-shadow);
}
.sk-root button.sk-round:hover { transform: rotate(90deg); }
.sk-root .sk-seg {
display: grid; grid-template-columns: 1fr 1fr; gap: 4px;
padding: 4px; border-radius: 999px; background: var(--sk-panel-2);
}
.sk-root button.sk-seg-btn {
justify-content: center; height: 36px; border-radius: 999px;
color: var(--sk-text-3); font-size: calc(13.5px * var(--sk-fs, 1));
}
.sk-root button.sk-seg-btn.is-active { background: var(--sk-card); color: var(--sk-text); box-shadow: var(--sk-shadow); font-weight: 500; }
.sk-root .sk-search {
display: flex; align-items: center; gap: 8px;
height: 44px; padding: 0 8px 0 14px;
border-radius: 999px; background: var(--sk-card); box-shadow: var(--sk-shadow);
color: var(--sk-text-3);
}
.sk-root .sk-search input[type="text"] {
flex: 1; min-width: 0; height: 100%;
border: 0; background: transparent; box-shadow: none; padding: 0;
color: var(--sk-text); font: inherit; font-size: calc(13.5px * var(--sk-fs, 1));
}
.sk-root .sk-search input::placeholder { color: var(--sk-text-3); }
.sk-root .sk-kbd {
font-size: calc(11px * var(--sk-fs, 1)); padding: 2px 8px; border-radius: 8px;
background: var(--sk-chip); color: var(--sk-text-3);
}
.sk-root .sk-nav { display: flex; flex-direction: column; gap: 2px; }
.sk-root button.sk-nav-item,
.sk-root button.sk-group-head {
width: 100%; height: 40px; padding: 0 10px 0 12px;
border-radius: var(--sk-r-md); color: var(--sk-text-2); font-size: calc(13.5px * var(--sk-fs, 1));
}
.sk-root button.sk-nav-item:hover,
.sk-root button.sk-group-head:hover { background: rgba(127, 127, 127, .08); color: var(--sk-text); }
.sk-root button.sk-nav-item.is-active { background: var(--sk-card); color: var(--sk-text); box-shadow: var(--sk-shadow); font-weight: 500; }
.sk-root .sk-nav-label { flex: 1; min-width: 0; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sk-root .sk-count {
min-width: 26px; height: 22px; padding: 0 7px;
display: inline-flex; align-items: center; justify-content: center;
border-radius: 999px; background: var(--sk-card); color: var(--sk-text-2);
font-size: calc(11.5px * var(--sk-fs, 1)); font-variant-numeric: tabular-nums;
}
.sk-root button.sk-nav-item.is-active .sk-count { background: var(--sk-accent); color: var(--sk-accent-ink); font-weight: 600; }
.sk-root .sk-count.is-alert { background: var(--sk-danger-bg); color: var(--sk-danger); }
.sk-root .sk-group { display: flex; flex-direction: column; }
.sk-root .sk-chev { color: var(--sk-text-3); transition: transform .2s ease; }
.sk-root .sk-chev.is-collapsed { transform: rotate(-90deg); }
/* 树形连接线 */
.sk-root .sk-tree { position: relative; display: flex; flex-direction: column; gap: 2px; padding-left: 28px; margin-top: 2px; }
.sk-root .sk-tree::before {
content: ""; position: absolute; left: 20px; top: 0; bottom: 20px;
width: 1px; background: var(--sk-line);
}
.sk-root .sk-tree > button.sk-nav-item { position: relative; overflow: visible; }
.sk-root .sk-tree > button.sk-nav-item::before {
content: ""; position: absolute; left: -8px; top: 50%;
width: 10px; height: 14px; margin-top: -14px;
border-left: 1px solid var(--sk-line); border-bottom: 1px solid var(--sk-line);
border-bottom-left-radius: 8px;
}
.sk-root .sk-side-foot { padding-top: 8px; border-top: 1px solid var(--sk-line); }
/* 隐藏侧栏 */
.sk-root.sk-side-hidden .sk-side {
flex-basis: 0; width: 0; padding-left: 0; padding-right: 0;
margin-right: -20px; opacity: 0; overflow: hidden; pointer-events: none;
}
.sk-root.sk-side-hidden .sk-side > * { min-width: 232px; }
/* 侧栏开关:显示时在侧栏顶部(收起),隐藏时在看板标题左边(展开) */
.sk-root button.sk-side-close { flex: none; width: 40px; height: 40px; border-radius: 999px; }
.sk-root .sk-title-row { display: flex; align-items: center; gap: 12px; min-width: 0; }
.sk-root button.sk-side-open { display: none; flex: none; width: 40px; height: 40px; margin-left: -6px; border-radius: 999px; }
.sk-root.sk-side-hidden button.sk-side-open { display: inline-flex; }
/* ---------- 主区域 ---------- */
.sk-root .sk-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 22px; padding: 6px 4px 0; }
.sk-root .sk-top { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 16px 24px; }
.sk-root .sk-top-left { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.sk-root button.sk-icon-btn {
width: 30px; height: 30px; justify-content: center; border-radius: 10px; color: var(--sk-text-3);
}
.sk-root button.sk-icon-btn:hover { background: var(--sk-chip); color: var(--sk-text); }
.sk-root .sk-title {
margin: 4px 0 0; font-size: calc(40px * var(--sk-fs, 1)); line-height: 1.1; font-weight: 600; letter-spacing: -.035em;
color: var(--sk-text);
}
/* 标题可点击编辑:左右各留 8px 给悬停底色,用负 margin 抵消,文字位置不变 */
.sk-root .sk-title[contenteditable] {
margin-left: -8px; margin-right: -8px; padding: 0 8px; border-radius: 12px;
cursor: text; outline: none; transition: background .15s ease, box-shadow .15s ease;
}
.sk-root .sk-title[contenteditable]:hover { background: var(--sk-panel); }
.sk-root .sk-title[contenteditable]:focus { background: var(--sk-panel); box-shadow: 0 0 0 1px var(--sk-line); }
.sk-root .sk-meta { color: var(--sk-text-3); font-size: calc(15px * var(--sk-fs, 1)); font-variant-numeric: tabular-nums; }
.sk-root .sk-people { display: flex; align-items: center; gap: 12px; margin-top: 8px; }
.sk-root .sk-avatars { display: flex; }
.sk-root .sk-avatars .sk-avatar { margin-left: -6px; border: 2px solid var(--sk-bg); }
.sk-root .sk-avatars .sk-avatar:first-child { margin-left: 0; }
.sk-root .sk-people-label { font-size: calc(13.5px * var(--sk-fs, 1)); font-weight: 500; color: var(--sk-text-2); }
.sk-root .sk-avatar {
width: 32px; height: 32px; flex: none;
display: inline-flex; align-items: center; justify-content: center;
border-radius: 999px; background: var(--sk-chip); color: var(--sk-text-2);
font-size: calc(11px * var(--sk-fs, 1)); font-weight: 600; letter-spacing: .02em;
}
.sk-root .sk-avatar-sm { width: 26px; height: 26px; font-size: calc(10px * var(--sk-fs, 1)); }
.sk-root .sk-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.sk-root .sk-toggle-pill {
display: inline-flex; align-items: center; gap: 12px;
height: 48px; padding: 0 12px 0 18px;
border-radius: 999px; background: var(--sk-panel); color: var(--sk-text-2); font-size: calc(13.5px * var(--sk-fs, 1));
cursor: pointer; user-select: none;
}
.sk-root .sk-toggle-pill input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.sk-root .sk-switch {
position: relative; width: 44px; height: 26px; border-radius: 999px;
background: var(--sk-panel-2); box-shadow: inset 0 0 0 1px var(--sk-line); transition: background .2s ease;
}
.sk-root .sk-switch::after {
content: ""; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px;
border-radius: 999px; background: var(--sk-card); box-shadow: 0 1px 3px rgba(0, 0, 0, .18);
transition: transform .2s ease;
}
.sk-root .sk-toggle-pill input:checked + .sk-switch { background: var(--sk-accent); box-shadow: none; }
.sk-root .sk-toggle-pill input:checked + .sk-switch::after { transform: translateX(18px); background: var(--sk-accent-ink); }
.sk-root .sk-toggle-pill input:focus-visible + .sk-switch { outline: 2px solid var(--sk-text); outline-offset: 2px; }
.sk-root .sk-modes { display: flex; gap: 4px; padding: 4px; border-radius: 999px; background: var(--sk-panel); }
.sk-root button.sk-mode { width: 40px; height: 40px; justify-content: center; border-radius: 999px; color: var(--sk-text-3); }
.sk-root button.sk-mode.is-active { background: var(--sk-card); color: var(--sk-text); box-shadow: var(--sk-shadow); }
.sk-root button.sk-mode .sk-ico svg { width: 18px; height: 18px; }
.sk-root button.sk-primary {
height: 48px; padding: 0 22px 0 18px; border-radius: 999px;
background: var(--sk-ink); color: var(--sk-ink-text); font-weight: 500; font-size: calc(14.5px * var(--sk-fs, 1));
}
.sk-root button.sk-primary:hover { transform: translateY(-1px); box-shadow: 0 8px 18px rgba(0, 0, 0, .16); }
.sk-root button.sk-primary-sm { height: 42px; font-size: calc(13.5px * var(--sk-fs, 1)); padding: 0 18px 0 14px; }
.sk-root .sk-sizes { display: flex; gap: 2px; padding: 4px; border-radius: 999px; background: var(--sk-panel); }
.sk-root button.sk-size {
width: 40px; height: 40px; justify-content: center; border-radius: 999px;
color: var(--sk-text-3); line-height: 1; font-weight: 500;
}
.sk-root button.sk-size[data-size="s"] { font-size: 12px; }
.sk-root button.sk-size[data-size="m"] { font-size: 14.5px; }
.sk-root button.sk-size[data-size="l"] { font-size: 17px; }
.sk-root button.sk-size:hover { color: var(--sk-text); }
.sk-root button.sk-size.is-active { background: var(--sk-card); color: var(--sk-text); box-shadow: var(--sk-shadow); }
/* 删除卡片后提示条里的「撤销」按钮 */
.notice .sk-undo { margin-left: 8px; }
/* 卡片弹窗里隐藏的文件选择框(由“上传图片”按钮触发) */
.sk-file-input { display: none; }
/* ---------- 分段按钮滑块(view/segmented.ts) ---------- */
/* 选中底色由一块滑块承担,按钮本身透明;文字颜色按滑块覆盖程度(--sk-seg-mix 0~1)渐变 */
.sk-root .sk-seg-anim { position: relative; isolation: isolate; touch-action: pan-y; user-select: none; }
.sk-root .sk-seg-thumb {
position: absolute; left: 0; top: 0; z-index: 0; pointer-events: none;
border-radius: 999px; background: var(--sk-card); box-shadow: var(--sk-shadow);
will-change: transform, width;
}
.sk-root .sk-seg-anim > button.sk-btn,
.sk-root .sk-seg-anim > button.sk-btn.is-active {
position: relative; z-index: 1; background: transparent; box-shadow: none;
color: color-mix(in srgb, var(--sk-text) calc(var(--sk-seg-mix, 0) * 100%), var(--sk-text-3));
transition: transform .15s ease;
}
.sk-root .sk-sizes.sk-seg-anim > button.sk-size:hover { color: var(--sk-text); }
.sk-root .sk-seg-anim.is-dragging { cursor: grabbing; }
.sk-root .sk-seg-anim.is-dragging > button.sk-btn { cursor: grabbing; }
/* ---------- 看板 ---------- */
.sk-root .sk-board {
flex: 1 1 auto; min-height: 0;
display: flex; gap: 14px; align-items: stretch;
overflow-x: auto; overflow-y: hidden; padding-bottom: 14px;
scroll-behavior: auto; /* 横向滚轮由 view/scroll.ts 直接写 scrollLeft,不要被主题的平滑滚动拖慢 */
}
.sk-root .sk-col {
flex: 0 0 292px; display: flex; flex-direction: column; gap: 10px; min-height: 0;
padding: 14px 12px 12px; border-radius: var(--sk-r-xl); background: var(--sk-panel);
transition: box-shadow .15s ease, background-color .15s ease;
}
.sk-root .sk-col.is-over { box-shadow: inset 0 0 0 2px var(--sk-accent), inset 0 0 0 3px rgba(24, 25, 27, .08); }
.sk-root .sk-col-head { display: flex; align-items: center; gap: 8px; padding: 2px 4px 4px 10px; }
.sk-root .sk-col-title { font-size: calc(16px * var(--sk-fs, 1)); font-weight: 500; letter-spacing: -.01em; }
.sk-root .sk-col-count {
min-width: 24px; height: 24px; padding: 0 7px; display: inline-flex; align-items: center; justify-content: center;
border-radius: 999px; background: var(--sk-card); font-size: calc(12px * var(--sk-fs, 1)); color: var(--sk-text-2);
}
.sk-root .sk-done-mark { width: 22px; height: 22px; border-radius: 999px; background: var(--sk-accent); color: var(--sk-accent-ink); }
.sk-root .sk-done-mark svg { width: 13px; height: 13px; stroke-width: 2.5; }
.sk-root button.sk-col-more { background: var(--sk-card); border-radius: 999px; width: 32px; height: 32px; box-shadow: var(--sk-shadow); }
.sk-root .sk-col-list {
display: flex; flex-direction: column; gap: 10px;
flex: 1 1 auto; min-height: 60px; overflow-y: auto;
margin: 0 -4px; padding: 2px 4px 4px;
}
.sk-root .sk-col-nomatch { padding: 18px 8px; text-align: center; color: var(--sk-text-3); font-size: calc(13px * var(--sk-fs, 1)); }
/* ---------- 卡片 ---------- */
.sk-root .sk-card {
display: flex; flex-direction: column; gap: 6px;
padding: 14px 16px 14px; border-radius: var(--sk-r-lg);
background: var(--sk-card); box-shadow: var(--sk-shadow);
cursor: grab; outline: none;
transition: transform .15s ease, box-shadow .15s ease, opacity .15s ease;
}
.sk-root .sk-card:hover { transform: translateY(-1px); box-shadow: var(--sk-shadow-lift); }
.sk-root .sk-card.is-dragging { opacity: .35; transform: scale(.98); }
/* 只动变化的那张卡:新建 / 换列时轻轻浮现;删除时收起,下面的卡片自然补位 */
@keyframes sk-card-in {
from { opacity: 0; transform: translateY(6px) scale(.98); }
to { opacity: 1; transform: none; }
}
.sk-root .sk-card.is-entering { animation: sk-card-in .24s cubic-bezier(.2, .7, .2, 1); }
.sk-root .sk-card.is-leaving {
max-height: var(--sk-leave-h); overflow: hidden; pointer-events: none;
transition: max-height .2s ease, opacity .16s ease, transform .2s ease, margin .2s ease, padding .2s ease;
}
.sk-root .sk-card.is-leaving.is-gone {
max-height: 0; opacity: 0; transform: scale(.97);
margin-bottom: -10px; padding-top: 0; padding-bottom: 0; /* -10px 抵消列表的 gap */
}
@media (prefers-reduced-motion: reduce) {
.sk-root .sk-card.is-entering { animation: none; }
.sk-root .sk-card.is-leaving { transition: none; }
}
.sk-root .sk-card.is-done .sk-card-title { color: var(--sk-text-3); text-decoration-line: line-through; text-decoration-color: var(--sk-line); }
.sk-root .sk-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.sk-root .sk-chip {
display: inline-flex; align-items: center; gap: 6px;
height: 28px; padding: 0 11px 0 10px; border-radius: 999px;
background: var(--sk-chip); color: var(--sk-text-2); font-size: calc(12.5px * var(--sk-fs, 1)); white-space: nowrap;
}
.sk-root .sk-chip .sk-ico svg { width: 14px; height: 14px; }
.sk-root .sk-chip.is-overdue { background: var(--sk-danger-bg); color: var(--sk-danger); }
.sk-root .sk-donechip { background: var(--sk-accent); color: var(--sk-accent-ink); }
/* 优先级信号条 */
.sk-root .sk-bars { display: inline-flex; align-items: flex-end; gap: 2px; height: 12px; }
.sk-root .sk-bars span { width: 2.5px; border-radius: 2px; background: currentColor; opacity: .22; }
.sk-root .sk-bars span:nth-child(1) { height: 4px; }
.sk-root .sk-bars span:nth-child(2) { height: 7px; }
.sk-root .sk-bars span:nth-child(3) { height: 10px; }
.sk-root .sk-bars span:nth-child(4) { height: 12px; }
.sk-root .sk-bars span.on { opacity: 1; }
.sk-root .sk-prio-critical { background: var(--sk-danger-bg); color: var(--sk-danger); }
.sk-root .sk-card-title { font-size: calc(16px * var(--sk-fs, 1)); font-weight: 500; line-height: 1.35; letter-spacing: -.01em; color: var(--sk-text); word-break: break-word; }
.sk-root .sk-card-sub { font-size: calc(13px * var(--sk-fs, 1)); line-height: 1.45; color: var(--sk-text-3); word-break: break-word; }
.sk-root .sk-card-foot { display: flex; align-items: center; gap: 10px; margin-top: 8px; }
.sk-root .sk-card-person { font-size: calc(13px * var(--sk-fs, 1)); color: var(--sk-text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sk-root .sk-card-value { font-size: calc(14.5px * var(--sk-fs, 1)); font-weight: 500; color: var(--sk-text); font-variant-numeric: tabular-nums; }
.sk-root .sk-placeholder {
flex: none; height: 56px; border-radius: var(--sk-r-lg);
border: 1.5px dashed var(--sk-text-3); background: rgba(127, 127, 127, .06);
}
/* 紧凑模式 */
.sk-root.is-compact .sk-card { padding: 10px 14px; gap: 4px; }
.sk-root.is-compact .sk-card-sub,
.sk-root.is-compact .sk-card-person { display: none; }
.sk-root.is-compact .sk-card-foot { margin-top: 2px; }
.sk-root.is-compact .sk-chips { margin-bottom: 2px; }
.sk-root.is-compact .sk-chip { height: 24px; }
.sk-root.is-compact .sk-card-title { font-size: calc(14.5px * var(--sk-fs, 1)); }
/* 更多 / 添加 */
.sk-root button.sk-more,
.sk-root button.sk-add-card {
justify-content: center; width: 100%; height: 46px; flex: none;
border-radius: var(--sk-r-lg); color: var(--sk-text-2); font-size: calc(13.5px * var(--sk-fs, 1));
}
.sk-root button.sk-more { background: var(--sk-panel-2); }
.sk-root button.sk-more:hover { background: var(--sk-card); box-shadow: var(--sk-shadow); color: var(--sk-text); }
.sk-root button.sk-add-card { color: var(--sk-text-3); }
.sk-root button.sk-add-card:hover { background: var(--sk-panel-2); color: var(--sk-text); }
.sk-root .sk-col-add { flex: 0 0 220px; }
.sk-root button.sk-add-col {
width: 100%; height: 56px; justify-content: center; border-radius: var(--sk-r-xl);
border: 1.5px dashed var(--sk-line); color: var(--sk-text-3);
}
.sk-root button.sk-add-col:hover { border-color: var(--sk-text-3); color: var(--sk-text); }
/* ---------- 空状态 ---------- */
.sk-root .sk-empty {
display: flex; flex-direction: column; align-items: flex-start; gap: 6px;
padding: 18px 18px 20px; border-radius: var(--sk-r-lg); background: var(--sk-card); box-shadow: var(--sk-shadow);
}
.sk-root .sk-empty-art { position: relative; width: 100%; height: 132px; margin-bottom: 14px; }
.sk-root .sk-empty-win {
position: absolute; inset: 0 6px 0 12px; padding: 10px 12px;
border-radius: 14px; background: var(--sk-panel);
}
.sk-root .sk-empty-dots { display: flex; gap: 4px; margin-bottom: 10px; }
.sk-root .sk-empty-dots span { width: 5px; height: 5px; border-radius: 999px; background: var(--sk-text-3); opacity: .4; }
.sk-root .sk-empty-grid { display: grid; grid-template-columns: 1fr 1.2fr 1fr; gap: 8px; height: 82px; }
.sk-root .sk-empty-tile { border-radius: 9px; background: var(--sk-card); }
.sk-root .sk-empty-tile:nth-child(1) { height: 30px; }
.sk-root .sk-empty-tile:nth-child(3) { height: 30px; }
.sk-root .sk-empty-pill {
position: absolute; right: 22px; top: 74px; width: 50px; height: 26px;
display: flex; align-items: center; justify-content: center;
border-radius: 999px; background: var(--sk-accent); color: var(--sk-accent-ink);
box-shadow: 0 4px 12px rgba(0, 0, 0, .10);
}
.sk-root .sk-empty-pill svg { width: 15px; height: 15px; stroke-width: 2.5; }
.sk-root .sk-empty-float {
position: absolute; left: 0; bottom: 4px; width: 64px; height: 42px; padding: 12px 10px;
display: flex; flex-direction: column; gap: 5px;
border-radius: 10px; background: var(--sk-card); box-shadow: var(--sk-shadow-lift); transform: rotate(-6deg);
}
.sk-root .sk-empty-float span { height: 3px; border-radius: 3px; background: var(--sk-text); }
.sk-root .sk-empty-float span:last-child { width: 70%; opacity: .25; }
.sk-root .sk-empty-title { font-size: calc(16px * var(--sk-fs, 1)); font-weight: 500; }
.sk-root .sk-empty-desc { font-size: calc(13px * var(--sk-fs, 1)); line-height: 1.5; color: var(--sk-text-3); margin-bottom: 10px; }
/* ---------- 列表视图 ---------- */
.sk-root .sk-listwrap { flex: 1 1 auto; overflow: auto; border-radius: var(--sk-r-xl); background: var(--sk-panel); padding: 8px; }
.sk-root .sk-table { width: 100%; border-collapse: separate; border-spacing: 0 6px; }
.sk-root .sk-table th {
text-align: left; font-weight: 500; font-size: calc(12px * var(--sk-fs, 1)); color: var(--sk-text-3);
padding: 6px 14px; white-space: nowrap;
}
.sk-root .sk-table td { padding: 12px 14px; background: var(--sk-card); vertical-align: middle; white-space: nowrap; }
.sk-root .sk-table td:first-child { border-radius: 14px 0 0 14px; white-space: normal; min-width: 220px; }
.sk-root .sk-table td:last-child { border-radius: 0 14px 14px 0; text-align: right; }
.sk-root .sk-table tbody tr { cursor: pointer; }
.sk-root .sk-table tbody tr:hover td { background: var(--sk-panel-2); }
.sk-root .sk-table tr.is-done .sk-card-title { color: var(--sk-text-3); text-decoration-line: line-through; }
.sk-root .sk-table .sk-avatar { vertical-align: middle; }
/* ---------- 弹窗 ---------- */
.modal.sk-modal { border-radius: 22px; max-width: 520px; }
.modal.sk-modal h3 { margin: 0 0 8px; font-size: calc(20px * var(--sk-fs, 1)); font-weight: 600; letter-spacing: -.02em; }
.modal.sk-modal .setting-item { padding: 10px 0; border-top: 1px solid var(--background-modifier-border); }
.modal.sk-modal .setting-item:first-of-type { border-top: 0; }
.modal.sk-modal input[type="text"],
.modal.sk-modal input[type="date"],
.modal.sk-modal textarea,
.modal.sk-modal select { border-radius: 10px; min-width: 220px; }
.modal.sk-modal textarea { width: 100%; resize: vertical; }
.modal.sk-modal button { border-radius: 999px; padding: 0 18px; }
.modal.sk-modal .sk-modal-actions { border-top: 0; padding-top: 16px; }
.modal.sk-modal .sk-modal-actions .setting-item-control { justify-content: flex-end; gap: 8px; }
/* ---------- 窄屏 ---------- */
@media (max-width: 760px) {
.sk-root { padding: 10px; gap: 10px; flex-direction: column; overflow-y: auto; }
.sk-root .sk-side { flex: none; width: auto; max-height: none; }
.sk-root.sk-side-hidden .sk-side { display: none; }
.sk-root .sk-title { font-size: calc(30px * var(--sk-fs, 1)); }
.sk-root .sk-col { flex-basis: 84vw; }
}
/* ---------- 顶部“显示”按钮 ---------- */
.sk-root button.sk-ghost-pill {
height: 48px; padding: 0 18px 0 16px; border-radius: 999px;
background: var(--sk-panel); color: var(--sk-text-2); font-size: calc(13.5px * var(--sk-fs, 1));
}
.sk-root button.sk-ghost-pill:hover { background: var(--sk-panel-2); color: var(--sk-text); }
/* ---------- 卡片图片 ---------- */
.sk-root { --sk-cover-h: 168px; }
.sk-root.sk-img-h-s { --sk-cover-h: 120px; }
.sk-root.sk-img-h-m { --sk-cover-h: 168px; }
.sk-root.sk-img-h-l { --sk-cover-h: 240px; }
/* 封面:在卡片内留 8px 边框,圆角与卡片同心 */
.sk-root .sk-cover {
position: relative;
height: var(--sk-cover-h);
margin: -6px -8px 8px;
border-radius: 10px;
overflow: hidden;
background: var(--sk-chip);
cursor: zoom-in;
isolation: isolate;
}
.sk-root .sk-cover::after {
/* 细内描边,避免白底图片和卡片糊在一起 */
content: ""; position: absolute; inset: 0; border-radius: inherit;
box-shadow: inset 0 0 0 1px rgba(24, 25, 27, .06); pointer-events: none;
}
.theme-dark .sk-root .sk-cover::after { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .06); }
.sk-root .sk-cover img,
.sk-root .sk-thumb img {
display: block; width: 100%; height: 100%;
object-fit: cover; object-position: center;
opacity: 0;
transition: opacity .35s ease, transform .45s cubic-bezier(.2, .7, .2, 1);
}
.sk-root .sk-cover.is-loaded img,
.sk-root .sk-thumb.is-loaded img { opacity: 1; }
/* 重绘时已加载过的图片:直接显示,只保留悬停放大的过渡 */
.sk-root .sk-cover.no-fade img,
.sk-root .sk-thumb.no-fade img { transition: transform .45s cubic-bezier(.2, .7, .2, 1); }
.sk-root .sk-card:hover .sk-cover img { transform: scale(1.035); }
/* 完整显示(适合图纸、截图) */
.sk-root.sk-img-contain .sk-cover { background: var(--sk-panel); }
.sk-root.sk-img-contain .sk-cover img { object-fit: contain; padding: 6px; }
.sk-root.sk-img-contain .sk-card:hover .sk-cover img { transform: none; }
/* 多图角标 */
.sk-root .sk-img-count {
position: absolute; right: 8px; bottom: 8px; z-index: 1;
display: inline-flex; align-items: center; gap: 4px;
height: 24px; padding: 0 9px 0 7px; border-radius: 999px;
background: rgba(20, 20, 22, .58); color: #FFFFFF;
font-size: calc(11.5px * var(--sk-fs, 1)); font-weight: 500;
-webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
}
.sk-root .sk-img-count .sk-ico svg { width: 13px; height: 13px; }
/* 加载失败 / 找不到文件 */
.sk-root .sk-cover.is-broken,
.sk-root .sk-thumb.is-broken {
display: flex; align-items: center; justify-content: center;
color: var(--sk-text-3); cursor: default;
}
.sk-root .sk-cover.is-broken { height: 64px; }
/* 缩略图布局 */
.sk-root .sk-card-row { display: flex; align-items: flex-start; gap: 12px; }
.sk-root .sk-card-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.sk-root .sk-thumb {
position: relative; flex: none;
width: 64px; height: 64px; border-radius: 12px; overflow: hidden;
background: var(--sk-chip); cursor: zoom-in;
box-shadow: inset 0 0 0 1px rgba(24, 25, 27, .06);
}
.sk-root .sk-thumb .sk-img-count { right: 4px; bottom: 4px; height: 18px; padding: 0 6px 0 5px; font-size: 10px; }
.sk-root .sk-thumb .sk-img-count .sk-ico { display: none; }
.sk-root.is-compact .sk-thumb { width: 44px; height: 44px; border-radius: 10px; }
.sk-root .sk-thumb-sm { width: 40px; height: 40px; border-radius: 10px; }
.sk-root .sk-list-cell { display: flex; align-items: center; gap: 12px; }
/* 把图片文件拖到卡片上时 */
.sk-root .sk-card.is-file-over {
box-shadow: 0 0 0 2px var(--sk-accent), 0 0 0 4px rgba(24, 25, 27, .08), var(--sk-shadow-lift);
transform: translateY(-1px);
}
/* ---------- 弹窗里的图片区 ---------- */
.modal.sk-modal .sk-img-setting { padding-bottom: 4px; }
.modal.sk-modal .sk-img-zone {
display: grid; grid-template-columns: repeat(auto-fill, minmax(104px, 1fr)); gap: 10px;
padding: 4px 0 14px; border-radius: 14px;
transition: background-color .15s ease, box-shadow .15s ease;
}
.modal.sk-modal .sk-img-zone.is-over { background: var(--background-secondary); box-shadow: 0 0 0 2px var(--interactive-accent); }
.modal.sk-modal .sk-img-tile {
position: relative; aspect-ratio: 4 / 3; border-radius: 12px; overflow: hidden;
background: var(--background-secondary); cursor: zoom-in;
display: flex; align-items: center; justify-content: center; color: var(--text-muted);
box-shadow: inset 0 0 0 1px var(--background-modifier-border);
}
.modal.sk-modal .sk-img-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
.modal.sk-modal .sk-img-tile.is-cover { box-shadow: 0 0 0 2px var(--text-normal); }
.modal.sk-modal .sk-img-badge {
position: absolute; left: 6px; top: 6px; height: 20px; padding: 0 8px;
display: inline-flex; align-items: center; border-radius: 999px;
background: var(--sk-accent-global, #D7F25C); color: var(--sk-accent-ink-global, #18191B); font-size: 11px; font-weight: 600;
}
.modal.sk-modal button.sk-img-act {
position: absolute; top: 6px; width: 26px; height: 26px; padding: 0;
display: flex; align-items: center; justify-content: center;
border: 0; border-radius: 999px; box-shadow: none;
background: rgba(20, 20, 22, .6); color: #FFFFFF; cursor: pointer;
opacity: 0; transition: opacity .15s ease;
-webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
}
.modal.sk-modal button.sk-img-act svg { width: 14px; height: 14px; }
.modal.sk-modal button.sk-img-del { right: 6px; }
.modal.sk-modal button.sk-img-star { right: 38px; }
.modal.sk-modal .sk-img-tile:hover button.sk-img-act,
.modal.sk-modal button.sk-img-act:focus-visible { opacity: 1; }
@media (hover: none) { .modal.sk-modal button.sk-img-act { opacity: 1; } }
.modal.sk-modal button.sk-img-add {
aspect-ratio: 4 / 3; height: auto; padding: 0;
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
border-radius: 12px; border: 1.5px dashed var(--background-modifier-border-hover, var(--background-modifier-border));
background: transparent; box-shadow: none; color: var(--text-muted); font-size: 12px; cursor: pointer;
}
.modal.sk-modal button.sk-img-add:hover { border-color: var(--text-muted); color: var(--text-normal); background: var(--background-secondary); }
/* ---------- 图片大图预览 ---------- */
/* 背景用纯深色,透明度沿用 Obsidian 自己的遮罩设置(约 85%),不再用 !important 覆盖 */
.modal-container.sk-lightbox-container .modal-bg { background: #0B0B0C; }
.modal.sk-lightbox {
width: auto; max-width: 94vw; max-height: 94vh; padding: 10px;
border-radius: 20px; border: 0; background: var(--background-primary);
box-shadow: 0 30px 80px rgba(0, 0, 0, .45);
}
.modal.sk-lightbox .modal-close-button { top: 14px; right: 14px; color: #FFFFFF; background: rgba(20, 20, 22, .55); border-radius: 999px; }
.sk-lightbox .sk-lb-stage { display: flex; justify-content: center; border-radius: 12px; overflow: hidden; background: var(--background-secondary); }
.sk-lightbox .sk-lb-stage img {
display: block; max-width: calc(94vw - 20px); max-height: calc(94vh - 72px);
object-fit: contain; opacity: 0; transition: opacity .25s ease;
}
.sk-lightbox .sk-lb-stage.is-loaded img { opacity: 1; }
.sk-lightbox .sk-lb-bar { display: flex; align-items: center; gap: 10px; padding: 10px 6px 2px; font-size: 13px; color: var(--text-muted); }
.sk-lightbox .sk-lb-name { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sk-lightbox .sk-lb-count { font-variant-numeric: tabular-nums; }
.sk-lightbox button.sk-lb-nav { width: 34px; height: 34px; padding: 0; border-radius: 999px; display: flex; align-items: center; justify-content: center; }
/* ---------- 设置页:强调色色板 ---------- */
.sk-swatches { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
.sk-swatches button.sk-swatch {
width: 28px; height: 28px; padding: 0; border-radius: 999px; border: 0; cursor: pointer;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .12);
transition: transform .12s ease, box-shadow .12s ease;
}
.sk-swatches button.sk-swatch:hover { transform: scale(1.1); }
.sk-swatches button.sk-swatch.is-active { box-shadow: 0 0 0 2px var(--background-primary), 0 0 0 4px var(--text-normal); }
.sk-swatches .sk-swatch-sep { width: 1px; height: 22px; margin: 0 4px; background: var(--background-modifier-border); }
.sk-accent-preview {
display: flex; align-items: center; gap: 10px; margin-top: 8px;
}
.sk-accent-preview .sk-pv-chip {
display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border-radius: 999px;
background: var(--sk-accent-global, #D7F25C); color: var(--sk-accent-ink-global, #18191B); font-size: 12px; font-weight: 600;
}
+235
View File
@@ -0,0 +1,235 @@
{
"main": {
"id": "72628acbd22d92f4",
"type": "split",
"children": [
{
"id": "895d491d16dc1a79",
"type": "tabs",
"children": [
{
"id": "788e9f9f8d48018e",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "环境清单/对外服务.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "对外服务"
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "c7cb115332657a14",
"type": "split",
"children": [
{
"id": "f3db18085b3622a4",
"type": "tabs",
"children": [
{
"id": "405f544c502fd482",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-folder-closed",
"title": "文件列表"
}
},
{
"id": "51972874f3b64ab1",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
},
"icon": "lucide-search",
"title": "搜索"
}
},
{
"id": "7f740a5e1c83b1cc",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {},
"icon": "lucide-bookmark",
"title": "Bookmarks"
}
}
]
}
],
"direction": "horizontal",
"width": 226.30001831054688
},
"right": {
"id": "4888b7af2cbe8a43",
"type": "split",
"children": [
{
"id": "3d9e1dae10677018",
"type": "tabs",
"children": [
{
"id": "6fa6de46ab10115c",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "Backlinks"
}
},
{
"id": "4f6bc585964deb22",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "Outgoing links"
}
},
{
"id": "76621f49d426e818",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-tags",
"title": "Tags"
}
},
{
"id": "6679b08573856ac0",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline"
}
},
{
"id": "7ea3370367ba3f81",
"type": "leaf",
"state": {
"type": "git-view",
"state": {},
"icon": "git-pull-request",
"title": "Source Control"
}
}
],
"currentTab": 4
}
],
"direction": "horizontal",
"width": 300
},
"left-ribbon": {
"hiddenItems": {
"bases:新建数据库": true,
"switcher:打开快速切换": false,
"graph:查看关系图谱": false,
"canvas:新建白板": false,
"templates:插入模板": false,
"command-palette:打开命令面板": false,
"daily-notes:打开/创建今天的日记": false,
"studio-kanban:新建看板": false,
"obsidian-git:Open Git source control": false
}
},
"active": "405f544c502fd482",
"lastOpenFiles": [
"Clippings/attach/Image.webp",
"Clippings/attach/Image.png",
"Clippings/attach/Image 8.jpg",
"Clippings/attach/Image.jpg",
"Clippings/attach/Image 9.jpg",
"Clippings/attach/Image 4.jpg",
"Clippings/attach/Image 5.jpg",
"Clippings/attach/Image 6.jpg",
"Clippings/attach/Image 7.jpg",
"Clippings/attach/Image 2.jpg",
"Clippings/attach/Image 1.jpg",
"Clippings/attach",
"日记/2026-11 45.md",
"日记/2026-10 44.md",
"1 使用/服务器初始化.md",
"日记/归档/2026年11月.md",
"日记/归档/2026/2026-10 43.md",
"日记/归档/2026/2026-10 44.md",
"日记/归档/2026/2026-10 42.md",
"日记/归档/2026/2026-10 41.md",
"日记/归档/2026/2026年10月.md",
"日记/归档/2026/2026年9月.md",
"日记/2026年9月.md",
"日记/归档/2026年10月.md",
"3 札记/杭州房屋维护.md",
"日记/归档/2026-10 43.md",
"日记/归档/2026-10 42.md",
"日记/归档/2026-10 41.md",
"日记/归档/2026-10 44.md",
"sunyard/丢失密码机仅剩密码卡.md",
"Quant/天天/2026年11月.md",
"Quant/知识库/美林时钟.md",
"1 使用/git/git 初始化 gitinit.md",
"项目/awesome 牛!软件.md",
"项目/Plan.md",
"3 札记/维修记录.md",
"3 札记/万荣房屋维护.md",
"日记/未命名.base",
"Quant/知识库/attach",
"Quant/知识库",
"项目/归档/attach",
"其他/obsidian/attach",
"未命名.base",
"项目/归档",
"未命名 2.canvas",
"未命名 1.canvas",
"未命名.canvas",
"3 札记/高项",
"3 札记/音乐"
]
}