/* dnfs.css — 树状笔记页专属美化(在 theme.css / codeblock.css 之后加载,视觉语言与首页 index.css 对齐) */ ::selection { background: var(--accent-glow); color: var(--fg); } /* ===== 页面底纹:极淡点阵 + 顶部暖光,增加层次不影响阅读 ===== */ body::before { content: ""; position: fixed; inset: 0; z-index: -1; background-image: radial-gradient(var(--border) 1px, transparent 1px); background-size: 26px 26px; -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 55%); mask-image: linear-gradient(180deg, #000 0%, transparent 55%); pointer-events: none; } body::after { content: ""; position: fixed; left: 50%; top: -160px; width: 720px; height: 480px; transform: translateX(-50%); z-index: -1; background: radial-gradient(ellipse, var(--accent-glow), transparent 65%); opacity: 0.3; pointer-events: none; } /* ===== 节点卡片入场:逐张淡入(JS 动态插入时播放) ===== * 防御性约定:只动画 opacity、不带 transform——祖先 transform 会成为 fixed 后代的包含块。 * 全屏特效 iframe 现已直接挂载 body(见 dnfs.js renderSpJs),不再受卡片动画影响 */ @keyframes card-in { from { opacity: 0; } to { opacity: 1; } } /* 带位移的入场仅用于不含 fixed 后代的骨架元素; * 不含 .minimap——它自身依赖 transform: translateY(-50%) 垂直居中,动画会覆盖 */ @keyframes rise-in { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } } @media (prefers-reduced-motion: no-preference) { .recommend-list .card { animation: card-in 0.45s ease both; } .recommend-list .card:nth-of-type(2) { animation-delay: 0.05s; } .recommend-list .card:nth-of-type(3) { animation-delay: 0.1s; } .recommend-list .card:nth-of-type(4) { animation-delay: 0.15s; } .recommend-list .card:nth-of-type(5) { animation-delay: 0.2s; } .recommend-list .card:nth-of-type(6) { animation-delay: 0.25s; } .recommend-list .card:nth-of-type(7) { animation-delay: 0.3s; } .recommend-list .card:nth-of-type(n+8) { animation-delay: 0.35s; } /* 首屏骨架元素入场 */ .searchbox, .node-form { animation: rise-in 0.4s ease both; } .node-form { animation-delay: 0.1s; } .userpanel, .minimap { animation: card-in 0.4s ease both; } } /* ===== 搜索框:hover 升温(focus 高亮由 theme.css 提供) ===== */ .searchbox:hover { border-color: var(--border); box-shadow: var(--shadow-md); } /* ===== 节点编辑卡:品牌渐变顶条 + 聚焦光环 ===== */ .node-form { position: relative; overflow: hidden; } .node-form::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--accent), var(--accent-dark)); opacity: 0.85; } .node-form:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-glow), var(--shadow-md); } /* ===== 编辑卡按钮:提交渐变 / 重置柔色 / 删除警示 ===== */ #input-note-submit { background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%); color: #fff; box-shadow: 0 2px 10px rgba(232, 133, 58, 0.3); transition: transform 0.18s, box-shadow 0.22s, opacity 0.15s; } #input-note-submit:not(:disabled):hover { opacity: 1; transform: translateY(-1px); box-shadow: 0 5px 16px rgba(232, 133, 58, 0.38); } #input-note-submit:not(:disabled):active { transform: scale(0.96); } #input-note-clear { background: var(--accent-soft); color: var(--accent-dark); border: 1px solid var(--accent-glow); transition: transform 0.18s, border-color 0.18s, opacity 0.15s; } #input-note-clear:not(:disabled):hover { opacity: 1; transform: translateY(-1px); border-color: var(--accent); } #input-note-clear:not(:disabled):active { transform: scale(0.96); } #delete-note { background: var(--error-bg); color: var(--error); border: 1px solid transparent; transition: transform 0.18s, border-color 0.18s, opacity 0.15s; } #delete-note:not(:disabled):hover { opacity: 1; transform: translateY(-1px); border-color: var(--error); } #delete-note:not(:disabled):active { transform: scale(0.96); }