/* 项目中心 1.6 · 延续 1.4 液态玻璃外观。按原级联顺序保留有效规则；过期声明已移除。 */
.mobile-login { width: min(100%, 520px); margin: 12vh auto; padding: 20px; }
.mobile-login main, .mobile-login form { display: grid; gap: 16px; }
.mobile-login label { display: grid; gap: 8px; }
.mobile-readonly { position: sticky; top: 0; z-index: 100; padding: 10px 16px; background: var(--surface); color: var(--ink); border-bottom: 1px solid var(--line); font-size: 14px; }
.mobile-readonly button { margin-left: 12px; color: var(--accent); }
#extensions form { display: grid; gap: 12px; }
#extensions hr { border: 0; border-top: 1px solid var(--line); margin: 24px 0; }
#extensions input { min-width: 0; }
#extensions { scroll-margin-top: 24px; }
:root { --bg: transparent; --indigo: #4341c0; --red: #c00018; --orange: #a84200; --green: #18712f; --graphite: #4f4f55; --indigo-soft: rgba(88,86,214,.13); --red-soft: rgba(224,16,43,.11); --orange-soft: rgba(224,106,0,.13); --green-soft: rgba(40,160,70,.13); --gray-soft: rgba(118,118,128,.13); --violet-dot: #8e44ad; --blue-dot: #0071e3; --teal-dot: #0a7f8f; --amber-dot: #c26a00; --rose-dot: #c4314b; --font: "Microsoft YaHei UI","Microsoft YaHei",-apple-system,BlinkMacSystemFont,"PingFang SC","Segoe UI Variable Text","Segoe UI","Noto Sans SC",sans-serif; --mono: "Cascadia Mono",Consolas,"SF Mono",Menlo,monospace; --ts: 1.12; color-scheme: light; }
/* 深色只在设置中手动选择时启用，不跟随系统。 */
:root[data-theme=dark] { --fill: rgba(255,255,255,.1); --fill-2: rgba(255,255,255,.16); --ink: #f5f5f7; --ink-2: #d6d6dc; --ink-3: #bdbdc6; --blue: #6cb2ff; --indigo: #9d9bff; --red: #ff7676; --orange: #ffa65c; --green: #5edc80; --graphite: #c7c7cc; --blue-soft: rgba(10,132,255,.2); --indigo-soft: rgba(94,92,230,.24); --red-soft: rgba(255,69,58,.2); --orange-soft: rgba(255,159,10,.2); --green-soft: rgba(48,209,88,.18); --gray-soft: rgba(255,255,255,.1); --shadow-raised: 0 18px 50px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.1); color-scheme: dark; }
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; color: var(--ink); font-family: var(--font); font-size: calc(16px * var(--ts)); line-height: 1.6; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; text-underline-offset: 3px; }
h1,h2,h3,h4 { margin: 0; color: var(--ink); line-height: 1.3; }
h1 { font-size: calc(30px * var(--ts)); }
h2 { font-size: calc(19px * var(--ts)); font-weight: 600; }
h3 { font-size: calc(16px * var(--ts)); font-weight: 600; }
h4 { font-size: calc(15px * var(--ts)); font-weight: 600; margin: 14px 0 4px; }
p { margin: 0; }
button,input,select,textarea { font: inherit; color: inherit; }
:focus-visible { outline: 3px solid color-mix(in srgb,var(--accent-bg) 55%,transparent); outline-offset: 2px; border-radius: 6px; }
.hidden { display: none !important; }
.muted,.hint,.form-help { color: var(--ink-3); font-size: calc(14px * var(--ts)); }
.hint { margin-top: 10px; }
.hint.ok { color: var(--green); }
.mono { font-family: var(--mono); font-size: calc(14px * var(--ts)); word-break: break-all; }
.text { white-space: pre-wrap; overflow-wrap: anywhere; color: var(--ink); }
.icon { fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.icon.sm { width: 16px; height: 16px; }
svg { fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
/* —— 框架 —— */
.sidebar { position: fixed; inset: 0 auto 0 0; width: var(--sidebar); padding: 18px 12px; display: flex; flex-direction: column; gap: 4px; z-index: 20; }
.brand { display: flex; align-items: center; gap: 10px; padding: 6px 10px 16px; color: var(--ink); font-size: calc(17px * var(--ts)); font-weight: 700; }
.brand:hover { text-decoration: none; }
.brand-mark { width: 26px; height: 26px; position: relative; }
.brand-mark::after { content: ""; position: absolute; inset: 7px; border: 2px solid #fff; border-radius: 4px; }
.side-nav { display: flex; flex-direction: column; gap: 2px; }
.side-nav a { display: flex; align-items: center; gap: 10px; font-size: calc(15px * var(--ts)); }
.side-nav a:hover { text-decoration: none; }
.side-label { margin: 18px 10px 4px; }
.side-foot { margin-top: auto; padding: 10px; display: flex; align-items: center; gap: 8px; font-size: calc(14px * var(--ts)); }
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #30b74f; box-shadow: 0 0 0 3px color-mix(in srgb,#30b74f 25%,transparent); }
main { margin-left: var(--sidebar); min-height: 100vh; padding: 0 40px 64px; }
.topbar { position: sticky; top: 0; z-index: 10; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.crumb { font-size: calc(15px * var(--ts)); font-weight: 600; color: var(--ink-2); }
.top-actions { display: flex; align-items: center; gap: 8px; }
.top-search { display: flex; align-items: center; gap: 8px; min-width: 280px; color: var(--ink-3); font-size: calc(14px * var(--ts)); }
.top-search:hover { text-decoration: none; }
.top-search svg { width: 16px; height: 16px; }
.top-search span { flex: 1; }
kbd { font-family: var(--font); font-size: calc(14px * var(--ts)); color: var(--ink-3); padding: 0 6px; border-radius: 5px; box-shadow: var(--shadow); }
.icon-btn { display: inline-grid; place-items: center; width: 36px; height: 36px; border: 0; background: transparent; color: var(--ink-2); cursor: pointer; }
.icon-btn svg { width: 20px; height: 20px; }
.icon-btn.subtle { width: 30px; height: 30px; color: var(--ink-3); }
.icon-btn.subtle svg { width: 16px; height: 16px; }
#app { max-width: 1480px; margin: 0 auto; }
.loading { padding: 80px 0; text-align: center; color: var(--ink-3); }
.tabbar { display: none; }
/* —— 页头与通用块 —— */
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; padding: 28px 0 22px; }
.page-head h1 { overflow-wrap: anywhere; }
.subtitle { margin-top: 6px; color: var(--ink-2); font-size: calc(16px * var(--ts)); }
.actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.section { margin-top: 28px; }
.section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
.count { display: inline-block; margin-left: 6px; color: var(--ink-3); font-size: calc(16px * var(--ts)); font-weight: 500; }
.panel { background: var(--surface); box-shadow: var(--shadow); min-width: 0; }
.panel+.panel { margin-top: 16px; }
.panel h2+.text,.panel h2+p,.panel h2+div,.panel h2+form { margin-top: 12px; }
.panel>p.muted { margin-top: 12px; }
.spaced { margin-top: 22px; }
.two-column { display: grid; grid-template-columns: minmax(0,1.25fr) minmax(0,1fr); gap: 16px; margin-top: 28px; align-items: start; }
.two-column>.panel+.panel { margin-top: 0; }
.text-link,.inline-link { font-size: calc(15px * var(--ts)); color: var(--accent); }
.section-note { color: var(--ink-2); font-size: calc(15px * var(--ts)); margin: 6px 0 12px; }
.empty { padding: 40px 24px; text-align: center; background: var(--surface); border-radius: var(--r-lg); box-shadow: var(--shadow); }
.empty h3 { font-size: calc(17px * var(--ts)); }
.empty p { margin: 6px auto 16px; max-width: 36em; color: var(--ink-2); }
.error-panel { margin-top: 32px; padding: 18px 20px; border-radius: var(--r); background: var(--red-soft); color: var(--red); font-weight: 600; }
.banner { margin: 12px 0 0; padding: 12px 16px; border-radius: var(--r); background: var(--orange-soft); color: var(--orange); font-size: calc(15px * var(--ts)); font-weight: 600; }
.toast { position: fixed; left: 50%; bottom: 28px; transform: translateX(-50%); z-index: 60; max-width: min(560px,calc(100vw - 32px)); padding: 12px 18px; background: color-mix(in srgb,var(--ink) 92%,transparent); font-size: calc(15px * var(--ts)); font-weight: 600; box-shadow: var(--shadow-raised); }
.toast.error { background: var(--red); }
details>summary { cursor: pointer; color: var(--accent); font-size: calc(15px * var(--ts)); list-style-position: inside; }
details[open]>summary { margin-bottom: 8px; }
pre { margin: 8px 0 0; padding: 12px 14px; border-radius: var(--r-sm); background: var(--surface-2); box-shadow: inset 0 0 0 1px var(--line-soft); font-family: var(--mono); font-size: calc(14px * var(--ts)); line-height: 1.55; white-space: pre-wrap; overflow-wrap: anywhere; max-height: 420px; overflow: auto; color: var(--ink); }
.history,.source { margin-top: 18px; }
/* —— 按钮与表单 —— */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: 0; background: var(--accent-bg); color: #fff; cursor: pointer; white-space: nowrap; }
.btn:hover { background: var(--accent-bg-hover); text-decoration: none; }
.btn.danger { color: #fff; }
.btn.small { font-size: calc(15px * var(--ts)); }
.btn:disabled { opacity: .5; cursor: default; }
.btn .icon { color: currentColor; }
.form-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 16px 18px; }
.field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.field.wide { grid-column: 1/-1; }
.field label,.new-form-fields h3 { font-size: calc(15px * var(--ts)); font-weight: 600; color: var(--ink); }
input:where(:not([type=checkbox]):not([type=radio])),select,textarea { width: 100%; min-height: 40px; padding: 8px 12px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font-size: calc(16px * var(--ts)); }
textarea { min-height: 104px; resize: vertical; line-height: 1.55; }
input::placeholder,textarea::placeholder { color: var(--ink-3); }
input:where(:focus),select:where(:focus),textarea:where(:focus) { outline: none; border-color: var(--accent-bg); box-shadow: 0 0 0 3px color-mix(in srgb,var(--accent-bg) 25%,transparent); }
select { padding-right: 34px; }
input[type=checkbox] { width: 20px; height: 20px; accent-color: var(--accent-bg); cursor: pointer; flex: none; }
.check-label { display: inline-flex; align-items: center; gap: 8px; font-size: calc(15px * var(--ts)); color: var(--ink); cursor: pointer; }
form.panel>.actions,#task-form .actions,#project-form .actions { margin-top: 22px; }
.panel h2:not(:first-child) { margin-top: 24px; }
.new-form-fields { margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--line-soft); }
.new-form-fields h3 { margin-bottom: 12px; }
#project-form>h2 { margin: 24px 0 4px; }
.directory { display: grid; grid-template-columns: minmax(0,1fr) 150px auto auto; gap: 10px; align-items: center; margin-bottom: 10px; }
#add-dir { margin-top: 2px; }
#entry-form .btn { margin-top: 16px; }
#entry-form textarea { min-height: 76px; }
.setting-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.setting-row select { max-width: 420px; }
#settings-form .actions { margin-top: 14px; }
.search-form { display: flex; gap: 10px; margin-bottom: 20px; }
.search-form input { min-height: 44px; border-radius: 12px; font-size: calc(17px * var(--ts)); }
.search-result { padding: 14px 0; border-top: 1px solid var(--line-soft); }
.search-result:first-of-type { border-top: 0; }
.search-result h3 { display: inline; margin-right: 8px; }
.search-result .text { margin-top: 6px; color: var(--ink-2); font-size: calc(15px * var(--ts)); }
.pagination { display: flex; align-items: center; justify-content: flex-end; gap: 10px; margin-top: 14px; color: var(--ink-3); font-size: calc(14px * var(--ts)); }
/* —— 标签、状态 —— */
.tag,.pill,.badge { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: 999px; font-size: calc(14px * var(--ts)); font-weight: 600; white-space: nowrap; background: var(--gray-soft); color: var(--ink-2); vertical-align: middle; }
.tag+.tag { margin-left: 6px; }
.tag.blue,.pill.s-doing { background: var(--blue-soft); color: var(--blue); }
.tag.red,.pill.s-blocked { background: var(--red-soft); color: var(--red); }
.tag.amber,.pill.s-review { background: var(--orange-soft); color: var(--orange); }
.tag.green,.pill.s-done { background: var(--green-soft); color: var(--green); }
.pill.s-cancel { background: var(--gray-soft); color: var(--ink-3); }
.badge { background: transparent; box-shadow: inset 0 0 0 1px var(--orange); color: var(--orange); height: 22px; padding: 0 8px; margin-left: 0; }
.prio { font-size: calc(14px * var(--ts)); color: var(--ink-3); white-space: nowrap; }
.prio.p-high { color: var(--red); font-weight: 600; }
.due { display: inline-flex; align-items: center; gap: 4px; font-size: calc(14px * var(--ts)); color: var(--ink-2); white-space: nowrap; }
.due.today { color: var(--indigo); font-weight: 600; }
.due.overdue { color: var(--red); font-weight: 600; }
.chips { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.chip { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: 7px; background: var(--fill); color: var(--ink-2); font-size: calc(14px * var(--ts)); }
.chip:hover { background: var(--fill-2); text-decoration: none; }
.check-count { display: inline-flex; align-items: center; gap: 4px; font-size: calc(14px * var(--ts)); color: var(--ink-2); font-variant-numeric: tabular-nums; }
.check-count.all { color: var(--green); font-weight: 600; }
.status-select { width: auto; min-height: 32px; padding: 3px 30px 3px 12px; border-radius: 999px; font-size: calc(14px * var(--ts)); font-weight: 600; background-color: var(--gray-soft); color: var(--ink-2); background-position: calc(100% - 15px) 52%,calc(100% - 10px) 52%; }
.status-select.s-doing { background-color: var(--blue-soft); color: var(--blue); }
.status-select.s-blocked { background-color: var(--red-soft); color: var(--red); }
.status-select.s-review { background-color: var(--orange-soft); color: var(--orange); }
.status-select.s-done { background-color: var(--green-soft); color: var(--green); }
.status-select:disabled { opacity: .6; }
.meter { appearance: none; -webkit-appearance: none; display: block; width: 100%; height: 6px; border: 0; border-radius: 99px; background: var(--fill); overflow: hidden; }
.meter::-webkit-progress-bar { background: var(--fill); border-radius: 99px; }
.meter::-webkit-progress-value { background: var(--accent-bg); border-radius: 99px; }
.meter::-moz-progress-bar { background: var(--accent-bg); border-radius: 99px; }
/* —— 智能列表（首页唯一的强调元素） —— */
.smart-grid { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: 12px; }
.smart { display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto; align-items: center; column-gap: 10px; row-gap: 10px; padding: 14px 16px; background: var(--surface); box-shadow: var(--shadow); color: var(--ink); }
.smart:hover { text-decoration: none; }
.smart-icon { display: grid; place-items: center; border-radius: 50%; color: #fff; background: var(--tone); }
.smart-icon .icon { width: 19px; height: 19px; stroke-width: 2.1; }
.smart-count { justify-self: end; font-size: calc(30px * var(--ts)); font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; }
.smart-label { grid-column: 1/-1; font-size: calc(15px * var(--ts)); font-weight: 600; color: var(--ink-2); }
.smart[data-tone=blue] { --tone: #0071e3; }
.smart[data-tone=indigo] { --tone: #5856d6; }
.smart[data-tone=red] { --tone: #e0102b; }
.smart[data-tone=orange] { --tone: #e06a00; }
.smart[data-tone=graphite] { --tone: #636366; }
.home-grid { display: grid; grid-template-columns: minmax(0,1fr) 340px; gap: 24px; align-items: start; }
.feed-panel { padding: 6px 18px; }
/* —— 分组列表 —— */
.group-list { list-style: none; margin: 0; padding: 0; background: var(--surface); border-radius: var(--r-lg); box-shadow: var(--shadow); overflow: hidden; }
.group-list>li { position: relative; }
.group-list>li+li::before { content: ""; position: absolute; top: 0; left: 20px; right: 0; border-top: 1px solid var(--line-soft); }
.project-row { display: grid; grid-template-columns: auto minmax(0,1fr) 220px auto; gap: 14px; align-items: start; padding: 16px 14px 16px 20px; }
.project-dot { width: 12px; height: 12px; margin-top: 7px; border-radius: 50%; background: var(--dot,var(--violet-dot)); }
.project-row[data-color=blue] { --dot: var(--blue-dot); }
.project-row[data-color=teal] { --dot: var(--teal-dot); }
.project-row[data-color=amber] { --dot: var(--amber-dot); }
.project-row[data-color=rose] { --dot: var(--rose-dot); }
.row-main { min-width: 0; }
.row-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.row-title { font-size: calc(17px * var(--ts)); font-weight: 600; color: var(--ink); }
.row-stage { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.row-sub { margin-top: 2px; color: var(--ink-2); font-size: calc(15px * var(--ts)); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.row-next { display: flex; gap: 8px; margin-top: 8px; font-size: calc(15px * var(--ts)); color: var(--ink); }
.row-next b { flex: none; font-weight: 600; color: var(--accent); }
.row-next span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.row-side { display: flex; flex-direction: column; gap: 8px; padding-top: 6px; }
.row-progress { display: flex; align-items: center; gap: 10px; font-size: calc(14px * var(--ts)); color: var(--ink-2); white-space: nowrap; font-variant-numeric: tabular-nums; }
.row-facts { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.pin { display: grid; place-items: center; width: 34px; height: 34px; border: 0; border-radius: 10px; background: transparent; color: var(--ink-3); cursor: pointer; }
.pin svg { width: 19px; height: 19px; }
.pin:hover { background: var(--fill); }
.pin.on { color: #e0a100; }
.pin.on svg { fill: currentColor; }
.feed { list-style: none; margin: 0; padding: 0; }
.feed li { display: flex; gap: 10px; padding: 12px 0; align-items: flex-start; }
.feed li+li { border-top: 1px solid var(--line-soft); }
.feed-kind { flex: none; display: inline-flex; align-items: center; height: 22px; padding: 0 7px; border-radius: 6px; font-size: calc(14px * var(--ts)); font-weight: 600; background: var(--blue-soft); color: var(--blue); }
.feed-kind.handoff { background: var(--indigo-soft); color: var(--indigo); }
.feed-body { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.feed-body a { color: var(--ink); font-size: calc(15px * var(--ts)); font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.feed-meta { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
/* —— 任务 —— */
.task-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.search-field { position: relative; flex: 1; max-width: 520px; }
.search-field .icon { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); width: 17px; height: 17px; color: var(--ink-3); pointer-events: none; }
.search-field input { padding-left: 38px; }
.segmented { display: inline-flex; }
.segmented button { min-height: 32px; padding: 0 16px; border: 0; background: transparent; color: var(--ink-2); font-size: calc(15px * var(--ts)); cursor: pointer; }
.segmented button[aria-pressed=true] { color: var(--ink); }
.filter-bar { margin-bottom: 16px; }
.filter-bar select,.filter-bar input { width: auto; padding-top: 4px; padding-bottom: 4px; font-size: calc(15px * var(--ts)); border-radius: 9px; }
.filter-bar input[name=tag] { width: 120px; }
.task-row { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 16px; align-items: center; padding: 13px 14px 13px 20px; }
.task-row.closed .task-title { color: var(--ink-3); }
.task-main { min-width: 0; }
.task-title { font-size: calc(16px * var(--ts)); font-weight: 600; color: var(--ink); }
.task-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin-top: 4px; }
.task-meta:empty { display: none; }
.task-project { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.task-side { display: flex; align-items: center; gap: 14px; }
.assignee { font-size: calc(14px * var(--ts)); color: var(--ink-2); max-width: 8em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.board { display: grid; grid-template-columns: repeat(6,minmax(232px,1fr)); gap: 12px; overflow-x: auto; padding-bottom: 8px; align-items: start; }
.kanban-column { display: flex; flex-direction: column; min-height: 240px; padding: 10px; border-radius: var(--r-lg); transition: background-color .15s,box-shadow .15s; }
.kanban-column.drop-over { box-shadow: inset 0 0 0 2px var(--accent-bg); }
.kanban-head { display: flex; align-items: center; justify-content: space-between; padding: 2px 4px 10px; }
.col-count { font-size: calc(15px * var(--ts)); font-weight: 600; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.column-body { display: flex; flex-direction: column; gap: 8px; flex: 1; }
.column-empty { padding: 18px 8px; text-align: center; color: var(--ink-3); font-size: calc(14px * var(--ts)); border: 1.5px dashed var(--line); border-radius: var(--r); }
.kanban-card { display: flex; flex-direction: column; gap: 6px; padding: 12px 13px; border-radius: var(--r); cursor: grab; }
.kanban-card.dragging { opacity: .45; cursor: grabbing; }
.kanban-card.saving { opacity: .7; }
.card-project { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.card-title { font-size: calc(16px * var(--ts)); font-weight: 600; color: var(--ink); line-height: 1.4; }
.card-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 4px; }
/* —— 详情页 —— */
.detail-grid { display: grid; grid-template-columns: minmax(0,1fr) 340px; gap: 16px; align-items: start; }
.detail-main>.panel+.panel,.inspector>.panel+.panel { margin-top: 16px; }
.props { margin: 0; display: flex; flex-direction: column; }
.props>div { display: grid; grid-template-columns: 76px minmax(0,1fr); gap: 10px; align-items: center; padding: 10px 0; }
.props>div+div { border-top: 1px solid var(--line-soft); }
.props dt { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.props dd { margin: 0; font-size: calc(15px * var(--ts)); min-width: 0; }
.props dd.mono { font-size: calc(14px * var(--ts)); }
.facts { display: grid; grid-template-columns: repeat(4,1fr); gap: 8px; margin: 12px 0 14px; }
.facts dt { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.facts dd { margin: 0; font-size: calc(22px * var(--ts)); font-weight: 700; font-variant-numeric: tabular-nums; }
.dir-item { padding: 12px 0; }
.dir-item+.dir-item { border-top: 1px solid var(--line-soft); }
.dir-tags { margin-bottom: 6px; }
.copy-btn { display: inline-flex; align-items: center; gap: 5px; margin-top: 6px; padding: 3px 9px; border: 0; border-radius: 7px; background: var(--fill); color: var(--ink-2); font-size: calc(14px * var(--ts)); cursor: pointer; }
.copy-btn:hover { background: var(--fill-2); }
.long-text { margin-top: 10px; }
.checklist { list-style: none; margin: 10px 0 0; padding: 0; }
.checklist-panel .meter { margin-top: 12px; }
.check-item { display: flex; align-items: center; gap: 8px; padding: 8px 0; }
.check-item+.check-item { border-top: 1px solid var(--line-soft); }
.check-item label { flex: 1; display: flex; align-items: flex-start; gap: 12px; cursor: pointer; min-width: 0; }
.check-item input[type=checkbox] { appearance: none; -webkit-appearance: none; width: 22px; height: 22px; margin-top: 2px; border-radius: 50%; border: 2px solid var(--line); display: grid; place-items: center; }
.check-item input[type=checkbox]:checked { border-color: var(--accent-bg); background: var(--accent-bg); }
.check-item input[type=checkbox]:checked::after { content: ""; width: 6px; height: 11px; margin-top: -2px; border: solid #fff; border-width: 0 2.4px 2.4px 0; transform: rotate(45deg); }
.check-item span { overflow-wrap: anywhere; }
.check-item.done span { color: var(--ink-3); text-decoration: line-through; text-decoration-color: color-mix(in srgb,var(--ink-3) 60%,transparent); }
.check-add { display: flex; gap: 8px; margin-top: 12px; }
.check-add input { background: var(--surface-2); }
.activity { padding: 16px 0; }
.activity+.activity { border-top: 1px solid var(--line-soft); }
.activity:first-child { padding-top: 6px; }
.activity-title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-weight: 600; }
.activity .hint { margin-top: 2px; }
.activity .text-link { display: inline-block; margin-top: 10px; }
.activity-page { padding-top: 12px; }
/* —— 同步、导入、表格 —— */
.source-row { display: flex; justify-content: space-between; gap: 16px; padding: 14px 16px 14px 20px; }
.source-file { display: flex; align-items: center; gap: 8px; margin-top: 6px; min-width: 0; }
.diff-block { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.diff-side h4 { margin-top: 4px; }
.sync-task-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 10px 0; border-top: 1px solid var(--line-soft); }
.sync-task-row details { flex-basis: 100%; }
.sticky-footer { position: sticky; bottom: 12px; display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 16px; padding: 12px 14px 12px 20px; border-radius: var(--r-lg); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: var(--shadow-raised); color: var(--ink-2); font-size: calc(14px * var(--ts)); }
.result-panel { margin-top: 20px; }
.result-panel p { margin-top: 8px; }
.table-wrap { overflow-x: auto; border-radius: var(--r-lg); box-shadow: var(--shadow); background: var(--surface); }
table { width: 100%; border-collapse: collapse; font-size: calc(15px * var(--ts)); }
th { text-align: left; font-size: calc(14px * var(--ts)); font-weight: 600; color: var(--ink-3); padding: 10px 14px; border-bottom: 1px solid var(--line-soft); white-space: nowrap; }
td { padding: 12px 14px; border-top: 1px solid var(--line-soft); vertical-align: top; }
tr:first-child td { border-top: 0; }
.import-summary { min-width: 260px; }
.url-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 4px 0 14px; padding: 10px 14px; border-radius: var(--r); background: var(--surface-2); box-shadow: inset 0 0 0 1px var(--line-soft); }
.url-row .mono { font-size: calc(15px * var(--ts)); color: var(--ink); }
.url-row .copy-btn { margin-top: 0; }
#connect-list { margin-top: 6px; }
.connect-item { padding: 12px 0; border-top: 1px solid var(--line-soft); }
.connect-item>summary { font-size: calc(16px * var(--ts)); font-weight: 600; color: var(--ink); }
.connect-item pre { max-height: 260px; }
/* —— 完成确认面板 —— */
.sheet { width: min(520px,calc(100vw - 32px)); padding: 0; border-radius: 18px; color: var(--ink); box-shadow: var(--shadow-raised); }
.sheet-body { padding: 24px; display: flex; flex-direction: column; gap: 14px; }
.sheet-note { color: var(--ink-2); font-size: calc(15px * var(--ts)); }
.sheet-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 4px; }
/* —— 响应式 —— */
@media (max-width:1180px) {
  .smart-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
  .home-grid,.detail-grid { grid-template-columns: minmax(0,1fr); }
  .project-row { grid-template-columns: auto minmax(0,1fr) 180px auto; }
}
@media (max-width:860px) {
  .sidebar { display: none; }
  main { margin-left: 0; padding: 0 16px calc(88px + env(safe-area-inset-bottom)); }
  .topbar { margin: 0 -16px; padding: 0 16px; height: 52px; }
  .top-search { min-width: 0; width: 40px; padding: 0; justify-content: center; }
  .top-search span,.top-search kbd { display: none; }
  .page-head { flex-direction: column; align-items: flex-start; padding: 18px 0 16px; }
  h1 { font-size: calc(26px * var(--ts)); }
  .smart-grid { grid-template-columns: repeat(2,minmax(0,1fr)); gap: 10px; }
  .smart:last-child { grid-column: 1/-1; }
  .project-row { grid-template-columns: auto minmax(0,1fr) auto; padding: 14px 10px 14px 16px; }
  .row-side { grid-column: 2/3; grid-row: 2; padding-top: 0; }
  .pin { grid-column: 3; grid-row: 1; }
  .task-row { grid-template-columns: minmax(0,1fr); gap: 10px; padding: 12px 14px 12px 16px; }
  .task-side { justify-content: space-between; flex-wrap: wrap; gap: 10px; }
  .task-toolbar { flex-direction: column; align-items: stretch; }
  .search-field { max-width: none; }
  .segmented { align-self: flex-start; }
  .filter-bar select,.filter-bar input { flex: 1 1 140px; }
  .form-grid,.two-column,.diff-block { grid-template-columns: minmax(0,1fr); }
  .directory { grid-template-columns: minmax(0,1fr) auto; }
  .directory .dir-path { grid-column: 1/-1; }
  .panel { padding: 18px; }
  .board { grid-template-columns: repeat(6,minmax(240px,82vw)); scroll-snap-type: x mandatory; }
  .kanban-column { scroll-snap-align: start; }
  .facts { grid-template-columns: repeat(2,1fr); }
  .source-row { flex-direction: column; gap: 6px; }
  .sticky-footer { flex-direction: column; align-items: stretch; bottom: calc(76px + env(safe-area-inset-bottom)); }
  .toast { bottom: calc(84px + env(safe-area-inset-bottom)); }
  .tabbar { display: grid; grid-template-columns: repeat(5,1fr); position: fixed; left: 0; right: 0; bottom: 0; z-index: 30; padding: 6px 4px calc(6px + env(safe-area-inset-bottom)); background: color-mix(in srgb,var(--surface) 86%,transparent); backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px); border-top: 1px solid var(--line-soft); }
  .tabbar a { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 4px 0; font-size: calc(14px * var(--ts)); color: var(--ink-3); }
  .tabbar a:hover { text-decoration: none; }
  .tabbar svg { width: 24px; height: 24px; }
  .tabbar a.active { color: var(--accent); font-weight: 600; }
}
@media (prefers-reduced-motion:reduce) {
  * { transition: none !important; scroll-behavior: auto !important; }
}
/* —— 毛玻璃层：半透明磨砂面板浮在柔和的彩色光晕上 —— */
html { background: var(--canvas); }
body { min-height: 100vh; }
body::before { content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none; }
.panel,.group-list,.smart,.empty,.table-wrap { background: var(--glass); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border: 1px solid var(--glass-edge); box-shadow: var(--glass-shadow); }
kbd { background: var(--glass-strong); }
.search-field input { background: var(--glass); border-color: var(--glass-edge); box-shadow: var(--glass-shadow); }
.filter-bar select,.filter-bar input { background-color: var(--glass); }
.status-select { border: 0; }
.segmented { box-shadow: inset 0 0 0 1px var(--glass-edge); }
.kanban-column { background: var(--glass-soft); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border: 1px solid var(--glass-edge); }
.kanban-column.drop-over { background: var(--accent-soft); }
.kanban-card { background: var(--glass-strong); border: 1px solid var(--glass-edge); box-shadow: 0 4px 14px rgba(40,56,110,.08); }
.check-item input[type=checkbox] { background: rgba(255,255,255,.7); }
.sheet { background: var(--glass-strong); -webkit-backdrop-filter: saturate(180%) blur(30px); backdrop-filter: saturate(180%) blur(30px); border: 1px solid var(--glass-edge); }
.sheet::backdrop { background: rgba(30,40,70,.18); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.sticky-footer { background: var(--glass-strong); border: 1px solid var(--glass-edge); }
.toast { -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); }
.url-row,pre { background: var(--surface-2); box-shadow: inset 0 0 0 1px var(--glass-edge); }
.group-list>li+li::before { border-top-color: var(--line-soft); }
.theme-choice { margin-top: 12px; }
/* —— 连接中心 —— */
.connect-hero { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1.5fr) minmax(0,1fr); }
.hero-cell { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; padding: 18px 20px; background: var(--glass); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border: 1px solid var(--glass-edge); box-shadow: var(--glass-shadow); min-width: 0; }
.hero-label { font-size: calc(14px * var(--ts)); font-weight: 600; color: var(--ink-3); }
.hero-value { display: flex; align-items: center; gap: 8px; font-size: calc(20px * var(--ts)); font-weight: 700; color: var(--ink); max-width: 100%; }
.mono-value { font-family: var(--mono); font-size: calc(17px * var(--ts)); font-weight: 600; overflow-wrap: anywhere; }
.hero-sub { font-size: calc(14px * var(--ts)); color: var(--ink-2); overflow-wrap: anywhere; flex: 1; }
.hero-cell .btn { margin-top: 6px; }
.live,.idle { display: inline-block; width: 10px; height: 10px; border-radius: 50%; flex: none; }
.live { background: #30b74f; box-shadow: 0 0 0 4px color-mix(in srgb,#30b74f 22%,transparent); }
.idle { background: #a1a1a8; box-shadow: 0 0 0 4px rgba(118,118,128,.16); }
.client-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 12px; }
.client-card { display: flex; flex-direction: column; border-radius: var(--r-lg); background: var(--glass); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border: 1px solid var(--glass-edge); box-shadow: var(--glass-shadow); }
.client-top { display: flex; align-items: center; gap: 12px; }
.client-mark { display: grid; place-items: center; flex: none; width: 42px; height: 42px; border-radius: 12px; color: #fff; font-size: calc(15px * var(--ts)); font-weight: 700; letter-spacing: .02em; background: var(--tone,#636366); box-shadow: inset 0 1px 0 rgba(255,255,255,.35),0 4px 12px rgba(40,56,110,.15); }
[data-tone=graphite] { --tone: linear-gradient(145deg,#4a4a52,#2c2c33); }
[data-tone=orange] { --tone: linear-gradient(145deg,#e0884f,#c2612c); }
[data-tone=amber] { --tone: linear-gradient(145deg,#d99a3a,#b97614); }
[data-tone=blue] { --tone: linear-gradient(145deg,#3d8bff,#0062d6); }
[data-tone=teal] { --tone: linear-gradient(145deg,#26b0a0,#0a8577); }
[data-tone=indigo] { --tone: linear-gradient(145deg,#7a78ff,#4b49d6); } [data-tone=gold] { --tone: linear-gradient(145deg,#e6b94a,#b8860b); } [data-tone=magenta] { --tone: linear-gradient(145deg,#e85bc0,#b5267e); }
.client-card .client-mark { background: var(--tone); }
.client-name { min-width: 0; flex: 1; }
.client-name h3 { font-size: calc(17px * var(--ts)); }
.chip-plain { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.conn-state { display: inline-flex; align-items: center; gap: 6px; flex: none; height: 28px; padding: 0 10px; border-radius: 999px; font-size: calc(14px * var(--ts)); font-weight: 600; background: var(--gray-soft); color: var(--ink-2); }
.conn-state i { width: 8px; height: 8px; border-radius: 50%; background: #a1a1a8; }
.client-card[data-state=on] .conn-state { background: var(--green-soft); color: var(--green); }
.client-card[data-state=on] .conn-state i { background: #30b74f; }
.conn-detail { flex: 1; }
.card-actions { display: flex; gap: 8px; }
.guide-sheet { width: min(720px,calc(100vw - 32px)); }
.sheet-title { display: flex; align-items: center; gap: 12px; }
.sheet-title>div { flex: 1; min-width: 0; }
.sheet-title .client-mark { background: var(--tone); }
.steps { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 8px; font-size: calc(15px * var(--ts)); color: var(--ink); }
.steps li::marker { color: var(--accent); font-weight: 700; }
.code-block { border-radius: var(--r); overflow: hidden; box-shadow: inset 0 0 0 1px var(--glass-edge); background: var(--surface-2); }
.code-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 10px 8px 14px; font-size: calc(14px * var(--ts)); font-weight: 600; color: var(--ink-3); border-bottom: 1px solid var(--line-soft); }
.code-tools { display: flex; gap: 6px; }
.code-tools .copy-btn { margin-top: 0; }
.code-block pre { margin: 0; border-radius: 0; box-shadow: none; background: transparent; max-height: 300px; }
@media (max-width:1180px) {
  .connect-hero { grid-template-columns: minmax(0,1fr) minmax(0,1fr); }
  .hero-cell.wide { grid-column: 1/-1; order: -1; }
  .client-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
}
@media (max-width:860px) {
  .connect-hero,.client-grid { grid-template-columns: minmax(0,1fr); }
  .hero-cell.wide { grid-column: auto; }
}
/* —— 操作日志 —— */
[data-tone=web] { --tone: linear-gradient(145deg,#8e8e96,#6b6b73); }
.client-mark.small { width: 34px; height: 34px; border-radius: 10px; font-size: calc(13px * var(--ts)); background: var(--tone); }
.filter-bar .segmented button { min-height: 30px; }
.filter-bar input[name=text] { width: 220px; }
.log-list>li.log-day { padding: 10px 20px 6px; font-size: calc(14px * var(--ts)); font-weight: 700; color: var(--ink-3); background: var(--glass-soft); }
.log-list>li.log-day::before { display: none; }
.log-row { display: grid; grid-template-columns: auto minmax(0,1fr) auto; gap: 12px; align-items: start; padding: 12px 18px; }
.log-main { min-width: 0; }
.log-summary { font-size: calc(15px * var(--ts)); font-weight: 600; color: var(--ink); overflow-wrap: anywhere; }
.log-row.failed .log-summary { color: var(--red); }
.log-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin-top: 3px; font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.log-agent { color: var(--ink-2); font-weight: 600; }
.log-kind { color: var(--blue); font-weight: 600; }
.log-fail { color: var(--red); font-weight: 700; }
.log-row time { font-size: calc(14px * var(--ts)); color: var(--ink-3); font-variant-numeric: tabular-nums; white-space: nowrap; padding-top: 2px; }
.log-detail { margin-top: 4px; }
.log-detail>summary { font-size: calc(14px * var(--ts)); }
.log-error { margin-top: 6px; color: var(--red); font-size: calc(14px * var(--ts)); overflow-wrap: anywhere; }
@media (max-width:860px) {
  .filter-bar input[name=text] { width: auto; }
  .log-row { grid-template-columns: auto minmax(0,1fr); padding: 12px 14px; }
  .log-row .client-mark { grid-row: 1/3; }
  .log-row .log-main { grid-column: 2; grid-row: 1; }
  .log-row time { grid-column: 2; grid-row: 2; padding-top: 0; }
}
/* —— 1.2.4：时间线、记录表单、聚焦搜索、骨架屏 —— */
.assignee.none { color: var(--ink-3); }
.board[data-columns="5"] { grid-template-columns: repeat(5,minmax(200px,1fr)); }
.file-list { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.file-list li { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.file-list .copy-btn { margin-top: 0; }
.record-grid { display: grid; grid-template-columns: minmax(0,1fr) 380px; gap: 16px; margin-top: 28px; align-items: start; }
.record-grid>.panel+.panel { margin-top: 0; }
.composer-panel { position: sticky; top: 72px; }
.composer { display: flex; flex-direction: column; gap: 12px; margin-top: 12px; }
.composer textarea { min-height: 64px; }
.composer .field label { font-size: calc(14px * var(--ts)); color: var(--ink-2); }
.kind-switch { align-self: flex-start; }
.kind-switch label { display: inline-flex; align-items: center; min-height: 32px; padding: 0 16px; border-radius: 8px; font-size: calc(15px * var(--ts)); font-weight: 600; color: var(--ink-2); cursor: pointer; }
.kind-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.kind-switch label:has(input:checked) { background: var(--glass-strong); color: var(--ink); box-shadow: 0 1px 3px rgba(0,0,0,.12),0 0 0 .5px rgba(0,0,0,.05); }
.kind-switch label:has(input:focus-visible) { outline: 3px solid color-mix(in srgb,var(--accent-bg) 55%,transparent); }
.composer-more>summary { font-size: calc(14px * var(--ts)); color: var(--accent); }
.composer-more[open] { display: flex; flex-direction: column; gap: 12px; }
.composer-actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.composer-actions .btn { margin-top: 0; }
.timeline { list-style: none; margin: 6px 0 0; padding: 0; position: relative; }
.timeline::before { content: ""; position: absolute; left: 7px; top: 8px; bottom: 8px; width: 2px; border-radius: 2px; background: var(--line-soft); }
.tl-item { position: relative; padding: 0 0 22px 30px; }
.tl-item:last-child { padding-bottom: 4px; }
.tl-dot { position: absolute; left: 1px; top: 6px; width: 14px; height: 14px; border-radius: 50%; background: var(--surface); box-shadow: 0 0 0 3px var(--blue-soft),inset 0 0 0 3px var(--blue); }
.tl-item.handoff .tl-dot { box-shadow: 0 0 0 3px var(--indigo-soft),inset 0 0 0 3px var(--indigo); }
.tl-head { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.tl-head time { margin-left: auto; font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.tl-who { font-size: calc(15px * var(--ts)); }
.client-mark.tiny { width: 24px; height: 24px; border-radius: 7px; font-size: calc(11px * var(--ts)); background: var(--tone); box-shadow: none; }
.tl-context { display: inline-block; margin-top: 4px; font-size: calc(14px * var(--ts)); }
.tl-field { margin-top: 8px; }
.tl-label { display: block; font-size: calc(14px * var(--ts)); font-weight: 600; color: var(--ink-3); }
.tl-field.next_step .text { font-weight: 600; }
.tl-field.blockers .tl-label { color: var(--red); }
.tl-meta { margin-top: 8px; font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.palette { width: min(640px,calc(100vw - 24px)); margin: 12vh auto auto; padding: 0; border: 0; border-radius: 18px; background: transparent; overflow: visible; }
.palette::backdrop { background: rgba(30,40,70,.2); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.palette-box { border-radius: 18px; background: var(--glass-strong); -webkit-backdrop-filter: saturate(180%) blur(30px); backdrop-filter: saturate(180%) blur(30px); border: 1px solid var(--glass-edge); box-shadow: var(--shadow-raised); overflow: hidden; color: var(--ink); }
.palette-input { display: flex; align-items: center; gap: 10px; padding: 14px 16px; border-bottom: 1px solid var(--line-soft); }
.palette-input .icon { color: var(--ink-3); }
.palette-input input { flex: 1; min-height: 32px; border: 0; padding: 0; background: transparent; font-size: calc(18px * var(--ts)); box-shadow: none; }
.palette-input input:focus { box-shadow: none; }
.palette-list { max-height: min(420px,60vh); overflow: auto; padding: 6px; }
.palette-group { padding: 10px 10px 4px; font-size: calc(14px * var(--ts)); font-weight: 700; color: var(--ink-3); }
.palette-item { display: flex; align-items: center; gap: 12px; padding: 9px 10px; border-radius: 10px; color: var(--ink); }
.palette-item:hover { text-decoration: none; }
.palette-item[aria-selected=true] { background: var(--accent-bg); color: #fff; }
.palette-item[aria-selected=true] .palette-sub,.palette-item[aria-selected=true] .palette-type { color: rgba(255,255,255,.88); }
.palette-item[aria-selected=true] .palette-icon { background: rgba(255,255,255,.2); color: #fff; }
.palette-icon { display: grid; place-items: center; flex: none; width: 30px; height: 30px; border-radius: 8px; background: var(--fill); color: var(--ink-2); }
.palette-text { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.palette-title { font-size: calc(15px * var(--ts)); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.palette-sub { font-size: calc(14px * var(--ts)); color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.palette-type { flex: none; font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.palette-empty { padding: 24px; text-align: center; color: var(--ink-3); }
.palette-foot { display: flex; gap: 16px; padding: 10px 16px; border-top: 1px solid var(--line-soft); font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.palette-foot kbd { margin-right: 4px; }
mark { background: rgba(255,204,0,.42); color: inherit; border-radius: 3px; padding: 0 1px; }
.palette-item[aria-selected=true] mark { background: rgba(255,255,255,.3); }
.search-form .search-field { flex: 1; max-width: none; }
.result-group { margin: 18px 0 8px; font-size: calc(15px * var(--ts)); color: var(--ink-3); }
.result-row { display: flex; align-items: flex-start; gap: 12px; padding: 14px 16px 14px 20px; }
.result-row .palette-icon { margin-top: 2px; }
.skeleton { padding: 28px 0; }
.sk { border-radius: 12px; background: linear-gradient(90deg,var(--glass-soft) 0%,var(--glass) 50%,var(--glass-soft) 100%); background-size: 200% 100%; animation: sk 1.4s ease-in-out infinite; }
.sk-title { width: 240px; height: 34px; }
.sk-line { width: 360px; height: 18px; margin-top: 12px; }
.sk-row { display: grid; grid-template-columns: repeat(3,1fr); gap: 12px; margin-top: 24px; }
.sk-card { height: 96px; border-radius: 18px; }
.sk-block { height: 280px; margin-top: 16px; border-radius: 18px; }
@keyframes sk {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}
@media (prefers-reduced-motion:reduce) {
  .sk { animation: none; }
}
@media (max-width:1180px) {
  .record-grid { grid-template-columns: minmax(0,1fr); }
  .composer-panel { position: static; }
}
@media (max-width:860px) {
  .palette { margin-top: 6vh; }
  .palette-foot { display: none; }
  .sk-row { grid-template-columns: 1fr; }
  .sk-line { width: 70%; }
}
.palette-input input,.palette-input input:focus,.palette-input input:focus-visible { border: 0; outline: none; box-shadow: none; background: transparent; }
.result-row .row-main { flex: 1; min-width: 0; }
/* —— 1.2.5 清晰度：文字所在的面板不再使用背景模糊（Windows 上会让文字失去 ClearType 而发虚）， 背景本身是柔和渐变，面板改为更实的半透明白即可保持毛玻璃观感；模糊只留给弹窗和浮层。 —— */
.panel,.group-list,.smart,.empty,.table-wrap,.hero-cell,.client-card,.kanban-column,.kanban-card,.sidebar,.topbar,.btn.secondary,.top-search,.sticky-footer,.tabbar { -webkit-backdrop-filter: none; backdrop-filter: none; }
:root[data-theme=dark] .topbar { background: rgba(14,17,26,.94); }
:root[data-theme=dark] .sidebar { background: rgba(20,22,30,.72); }
.tabbar { background: rgba(255,255,255,.95); }
:root[data-theme=dark] .tabbar { background: rgba(24,26,34,.96); }
body { font-weight: 400; letter-spacing: .01em; }
main { padding-left: 48px; padding-right: 48px; }
.topbar { margin: 0 -48px; padding: 0 48px; height: 60px; }
.panel { padding: 24px 26px; }
.icon { width: 21px; height: 21px; }
@media (max-width:860px) {
  main { padding-left: 16px; padding-right: 16px; }
  .topbar { margin: 0 -16px; padding: 0 16px; height: 54px; }
  .panel { padding: 18px; }
}
.text-size { margin-top: 12px; }
@media (min-width:1181px) {
  .home-grid { grid-template-columns: minmax(0,1fr) clamp(340px,24vw,460px); }
  .detail-grid { grid-template-columns: minmax(0,1fr) clamp(340px,24vw,440px); }
  .record-grid { grid-template-columns: minmax(0,1fr) clamp(380px,28vw,480px); }
}
/* —— 1.3 实时动态、对话汇报与今日简报 —— */
[hidden] { display: none !important; }
.bell { position: relative; }
.bell-badge { position: absolute; top: 2px; right: 1px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: #e0102b; color: #fff; font-size: calc(11px * var(--ts)); font-weight: 700; line-height: 18px; text-align: center; box-shadow: 0 0 0 2px var(--canvas); pointer-events: none; }
.bell.has-unread { color: var(--ink); }
.side-foot.offline .status-dot { background: #c26a00; box-shadow: 0 0 0 3px color-mix(in srgb,#c26a00 25%,transparent); }
.live-dot { display: inline-block; flex: none; width: 8px; height: 8px; border-radius: 50%; background: #30b74f; animation: live-pulse 2.2s ease-in-out infinite; }
@keyframes live-pulse {
  0%,100% { box-shadow: 0 0 0 0 rgba(48,183,79,.5); }
  50% { box-shadow: 0 0 0 5px rgba(48,183,79,0); }
}
@media (prefers-reduced-motion:reduce) {
  .live-dot { animation: none; }
}
.live-tag { display: inline-flex; align-items: center; gap: 6px; margin-left: 8px; padding: 2px 10px; border-radius: 999px; background: var(--green-soft); color: var(--green); font-size: calc(13px * var(--ts)); font-weight: 600; vertical-align: middle; }
.live-pill { position: sticky; top: 72px; z-index: 20; display: flex; align-items: center; gap: 8px; margin: 0 auto 16px; padding: 9px 18px; border: 0; border-radius: 999px; background: var(--accent-bg); color: #fff; font: inherit; font-size: calc(15px * var(--ts)); font-weight: 600; cursor: pointer; box-shadow: 0 8px 24px rgba(0,80,200,.28); }
.live-pill:hover { background: var(--accent-bg-hover); }
.live-pill .live-dot { background: #fff; animation: none; }
.plain-btn { border: 0; background: none; padding: 0; cursor: pointer; font: inherit; font-size: calc(15px * var(--ts)); }
.bad { color: var(--red); }
.briefing { margin-bottom: 30px; }
.briefing:empty { display: none; }
.briefing-grid { display: grid; grid-template-columns: minmax(0,1.3fr) minmax(0,1fr); gap: 16px; align-items: start; }
.briefing-grid>.panel+.panel { margin-top: 0; }
.brief-panel h3 { margin: 0 0 6px; font-size: calc(16px * var(--ts)); font-weight: 650; }
.brief-numbers { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 12px; padding-bottom: 16px; border-bottom: 1px solid var(--line-soft); }
.brief-numbers strong { display: block; font-size: calc(30px * var(--ts)); font-weight: 700; letter-spacing: -.02em; line-height: 1.1; font-variant-numeric: tabular-nums; }
.brief-numbers span { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.brief-numbers .bad strong { color: var(--red); }
.brief-agents,.brief-reports { list-style: none; margin: 0; padding: 0; }
.brief-agent { display: flex; align-items: center; gap: 12px; padding: 12px 0; }
.brief-agent+.brief-agent { border-top: 1px solid var(--line-soft); }
.brief-agent-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.brief-agent-main a { color: var(--ink); font-weight: 650; font-size: calc(16px * var(--ts)); }
.brief-agent-main span,.brief-agent time { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.brief-agent-main b { font-weight: 600; }
.brief-empty { padding-top: 14px; margin: 0; }
.brief-report { display: flex; gap: 10px; align-items: flex-start; width: calc(100% + 16px); padding: 10px 8px; margin: 0 -8px; border: 0; border-radius: 10px; background: none; text-align: left; font: inherit; color: inherit; cursor: pointer; }
.brief-report:hover { background: var(--fill); }
.brief-reports li+li { border-top: 1px solid var(--line-soft); }
.brief-report-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.brief-report-main strong { font-size: calc(15px * var(--ts)); font-weight: 600; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.brief-report-main span { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.brief-report.unread strong::before { content: ''; display: inline-block; width: 7px; height: 7px; margin: 0 7px 2px 0; border-radius: 50%; background: var(--accent-bg); vertical-align: middle; }
.reports-sheet { width: min(700px,calc(100vw - 24px)); max-height: min(88vh,960px); overflow: auto; background: var(--surface); -webkit-backdrop-filter: none; backdrop-filter: none; }
.reports-sheet .sheet-title { align-items: flex-start; }
.reports-sheet .sheet-title h2 { margin: 0 0 2px; }
.sheet-icon { display: grid; place-items: center; flex: none; width: 42px; height: 42px; border-radius: 12px; background: var(--accent-soft); color: var(--accent); }
.sheet-icon .icon { width: 22px; height: 22px; }
.report-list { display: flex; flex-direction: column; gap: 12px; }
.report-list .sk-block { height: 160px; }
.report-card { padding: 16px 18px; border-radius: 14px; background: var(--surface-2); border: 1px solid var(--line-soft); }
.report-card.unread { border-color: color-mix(in srgb,var(--accent-bg) 45%,transparent); background: color-mix(in srgb,var(--accent-bg) 6%,var(--surface)); }
.report-head { display: flex; align-items: center; gap: 12px; }
.report-head>div { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.report-head strong { font-size: calc(16px * var(--ts)); font-weight: 650; }
.report-meta { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.unread-dot { flex: none; width: 9px; height: 9px; border-radius: 50%; background: var(--accent-bg); }
.report-headline { margin: 12px 0 8px; font-size: calc(16px * var(--ts)); font-weight: 600; line-height: 1.55; white-space: pre-wrap; word-break: break-word; }
.report-where { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.report-where .icon { width: 15px; height: 15px; }
.report-facts { display: flex; flex-wrap: wrap; gap: 6px; }
.fact { display: inline-flex; align-items: center; height: 26px; padding: 0 10px; border-radius: 8px; background: var(--fill); color: var(--ink-2); font-size: calc(14px * var(--ts)); font-weight: 600; }
.fact.good { background: var(--green-soft); color: var(--green); }
.fact.bad { background: var(--red-soft); color: var(--red); }
.fact.quiet { font-weight: 500; color: var(--ink-3); }
.report-lines { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--line-soft); }
.report-line { display: grid; grid-template-columns: 5.5em minmax(0,1fr); gap: 10px; font-size: calc(15px * var(--ts)); line-height: 1.55; }
.report-line b { color: var(--ink-3); font-weight: 600; }
.report-line span { white-space: pre-wrap; word-break: break-word; }
.report-line.blockers span { color: var(--red); }
.report-items { margin-top: 12px; }
.report-items summary { cursor: pointer; color: var(--accent); font-size: calc(14px * var(--ts)); font-weight: 600; }
.report-items ol { list-style: none; margin: 10px 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.report-items li { display: grid; grid-template-columns: auto minmax(0,1fr) auto; gap: 10px; font-size: calc(14px * var(--ts)); line-height: 1.45; }
.report-items li time { color: var(--ink-3); font-variant-numeric: tabular-nums; }
.report-items li.failed span { color: var(--red); }
.setting-line { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 14px 0; }
.setting-line+.setting-line,.notify-perm+.setting-line { border-top: 1px solid var(--line-soft); }
.setting-line strong { font-size: calc(16px * var(--ts)); }
.setting-line .hint { margin: 3px 0 0; }
.setting-line .segmented { flex: none; }
.notify-perm { margin: -6px 0 6px; }
@media (max-width:860px) {
  .briefing-grid { grid-template-columns: minmax(0,1fr); }
  .brief-numbers { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .setting-line { flex-direction: column; align-items: flex-start; gap: 10px; }
  .report-items li { grid-template-columns: auto minmax(0,1fr); }
  .report-items li a { grid-column: 2; }
  .live-pill { top: 64px; }
}
/* —— 1.3 项目画布（节点图） —— */
.cv-legend { display: flex; flex-wrap: wrap; gap: 10px 22px; align-items: center; margin-bottom: 14px; padding: 12px 16px; border-radius: 14px; background: var(--glass); border: 1px solid var(--glass-edge); box-shadow: var(--glass-shadow); }
.cv-keys { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; }
.cv-keys+.cv-keys { padding-left: 16px; border-left: 1px solid var(--line-soft); }
.cv-key { display: inline-flex; align-items: center; gap: 7px; font-size: calc(14px * var(--ts)); color: var(--ink-2); }
.cv-dot { width: 11px; height: 11px; border-radius: 4px; background: var(--cv,#8e8e93); }
.cv-line { width: 20px; height: 3px; border-radius: 2px; background: var(--cv,#8e8e93); }
.cv-key .cv-start { --cv: var(--graphite); }
.cv-key .cv-project { --cv: var(--green); }
.cv-key .cv-task { --cv: var(--blue); }
.cv-key .cv-progress { --cv: var(--orange); }
.cv-key .cv-handoff { --cv: var(--indigo); }
.cv-key .cv-folded { --cv: #9aa0aa; }
.cv-edge-derive { --cv: var(--green); }
.cv-edge-produce { --cv: var(--orange); }
.cv-edge-proof { --cv: var(--indigo); }
.cv-stage { background: var(--surface-2); }
.cv-stage.grabbing { cursor: grabbing; }
.cv-world { will-change: transform; }
.cv-edges { pointer-events: none; }
.cv-edge { fill: none; stroke: var(--cv,#8e8e93); stroke-width: 2.4; opacity: .8; }
.cv-nodes { position: absolute; top: 0; left: 0; }
.cv-node { position: relative; display: flex; flex-direction: column; gap: 7px; padding: 14px 16px 15px; background: var(--surface); border: 1px solid var(--line-soft); box-shadow: 0 6px 18px rgba(40,56,110,.1),0 1px 2px rgba(40,56,110,.06); }
.cv-start { --cv: var(--graphite); }
.cv-project { --cv: var(--green); }
.cv-task { --cv: var(--blue); }
.cv-progress { --cv: var(--orange); }
.cv-handoff { --cv: var(--indigo); }
.cv-folded { --cv: #9aa0aa; border-style: dashed; }
.cv-node-head { display: flex; align-items: center; justify-content: space-between; }
.cv-type { display: inline-flex; align-items: center; gap: 6px; font-size: calc(13px * var(--ts)); font-weight: 650; color: var(--cv); }
.cv-type .icon { width: 15px; height: 15px; }
.cv-ord { font-size: calc(12px * var(--ts)); color: var(--ink-3); font-variant-numeric: tabular-nums; }
.cv-title { font-size: calc(16px * var(--ts)); font-weight: 650; color: var(--ink); line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.cv-title:hover { color: var(--accent); }
.cv-body { margin: 0; font-size: calc(14px * var(--ts)); color: var(--ink-3); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.cv-badges { display: flex; flex-wrap: wrap; gap: 5px; }
.cv-badge { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 7px; background: var(--fill); color: var(--ink-2); font-size: calc(12.5px * var(--ts)); font-weight: 600; white-space: nowrap; }
.cv-badge.todo { background: var(--gray-soft); color: var(--ink-2); }
.cv-badge.doing { background: var(--blue-soft); color: var(--blue); }
.cv-badge.blocked,.cv-badge.bad { background: var(--red-soft); color: var(--red); }
.cv-badge.review,.cv-badge.warn { background: var(--orange-soft); color: var(--orange); }
.cv-badge.done { background: var(--green-soft); color: var(--green); }
.cv-badge.open { background: var(--indigo-soft); color: var(--indigo); }
.cv-badge.stage { background: var(--accent-soft); color: var(--accent); }
.cv-badge.pin { background: var(--orange-soft); color: var(--orange); }
.cv-badge.quiet { font-weight: 500; color: var(--ink-3); }
.cv-foot { display: flex; gap: 6px; align-items: baseline; font-size: calc(13px * var(--ts)); color: var(--ink-3); line-height: 1.45; }
.cv-foot .icon { width: 14px; height: 14px; flex: none; align-self: center; }
.cv-foot b { color: var(--cv); font-weight: 600; flex: none; }
.cv-foot span { min-width: 0; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.cv-foot.bad b { color: var(--red); }
.cv-controls { position: absolute; left: 16px; bottom: 16px; display: flex; flex-direction: column; gap: 6px; }
.cv-btn { width: 38px; height: 38px; border: 1px solid var(--glass-edge); background: var(--glass-strong); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); color: var(--ink); font-size: 19px; line-height: 1; cursor: pointer; box-shadow: var(--glass-shadow); }
.cv-btn:hover { background: var(--surface); }
.cv-mini { position: absolute; right: 16px; bottom: 16px; width: min(230px,38vw); height: 150px; overflow: hidden; background: var(--glass-strong); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border: 1px solid var(--glass-edge); box-shadow: var(--glass-shadow); cursor: pointer; touch-action: none; }
.cv-mini svg { width: 100%; height: 100%; display: block; }
.cv-mini-node.cv-start { fill: var(--graphite); }
.cv-mini-node.cv-project { fill: var(--green); }
.cv-mini-node.cv-task { fill: var(--blue); }
.cv-mini-node.cv-progress { fill: var(--orange); }
.cv-mini-node.cv-handoff { fill: var(--indigo); }
.cv-mini-node.cv-folded { fill: #9aa0aa; }
.cv-mini-view { fill: color-mix(in srgb,var(--accent) 15%,transparent); stroke: var(--accent); stroke-width: 5; vector-effect: non-scaling-stroke; }
@media (max-width:860px) {
  .cv-stage { height: 68vh; }
  .cv-legend { font-size: 13px; }
  .cv-mini { width: 140px; height: 96px; }
}
:root[data-theme=dark] .cv-stage { background-image: radial-gradient(circle,rgba(255,255,255,.1) 1.1px,transparent 1.1px); }
:root[data-theme=dark] .cv-node { box-shadow: 0 6px 18px rgba(0,0,0,.4); }
/* ============================================================ macOS 窗口风格细化 1.3.2 —— 中性窗口底色、系统蓝、Finder 侧栏选中、 更紧的圆角与真正的 macOS 按钮；只调观感，不改任何结构与类名。 ============================================================ */
:root { --canvas: #e9eaef; --aurora: radial-gradient(90% 60% at 50% -20%, rgba(120,146,196,.16), transparent 62%),
    linear-gradient(180deg,#eef0f4 0%,#e9ebf0 48%,#e6e8ed 100%); --surface: #ffffff; --glass: rgba(255,255,255,.72); --glass-strong: rgba(255,255,255,.9); --glass-soft: rgba(250,251,253,.68); --glass-edge: rgba(255,255,255,.7); --blur: saturate(180%) blur(20px); --ink: #1d1d1f; --ink-2: #404247; --ink-3: #73757b; --line: rgba(60,60,67,.16); --line-soft: rgba(60,60,67,.08); --accent: #006fe0; --accent-bg: #007aff; --accent-bg-hover: #0a6fe0; --accent-soft: rgba(0,122,255,.12); --blue: #007aff; --blue-soft: rgba(0,122,255,.12); }
:root[data-theme=dark] { --canvas: #1c1d22; --aurora: radial-gradient(90% 60% at 50% -20%, rgba(70,96,150,.2), transparent 60%),linear-gradient(180deg,#24262c,#1d1f24 60%,#191b20); --surface: #2a2c33; --glass: rgba(44,46,54,.7); --glass-strong: rgba(50,52,60,.9); --glass-soft: rgba(38,40,48,.6); --glass-edge: rgba(255,255,255,.08); --line: rgba(255,255,255,.14); --line-soft: rgba(255,255,255,.07); --accent: #4ea2ff; --accent-bg: #0a84ff; --accent-bg-hover: #2a93ff; --accent-soft: rgba(10,132,255,.22); }
/* 桌面底色：中性、几乎无彩，像一扇 macOS 窗口而不是 iOS 渐变 */
/* 侧栏：半透明材质 + Finder 式选中（淡蓝填充、蓝色文字与图标） */
.sidebar { background: var(--glass-soft); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border-right: 1px solid var(--line-soft); }
.side-nav a { color: var(--ink-2); font-weight: 500; }
.side-nav a svg { width: 19px; height: 19px; color: var(--ink-3); }
.side-nav a:hover { background: rgba(60,60,67,.06); }
.side-nav a.active { font-weight: 600; }
.side-nav a.active svg { color: var(--accent); }
.side-label { text-transform: none; letter-spacing: .01em; color: var(--ink-3); font-weight: 600; font-size: calc(13px * var(--ts)); }
.brand-mark { background: linear-gradient(160deg,#2f93ff,#0066dd); }
.side-foot { color: var(--ink-3); }
/* 统一工具栏：细发丝分隔线、克制材质 */
.topbar { background: var(--glass-soft); -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur); border-bottom: 1px solid var(--line-soft); }
.crumb,#breadcrumb { font-weight: 600; color: var(--ink-2); }
.top-search kbd { font-size: calc(12px * var(--ts)); }
/* 卡片/面板：白底、发丝描边、轻投影、更紧的圆角 */
.panel,.group-list,.smart,.empty,.table-wrap,.feed-panel { background: var(--surface); -webkit-backdrop-filter: none; backdrop-filter: none; border: 1px solid var(--line-soft); box-shadow: var(--shadow); }
.smart { border-radius: var(--r-lg); }
.smart:hover { background: var(--surface-2); }
.smart-icon { width: 32px; height: 32px; }
/* macOS 按钮：主按钮带顶部高光渐变+发丝描边，次按钮白底描边 */
.btn { font-weight: 590; font-size: calc(14px * var(--ts)); }
.btn:not(.secondary):not(.danger) { color: #fff; }
.btn.secondary { color: var(--ink); -webkit-backdrop-filter: none; backdrop-filter: none; }
.btn.danger { background: linear-gradient(180deg,#ff5a52,#e0102b); }
/* 分段控件：macOS 胶囊，选中项白底浮起 */
.segmented button { font-weight: 550; }
/* 焦点环：macOS 蓝色聚焦光圈 */
:where(a,button,input,select,textarea,[tabindex]):focus-visible { outline: none; box-shadow: 0 0 0 3px var(--accent-soft),0 0 0 1px var(--accent-bg); }
/* 标题排版更贴近 macOS：略紧、半粗 */
h1 { letter-spacing: -.012em; font-weight: 680; }
h2,h3 { letter-spacing: -.006em; }
:root[data-theme=dark] .top-search,:root[data-theme=dark] .side-nav a:hover { background: rgba(255,255,255,.06); }
:root[data-theme=dark] .segmented { background: rgba(255,255,255,.08); }
:root[data-theme=dark] .segmented button[aria-pressed=true] { background: rgba(255,255,255,.16); }
/* ============================================================ 1.4 Liquid Glass —— macOS 大圆角 + 液态毛玻璃 · 背景：几团缓慢流动的彩色光，像液体在玻璃后面晃动（尊重“减少动态效果”）。 · 材质：侧栏、工具栏、标签栏、弹窗、状态块用真正的背景模糊 + 高光描边； 正文面板默认是半透明“霜面”，不做背景模糊，Windows 上文字保持 ClearType 清晰。 · 设置 → 外观 → 玻璃：清晰 / 液态（默认）/ 通透，三档控制模糊用在哪里。 ============================================================ */
:root { --liquid-1: #5b8cff; --liquid-2: #b07cff; --liquid-3: #3fd0b4; --liquid-4: #ff9a7a; --liquid-5: #7fd3ff; --liquid-base: linear-gradient(150deg,#e9effc 0%,#efeafc 45%,#e7f5f1 100%); --frost: rgba(255,255,255,.74); --frost-strong: rgba(255,255,255,.88); --frost-soft: rgba(255,255,255,.5); --glass-tint: rgba(255,255,255,.42); --sheen: linear-gradient(135deg,rgba(255,255,255,.62) 0%,rgba(255,255,255,.16) 42%,rgba(255,255,255,.06) 60%,rgba(255,255,255,.3) 100%); --rim: rgba(255,255,255,.78); --rim-dark: rgba(30,40,80,.10); --liquid-blur: saturate(190%) blur(30px); --shadow: 0 1px 1px rgba(20,30,70,.04),0 8px 24px rgba(30,44,100,.08); --glass-shadow: 0 12px 40px rgba(30,44,110,.14),0 1px 2px rgba(30,44,110,.06),inset 0 1px 0 rgba(255,255,255,.85),inset 0 -1px 0 rgba(255,255,255,.25); --shadow-raised: 0 24px 70px rgba(25,35,90,.28),0 0 0 .5px rgba(255,255,255,.6); --r-sm: 10px; --r: 14px; --r-lg: 22px; --r-xl: 28px; --sidebar: 270px; --surface-2: rgba(255,255,255,.55); --fill: rgba(60,60,90,.07); --fill-2: rgba(60,60,90,.12); }
:root[data-theme=dark] { --liquid-1: #2b55c8; --liquid-2: #6a3fc4; --liquid-3: #118a74; --liquid-4: #a8503a; --liquid-5: #1f6f9e; --liquid-base: linear-gradient(150deg,#0e1322 0%,#140f22 50%,#0c1816 100%); --frost: rgba(34,36,48,.74); --frost-strong: rgba(40,42,56,.9); --frost-soft: rgba(30,32,44,.5); --glass-tint: rgba(36,38,52,.46); --sheen: linear-gradient(135deg,rgba(255,255,255,.14) 0%,rgba(255,255,255,.04) 45%,rgba(255,255,255,0) 60%,rgba(255,255,255,.07) 100%); --rim: rgba(255,255,255,.14); --rim-dark: rgba(0,0,0,.3); --glass-shadow: 0 14px 44px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.1); --shadow: 0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.3); --surface-2: rgba(255,255,255,.05); }
/* —— 液态背景 —— */
body { background: var(--liquid-base) fixed; }
body::before,body::after { content: ""; position: fixed; inset: -20vmax; z-index: -1; pointer-events: none; }
body::before { background: radial-gradient(28vmax 26vmax at 18% 20%,color-mix(in srgb,var(--liquid-1) 70%,transparent),transparent 70%),
  radial-gradient(26vmax 24vmax at 82% 16%,color-mix(in srgb,var(--liquid-2) 62%,transparent),transparent 70%),
  radial-gradient(30vmax 26vmax at 72% 86%,color-mix(in srgb,var(--liquid-3) 58%,transparent),transparent 70%); animation: liquid-a 38s ease-in-out infinite alternate; }
body::after { background: radial-gradient(24vmax 22vmax at 26% 82%,color-mix(in srgb,var(--liquid-4) 55%,transparent),transparent 70%),
  radial-gradient(20vmax 18vmax at 55% 45%,color-mix(in srgb,var(--liquid-5) 40%,transparent),transparent 70%); animation: liquid-b 46s ease-in-out infinite alternate; }
@keyframes liquid-a {
  0% { transform: translate3d(0,0,0) rotate(0deg) scale(1); }
  50% { transform: translate3d(4vmax,-3vmax,0) rotate(8deg) scale(1.06); }
  100% { transform: translate3d(-3vmax,3vmax,0) rotate(-6deg) scale(.98); }
}
@keyframes liquid-b {
  0% { transform: translate3d(0,0,0) scale(1); }
  50% { transform: translate3d(-5vmax,2vmax,0) scale(1.1); }
  100% { transform: translate3d(3vmax,-4vmax,0) scale(.95); }
}
@media (prefers-reduced-motion:reduce) {
  body::before,body::after { animation: none; }
}
/* —— 玻璃材质（工具类思路，套在已有类上） —— */
.sidebar,.topbar,.tabbar,.hero-cell,.health-bar,.cv-legend,.cv-btn,.cv-mini,.sheet,.palette-box,.toast,.sticky-footer,.live-pill { background-color: var(--glass-tint); background-image: var(--sheen); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); border: 1px solid var(--rim); box-shadow: var(--glass-shadow); }
.live-pill { background-color: var(--accent-bg); background-image: linear-gradient(180deg,rgba(255,255,255,.28),rgba(255,255,255,0)); }
.sheet,.palette-box { background-color: var(--frost-strong); border-radius: var(--r-xl); }
.reports-sheet { background-color: var(--frost-strong); }
.sheet::backdrop,.palette::backdrop { background: rgba(30,40,80,.16); -webkit-backdrop-filter: blur(8px) saturate(140%); backdrop-filter: blur(8px) saturate(140%); }
/* 正文面板：霜面（默认不模糊，保证文字清晰） */
.panel,.group-list,.smart,.empty,.table-wrap,.feed-panel,.client-card,.kanban-column,.cv-stage { background-color: var(--frost); background-image: var(--sheen); border: 1px solid var(--rim); box-shadow: var(--shadow),inset 0 1px 0 rgba(255,255,255,.7); border-radius: var(--r-lg); }
.kanban-card,.cv-node,.report-card { background: var(--frost-strong); border: 1px solid var(--rim); border-radius: var(--r); }
.cv-node { border-left: 4px solid var(--cv,#8e8e93); border-radius: 16px; }
.smart:hover { background-color: var(--frost-strong); }
.panel { border-radius: var(--r-lg); }
/* 桌面：悬浮的侧栏和工具栏，像 macOS 窗口里的独立玻璃层 */
@media (min-width:861px) {
  .sidebar { top: 12px; bottom: 12px; left: 12px; width: calc(var(--sidebar) - 24px); border-radius: var(--r-xl); padding: 20px 12px 14px; }
  main { margin-left: var(--sidebar); padding-left: 24px; padding-right: 32px; }
  .topbar { top: 12px; margin: 12px 0 0; padding: 0 12px 0 20px; height: 56px; border-radius: 20px; }
  .page-head { padding-top: 30px; }
}
@media (max-width:860px) {
  .topbar { border-radius: 0 0 20px 20px; border-top: 0; }
  .tabbar { border-radius: 22px 22px 0 0; border-bottom: 0; }
}
/* 侧栏选中：玻璃胶囊 */
.side-nav a { border-radius: 12px; padding: 10px 12px; }
.side-nav a.active { background: rgba(255,255,255,.7); color: var(--accent); box-shadow: 0 2px 10px rgba(30,44,110,.10),inset 0 0 0 1px rgba(255,255,255,.9); }
:root[data-theme=dark] .side-nav a.active { background: rgba(255,255,255,.12); box-shadow: inset 0 0 0 1px rgba(255,255,255,.12); }
.brand-mark { border-radius: 9px; box-shadow: 0 4px 12px rgba(0,100,230,.35),inset 0 1px 0 rgba(255,255,255,.5); }
.side-foot { border-radius: 14px; background: rgba(255,255,255,.35); margin: 6px 2px 0; }
:root[data-theme=dark] .side-foot { background: rgba(255,255,255,.05); }
/* 工具栏里的搜索框：玻璃胶囊 */
.top-search { height: 36px; border-radius: 999px; padding: 0 14px; background: rgba(255,255,255,.5); box-shadow: inset 0 0 0 1px var(--rim),0 1px 2px rgba(30,44,110,.06); }
.top-search:hover { background: rgba(255,255,255,.7); }
:root[data-theme=dark] .top-search { background: rgba(255,255,255,.07); }
.icon-btn { border-radius: 12px; }
.icon-btn:hover { background: rgba(255,255,255,.55); }
:root[data-theme=dark] .icon-btn:hover { background: rgba(255,255,255,.08); }
/* 按钮：胶囊形，主按钮带液态高光 */
.btn { border-radius: 999px; min-height: 34px; padding: 0 18px; }
.btn.small { min-height: 30px; padding: 0 14px; border-radius: 999px; }
.btn:not(.secondary):not(.danger) { background: linear-gradient(180deg,#3a9bff 0%,#0a7bf5 55%,#0868d6 100%); box-shadow: 0 4px 14px rgba(0,110,240,.32),inset 0 1px 0 rgba(255,255,255,.45),inset 0 -1px 0 rgba(0,0,0,.08); }
.btn:not(.secondary):not(.danger):hover { background: linear-gradient(180deg,#2c92ff,#0670e6); }
.btn.secondary { background: rgba(255,255,255,.62); box-shadow: inset 0 0 0 1px var(--rim),0 1px 3px rgba(30,44,110,.10); }
.btn.secondary:hover { background: rgba(255,255,255,.85); }
:root[data-theme=dark] .btn.secondary { background: rgba(255,255,255,.08); }
:root[data-theme=dark] .btn.secondary:hover { background: rgba(255,255,255,.14); }
.btn.danger { border-radius: 999px; box-shadow: 0 4px 14px rgba(220,20,40,.28),inset 0 1px 0 rgba(255,255,255,.35); }
/* 表单与分段控件 */
input:where(:not([type=checkbox]):not([type=radio])),select,textarea { border-radius: 12px; background-color: rgba(255,255,255,.72); border-color: rgba(60,60,90,.14); }
:root[data-theme=dark] :is(input:where(:not([type=checkbox]):not([type=radio])),select,textarea) { background-color: rgba(255,255,255,.06); }
.segmented { border-radius: 999px; padding: 3px; background: rgba(60,60,90,.08); }
.segmented button { border-radius: 999px; }
.segmented button[aria-pressed=true] { background: rgba(255,255,255,.95); box-shadow: 0 2px 8px rgba(30,44,110,.14); }
.chip,.chip-plain,.fact,.cv-badge { border-radius: 999px; }
pre,.code-block,.url-row { border-radius: var(--r); }
.toast { border-radius: 999px; }
/* —— 玻璃强度 —— */
/* 通透：正文面板也做背景模糊，最像玻璃；Windows 上面板文字会略软 */
:root[data-glass=vivid] :is(.panel,.group-list,.smart,.empty,.table-wrap,.feed-panel,.client-card,.kanban-column) { background-color: var(--frost-soft); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); }
/* 清晰：去掉所有背景模糊和流动动画，面板更实 */
:root[data-glass=clear] * { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
:root[data-glass=clear] body::before,:root[data-glass=clear] body::after { animation: none; }
:root[data-glass=clear] :is(.sidebar,.topbar,.tabbar,.hero-cell,.health-bar,.cv-legend) { background-color: var(--frost-strong); }
:root[data-glass=clear] :is(.panel,.group-list,.smart,.empty,.table-wrap,.feed-panel,.client-card,.kanban-column) { background-color: var(--frost-strong); }
/* —— 连接中心：红绿检测 —— */
.connect-hero { gap: 14px; }
.hero-cell { border-radius: var(--r-lg); }
.health-bar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 14px; padding: 12px 14px 12px 12px; border-radius: 999px; }
.health-bar .muted { flex: 1; min-width: 200px; }
.health-pill { display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 14px; border-radius: 999px; font-weight: 650; font-size: calc(15px * var(--ts)); background: var(--gray-soft); color: var(--ink-2); white-space: nowrap; }
.health-pill i { width: 10px; height: 10px; border-radius: 50%; background: #a1a1a8; flex: none; }
[data-level=ok]>.health-pill { background: var(--green-soft); color: var(--green); }
[data-level=ok]>.health-pill i { background: #2fbf55; box-shadow: 0 0 0 4px rgba(47,191,85,.18); }
[data-level=error]>.health-pill { background: var(--red-soft); color: var(--red); }
[data-level=error]>.health-pill i { background: #e5243b; box-shadow: 0 0 0 4px rgba(229,36,59,.18); }
[data-level=warn]>.health-pill { background: var(--orange-soft); color: var(--orange); }
[data-level=warn]>.health-pill i { background: #f29a12; box-shadow: 0 0 0 4px rgba(242,154,18,.2); }
[data-level=pending]>.health-pill i { animation: live-pulse 1.4s ease-in-out infinite; }
.client-card { position: relative; overflow: hidden; gap: 12px; padding: 18px; }
.client-card::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 4px; background: #c7c7cc; }
.client-card[data-level=ok]::before { background: linear-gradient(90deg,#2fbf55,#5ad97a); }
.client-card[data-level=error] { border-color: color-mix(in srgb,#e5243b 35%,var(--rim)); }
.client-card[data-level=error]::before { background: linear-gradient(90deg,#e5243b,#ff6b6b); }
.client-card[data-level=warn]::before { background: linear-gradient(90deg,#f29a12,#ffc04d); }
.conn-dot { flex: none; width: 14px; height: 14px; border-radius: 50%; background: #c7c7cc; }
.conn-dot[data-level=ok] { background: #2fbf55; box-shadow: 0 0 0 5px rgba(47,191,85,.18); }
.conn-dot[data-level=error] { background: #e5243b; box-shadow: 0 0 0 5px rgba(229,36,59,.18); }
.conn-dot[data-level=warn] { background: #f29a12; box-shadow: 0 0 0 5px rgba(242,154,18,.2); }
.conn-dot[data-level=pending] { animation: live-pulse 1.4s ease-in-out infinite; }
.health { display: flex; flex-direction: column; gap: 8px; }
.health .health-pill { align-self: flex-start; }
.health-summary { font-size: calc(15px * var(--ts)); color: var(--ink); font-weight: 550; line-height: 1.5; overflow-wrap: anywhere; }
.health[data-level=error] .health-summary { color: var(--red); }
.health[data-level=ok] .health-summary { display: none; }
.health-checks { list-style: none; margin: 0; padding: 10px 12px; border-radius: var(--r); background: rgba(255,255,255,.45); display: flex; flex-direction: column; gap: 7px; }
:root[data-theme=dark] .health-checks { background: rgba(255,255,255,.04); }
.health-checks li { display: grid; gap: 6px; align-items: baseline; font-size: calc(14px * var(--ts)); line-height: 1.45; }
.hc-mark { font-weight: 800; text-align: center; color: var(--green); }
.health-checks li[data-ok="0"] .hc-mark { color: var(--red); }
.health-checks li.info .hc-mark { color: var(--ink-3); }
.health-checks li[data-ok="0"].info .hc-mark { color: var(--orange); }
.hc-name { font-weight: 650; color: var(--ink-2); }
.hc-detail { color: var(--ink-3); overflow-wrap: anywhere; }
.health-checks li[data-ok="0"]:not(.info) .hc-detail { color: var(--red); }
.conn-detail { font-size: calc(14px * var(--ts)); color: var(--ink-3); }
.card-actions { flex-wrap: wrap; margin-top: auto; }
@media (max-width:860px) {
  .health-bar { border-radius: var(--r-lg); }
  .health-checks li { grid-template-columns: 20px minmax(0,1fr); }
  .hc-detail { grid-column: 2; }
}
/* —— macOS 弹出按钮（select）与弹出菜单 —— */
select { appearance: none; -webkit-appearance: none; min-height: 34px; padding: 4px 36px 4px 12px; border-radius: 10px; cursor: default; background-color: rgba(255,255,255,.78); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='14' viewBox='0 0 10 14'%3E%3Cpath d='M2 5.2 5 2.2l3 3M2 8.8l3 3 3-3' fill='none' stroke='%23fff' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"),linear-gradient(180deg,#3a9bff,#0a76ef); background-repeat: no-repeat,no-repeat; background-size: 10px 14px,20px 20px; background-position: calc(100% - 10px) 50%,calc(100% - 5px) 50%; background-origin: border-box; border: 1px solid rgba(60,60,90,.12); box-shadow: 0 1px 2px rgba(30,44,110,.08),inset 0 1px 0 rgba(255,255,255,.8); font-weight: 500; color: var(--ink); }
select:hover { background-color: rgba(255,255,255,.95); }
select.mac-open { border-color: color-mix(in srgb,var(--accent-bg) 55%,transparent); }
:root[data-theme=dark] select { background-color: rgba(255,255,255,.08); border-color: rgba(255,255,255,.12); box-shadow: inset 0 1px 0 rgba(255,255,255,.06); }
.mac-menu { position: fixed; z-index: 1000; min-width: 160px; max-width: min(420px,calc(100vw - 20px)); overflow: auto; padding: 5px; border-radius: 12px; background: rgba(246,247,251,.82); background-image: linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,.2)); -webkit-backdrop-filter: saturate(190%) blur(30px); backdrop-filter: saturate(190%) blur(30px); border: 1px solid rgba(255,255,255,.8); box-shadow: 0 18px 50px rgba(20,30,70,.24),0 0 0 .5px rgba(0,0,0,.12),inset 0 1px 0 rgba(255,255,255,.9); font-size: calc(15px * var(--ts)); color: var(--ink); opacity: 0; transform: scale(.97) translateY(-4px); transform-origin: top left; transition: opacity .12s ease,transform .14s cubic-bezier(.2,.8,.2,1); }
.mac-menu[data-side=up] { transform-origin: bottom left; transform: scale(.97) translateY(4px); }
.mac-menu.shown { opacity: 1; transform: none; }
.mac-item { display: flex; align-items: center; gap: 6px; min-height: 30px; padding: 3px 12px 3px 6px; border-radius: 7px; white-space: nowrap; cursor: default; user-select: none; }
.mac-item .mac-check { width: 16px; flex: none; text-align: center; font-weight: 700; font-size: .9em; }
.mac-item .mac-label { overflow: hidden; text-overflow: ellipsis; }
.mac-item.active { background: linear-gradient(180deg,#2f95ff,#0a78f2); color: #fff; }
.mac-item.disabled { color: var(--ink-3); opacity: .6; }
.mac-group { padding: 7px 12px 3px 28px; font-size: .82em; font-weight: 650; color: var(--ink-3); }
.mac-group:not(:first-child) { margin-top: 4px; border-top: 1px solid rgba(60,60,90,.1); padding-top: 8px; }
:root[data-theme=dark] .mac-menu { background: rgba(44,46,58,.82); background-image: none; border-color: rgba(255,255,255,.12); box-shadow: 0 18px 50px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.08); }
:root[data-glass=clear] .mac-menu { background: rgba(250,251,253,.98); }
:root[data-glass=clear][data-theme=dark] .mac-menu { background: rgba(44,46,58,.98); }
@media (prefers-reduced-motion:reduce) {
  .mac-menu { transition: none; }
}
/* 筛选栏：统一高度的一排玻璃控件，窄窗口自动换行 */
.filter-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.filter-bar select,.filter-bar input { min-height: 34px; }
.filter-bar input { border-radius: 10px; padding: 4px 12px; }
.health-checks li { grid-template-columns: 20px 5.8em minmax(0,1fr); }
/* —— 液态玻璃选择器：去掉蓝色上下箭头方块，改为半透明胶囊 + 跟随文字颜色的细小下拉角 —— */
select,select.status-select { background-image: linear-gradient(45deg,transparent 50%,currentColor 50%),
    linear-gradient(135deg,currentColor 50%,transparent 50%),
    linear-gradient(180deg,rgba(255,255,255,.72),rgba(255,255,255,.18)); background-size: 5px 5px,5px 5px,100% 100%; background-position: calc(100% - 18px) 54%,calc(100% - 13px) 54%,0 0; background-repeat: no-repeat; background-origin: padding-box; padding-right: 32px; border-radius: 999px; border: 1px solid rgba(255,255,255,.85); box-shadow: 0 1px 3px rgba(30,44,110,.08),inset 0 1px 0 rgba(255,255,255,.9),inset 0 0 0 .5px rgba(60,60,90,.10); color: var(--ink-2); }
select:hover { box-shadow: 0 2px 8px rgba(30,44,110,.12),inset 0 1px 0 rgba(255,255,255,.95),inset 0 0 0 .5px rgba(60,60,90,.14); }
select.mac-open { box-shadow: 0 0 0 3px var(--accent-soft),inset 0 1px 0 rgba(255,255,255,.9); }
form select,.field select { border-radius: 12px; }
/* 状态胶囊：保留状态色调，叠一层玻璃高光 */
select.status-select { min-height: 30px; padding: 2px 28px 2px 12px; font-weight: 650; background-position: calc(100% - 16px) 55%,calc(100% - 11px) 55%,0 0; border: 1px solid rgba(255,255,255,.7); box-shadow: inset 0 1px 0 rgba(255,255,255,.75),0 1px 2px rgba(30,44,110,.06); }
select.status-select.s-todo { background-color: rgba(118,118,140,.12); }
select.status-select.s-doing { background-color: rgba(0,122,255,.13); box-shadow: inset 0 1px 0 rgba(255,255,255,.75),inset 0 0 0 .5px rgba(0,122,255,.25); }
select.status-select.s-blocked { background-color: rgba(229,36,59,.12); box-shadow: inset 0 1px 0 rgba(255,255,255,.75),inset 0 0 0 .5px rgba(229,36,59,.25); }
select.status-select.s-review { background-color: rgba(242,140,20,.14); box-shadow: inset 0 1px 0 rgba(255,255,255,.75),inset 0 0 0 .5px rgba(242,140,20,.3); }
select.status-select.s-done { background-color: rgba(40,170,80,.13); box-shadow: inset 0 1px 0 rgba(255,255,255,.75),inset 0 0 0 .5px rgba(40,170,80,.28); }
:root[data-theme=dark] select,:root[data-theme=dark] select.status-select { background-image: linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%),linear-gradient(180deg,rgba(255,255,255,.10),rgba(255,255,255,.02)); border-color: rgba(255,255,255,.12); box-shadow: inset 0 1px 0 rgba(255,255,255,.08); }
/* ============ 1.4 项目画布：自由拖动、自定义连线、思维导图、便签 ============ */
.cv-stage { position: relative; height: 72vh; min-height: 420px; border-radius: var(--r-xl); overflow: hidden; cursor: grab; touch-action: none; outline: none; background-color: rgba(255,255,255,.42); background-image: radial-gradient(circle,rgba(60,70,110,.16) 1.1px,transparent 1.2px); background-size: 24px 24px; border: 1px solid var(--rim); box-shadow: inset 0 1px 0 rgba(255,255,255,.8),var(--shadow); }
:root[data-theme=dark] .cv-stage { background-color: rgba(20,22,32,.5); }
.cv-stage:fullscreen { border-radius: 0; background-color: var(--canvas,#eef1f8); }
.cv-stage.linking { cursor: crosshair; }
.cv-world { position: absolute; top: 0; left: 0; transform-origin: 0 0; }
.cv-edges { position: absolute; top: 0; left: 0; overflow: visible; }
.cv-edges .cv-edge,.cv-edges .cv-link,.cv-ghost { pointer-events: none; }
.cv-mind-edge { fill: none; stroke-linecap: round; opacity: .85; }
.cv-link { fill: none; stroke-width: 2.2; stroke-dasharray: 7 6; opacity: .95; }
.cv-link-hit { fill: none; stroke: transparent; stroke-width: 16; cursor: pointer; pointer-events: stroke; }
.cv-link.selected { stroke-width: 3.4; stroke-dasharray: none; }
.cv-ghost { fill: none; stroke: var(--accent-bg); stroke-width: 2.4; stroke-dasharray: 6 5; }
.cv-link-relate { --lc: #5f7fae; }
.cv-link-depend { --lc: #7c4dff; }
.cv-link-block { --lc: #e5243b; }
.cv-link-refer { --lc: #0e9f8a; }
.cv-link { stroke: var(--lc); }
.cv-arrow { fill: var(--lc); }
.cv-line.cv-link-relate,.cv-line.cv-link-depend,.cv-line.cv-link-block,.cv-line.cv-link-refer { background: repeating-linear-gradient(90deg,var(--lc) 0 6px,transparent 6px 10px); }
.cv-labels { position: absolute; inset: 0; pointer-events: none; }
.cv-link-tag { position: absolute; transform: translate(-50%,-50%); pointer-events: auto; max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; height: 26px; padding: 0 11px; border-radius: 999px; border: 1px solid rgba(255,255,255,.85); font: inherit; font-size: calc(13px * var(--ts)); font-weight: 650; cursor: pointer; color: var(--lc); background: rgba(255,255,255,.88); box-shadow: 0 2px 8px rgba(30,44,110,.14),inset 0 0 0 1px color-mix(in srgb,var(--lc) 35%,transparent); }
.cv-link-tag:hover { background: #fff; }
:root[data-theme=dark] .cv-link-tag { background: rgba(40,42,56,.92); border-color: rgba(255,255,255,.12); }
.cv-pos { position: absolute; width: 300px; user-select: none; cursor: grab; }
.cv-pos:active { cursor: grabbing; }
.cv-pos .cv-node { height: 100%; border-left: 4px solid var(--cv,#8e8e93); }
.cv-stage[data-mode=mind] .cv-node { border-left-color: var(--branch); }
.cv-stage[data-mode=mind] .cv-start { background: linear-gradient(160deg,#3b8cff,#1d5fe0); color: #fff; border: 0; }
.cv-stage[data-mode=mind] .cv-start :is(.cv-title,.cv-type,.cv-body,.cv-ord) { color: #fff; }
.cv-stage[data-mode=mind] .cv-start .cv-badge { background: rgba(255,255,255,.2); color: #fff; }
.cv-pos.drop .cv-node { box-shadow: 0 0 0 3px var(--accent-bg),0 10px 30px rgba(0,100,240,.25); }
.cv-handle { position: absolute; top: 50%; right: -9px; width: 18px; height: 18px; margin-top: -9px; padding: 0; border-radius: 50%; border: 2px solid #fff; background: var(--accent-bg); box-shadow: 0 2px 6px rgba(0,80,200,.35); cursor: crosshair; opacity: 0; transition: opacity .15s,transform .15s; }
.cv-pos:hover .cv-handle,.cv-stage.linking .cv-handle { opacity: 1; }
.cv-handle:hover { transform: scale(1.25); }
.cv-toggle { position: absolute; top: 50%; right: -30px; min-width: 22px; height: 22px; margin-top: -11px; padding: 0 5px; border-radius: 999px; border: 1px solid var(--rim); background: rgba(255,255,255,.92); color: var(--ink-2); font: inherit; font-size: 12px; font-weight: 700; line-height: 20px; cursor: pointer; box-shadow: 0 1px 4px rgba(30,44,110,.15); }
.cv-toggle.left { right: auto; left: -30px; }
.cv-pos:has(.cv-toggle.left) .cv-handle { right: auto; left: -9px; }
.cv-pos.collapsed .cv-toggle { background: var(--branch,#8e8e93); color: #fff; border-color: transparent; }
.cv-add { position: absolute; bottom: -12px; left: 50%; width: 26px; height: 26px; margin-left: -13px; padding: 0; border-radius: 50%; border: 1px solid var(--rim); background: rgba(255,255,255,.95); color: var(--accent); font-size: 16px; font-weight: 700; line-height: 24px; cursor: pointer; box-shadow: 0 2px 8px rgba(30,44,110,.18); opacity: 0; transition: opacity .15s; }
.cv-pos:hover .cv-add { opacity: 1; }
:root[data-theme=dark] :is(.cv-toggle,.cv-add) { background: rgba(50,52,66,.95); }
/* 便签：玻璃纸质感 */
.cv-note { --cv: var(--branch); }
.cv-note-pos .cv-node { background: color-mix(in srgb,var(--branch) 14%,rgba(255,255,255,.92)); border: 1px solid color-mix(in srgb,var(--branch) 35%,transparent); border-left: 4px solid var(--branch); }
.cv-note-pos .cv-title,.cv-note-pos .cv-body { cursor: text; }
.cv-note .cv-type { color: var(--branch); }
:root[data-theme=dark] .cv-note-pos .cv-node { background: color-mix(in srgb,var(--branch) 22%,rgba(36,38,50,.95)); }
.cv-dot.cv-note { background: #e0a400; }
/* 远景：卡片只留标题并放大，缩小后依然看得清 */
.cv-far .cv-pos .cv-node { justify-content: center; }
.cv-far .cv-body,.cv-far .cv-badges,.cv-far .cv-foot,.cv-far .cv-ord,.cv-far .cv-handle,.cv-far .cv-add { display: none; }
.cv-far .cv-title { -webkit-line-clamp: 3; }
/* 浮在画布上的控件 */
.cv-legend-pop { position: absolute; top: 14px; left: 14px; z-index: 5; max-width: min(520px,calc(100% - 28px)); }
.cv-legend-pop summary { list-style: none; display: inline-flex; align-items: center; height: 32px; padding: 0 14px; border-radius: 999px; cursor: pointer; font-weight: 600; font-size: calc(14px * var(--ts)); background: var(--glass-tint); background-image: var(--sheen); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); border: 1px solid var(--rim); box-shadow: var(--glass-shadow); }
.cv-legend-pop summary::-webkit-details-marker { display: none; }
.cv-legend-body { margin-top: 8px; padding: 12px 14px; border-radius: var(--r-lg); display: flex; flex-direction: column; gap: 10px; background: var(--frost-strong); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); border: 1px solid var(--rim); box-shadow: var(--glass-shadow); }
.cv-legend-body .cv-keys+.cv-keys { padding-left: 0; border-left: 0; }
.cv-legend-body .hint { margin: 0; }
.cv-controls { z-index: 5; }
.cv-btn { border-radius: 12px; }
.cv-zoom-label { position: absolute; left: 62px; bottom: 20px; z-index: 5; padding: 3px 10px; border-radius: 999px; font-size: 13px; font-weight: 600; color: var(--ink-3); background: rgba(255,255,255,.6); border: 1px solid var(--rim); }
:root[data-theme=dark] .cv-zoom-label { background: rgba(40,42,56,.7); }
.cv-mini { z-index: 5; border-radius: 14px; }
.cv-mini-node { opacity: .6; }
/* 连线 / 便签 / 新任务 编辑器 */
.cv-editor { position: absolute; z-index: 20; width: 320px; display: flex; flex-direction: column; gap: 10px; padding: 14px; border-radius: 20px; cursor: default; background: var(--frost-strong); background-image: var(--sheen); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); border: 1px solid var(--rim); box-shadow: var(--shadow-raised); }
.cv-editor-head { display: flex; align-items: center; gap: 8px; font-size: calc(14px * var(--ts)); min-width: 0; }
.cv-editor-head strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.cv-editor-head span { color: var(--ink-3); flex: none; }
.cv-editor .segmented { align-self: flex-start; }
.cv-editor textarea { min-height: 70px; }
.cv-editor-actions { display: flex; align-items: center; gap: 8px; }
.cv-editor-actions span { flex: 1; }
.cv-colors { display: flex; gap: 8px; }
.cv-colors button { width: 24px; height: 24px; border-radius: 50%; padding: 0; border: 2px solid #fff; background: var(--c); box-shadow: 0 1px 3px rgba(0,0,0,.2); cursor: pointer; }
.cv-colors button[aria-pressed=true] { box-shadow: 0 0 0 2px var(--c),0 1px 3px rgba(0,0,0,.2); }
.page-head .actions { flex-wrap: wrap; }
@media (max-width:860px) {
  .cv-zoom-label { display: none; }
  .cv-editor { width: min(320px,calc(100% - 24px)); }
  .cv-handle,.cv-add { opacity: 1; }
}
.cv-colors [data-color=yellow] { --c: #e0a400; }
.cv-colors [data-color=blue] { --c: #2f7cf6; }
.cv-colors [data-color=green] { --c: #13a37f; }
.cv-colors [data-color=pink] { --c: #e0457b; }
.cv-colors [data-color=purple] { --c: #8b5cf6; }
.cv-colors [data-color=gray] { --c: #7a7f8c; }
.cv-far .cv-title { font-size: min(calc(14px * var(--inv,1)),46px); line-height: 1.2; }
.cv-far .cv-type { font-size: min(calc(11px * var(--inv,1)),26px); }
.cv-far .cv-type .icon { width: 1em; height: 1em; }
/* ============ agent 在场：圆形头像 + 红绿灯 ============ */
.presence-stack { display: inline-flex; align-items: center; vertical-align: middle; margin-left: 8px; flex: none; }
.presence-stack .agent-avatar+.agent-avatar { margin-left: -7px; }
.agent-avatar { position: relative; display: inline-grid; place-items: center; flex: none; width: 30px; height: 30px; border-radius: 50%; background: var(--tone,#8e8e96); color: #fff; border: 2px solid rgba(255,255,255,.95); box-shadow: 0 2px 6px rgba(30,44,110,.22); }
.agent-avatar b { font-size: 11px; font-weight: 750; letter-spacing: -.02em; line-height: 1; }
.agent-avatar.has-logo { background: #fff; }
.agent-avatar .agent-logo { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
.client-mark .agent-logo { display: block; width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
.agent-avatar.sm { width: 24px; height: 24px; }
.agent-avatar.sm b { font-size: 9.5px; }
.agent-avatar[data-state=handed] { filter: saturate(.35); opacity: .8; }
.agent-avatar .light { position: absolute; right: -3px; bottom: -3px; width: 11px; height: 11px; border-radius: 50%; border: 2px solid #fff; background: #a1a1a8; }
.agent-avatar.sm .light { width: 9px; height: 9px; right: -2px; bottom: -2px; }
.light[data-light=green] { background: #2fbf55; }
.light[data-light=yellow] { background: #f5b400; }
.light[data-light=red] { background: #e5243b; }
.light[data-light=off] { background: #c7c7cc; }
/* 工作中：头像外圈呼吸光；接手/读取：慢闪的黄灯 */
.agent-avatar[data-state=working] { box-shadow: 0 0 0 0 rgba(47,191,85,.55),0 2px 6px rgba(30,44,110,.22); animation: agent-breathe 2s ease-in-out infinite; }
.agent-avatar[data-state=taking] .light,.agent-avatar[data-state=reading] .light { animation: agent-blink 1.6s ease-in-out infinite; }
.agent-avatar[data-state=error] { box-shadow: 0 0 0 2px rgba(229,36,59,.55),0 2px 6px rgba(30,44,110,.22); }
@keyframes agent-breathe {
  0%,100% { box-shadow: 0 0 0 0 rgba(47,191,85,.5),0 2px 6px rgba(30,44,110,.22); }
  50% { box-shadow: 0 0 0 5px rgba(47,191,85,0),0 2px 6px rgba(30,44,110,.22); }
}
@keyframes agent-blink {
  0%,100% { opacity: 1; }
  50% { opacity: .35; }
}
@media (prefers-reduced-motion:reduce) {
  .agent-avatar,.agent-avatar .light { animation: none !important; }
}
.agent-more { display: inline-grid; place-items: center; height: 24px; min-width: 24px; margin-left: -6px; padding: 0 6px; border-radius: 999px; background: rgba(255,255,255,.9); border: 1px solid var(--rim); font-size: 11px; font-weight: 700; color: var(--ink-2); }
.presence-strip { display: inline-flex; align-items: center; height: 36px; padding: 0 10px 0 6px; border: 1px solid var(--rim); border-radius: 999px; background: rgba(255,255,255,.5); cursor: pointer; box-shadow: 0 1px 2px rgba(30,44,110,.06); }
.presence-strip .presence-stack { margin-left: 0; }
.presence-strip:hover { background: rgba(255,255,255,.8); }
:root[data-theme=dark] .presence-strip { background: rgba(255,255,255,.07); }
.presence-banner { display: flex; flex-wrap: wrap; gap: 10px 22px; margin: -6px 0 18px; padding: 12px 16px; border-radius: var(--r-lg); background: var(--glass-tint); background-image: var(--sheen); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); border: 1px solid var(--rim); box-shadow: var(--glass-shadow); }
.presence-banner[data-light=green] { box-shadow: var(--glass-shadow),inset 4px 0 0 #2fbf55; }
.presence-banner[data-light=yellow] { box-shadow: var(--glass-shadow),inset 4px 0 0 #f5b400; }
.presence-banner[data-light=red] { box-shadow: var(--glass-shadow),inset 4px 0 0 #e5243b; }
.presence-line { display: flex; align-items: center; gap: 12px; min-width: 0; }
.presence-line .agent-avatar { width: 38px; height: 38px; }
.presence-line .agent-avatar b { font-size: 13px; }
.presence-line strong { font-size: calc(15px * var(--ts)); }
.presence-line p { margin: 1px 0 0; font-size: calc(13.5px * var(--ts)); color: var(--ink-3); }
.presence-state { display: inline-flex; align-items: center; gap: 5px; margin-left: 8px; height: 22px; padding: 0 9px; border-radius: 999px; font-size: calc(12.5px * var(--ts)); font-weight: 700; background: var(--gray-soft); color: var(--ink-2); }
.presence-state::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; }
.presence-state[data-light=green] { background: var(--green-soft); color: var(--green); }
.presence-state[data-light=yellow] { background: rgba(245,180,0,.16); color: #9a6b00; }
.presence-state[data-light=red] { background: var(--red-soft); color: var(--red); }
:root[data-theme=dark] .presence-state[data-light=yellow] { color: #ffcf4a; }
.presence-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }
.presence-sheet { width: min(560px,calc(100vw - 24px)); }
.presence-sheet .sheet-title { display: flex; align-items: flex-start; gap: 12px; justify-content: space-between; }
.cv-node-head .presence-stack { margin-left: auto; margin-right: 8px; }
.cv-pos.cv-live .cv-node { box-shadow: 0 0 0 2px rgba(47,191,85,.55),0 8px 24px rgba(47,191,85,.18); }
.kanban-card .presence-stack,.task-main .presence-stack { margin-left: 6px; }
@media (max-width:860px) {
  .presence-strip { padding: 0 6px; }
  .presence-strip .agent-avatar+.agent-avatar { display: none; }
}
@media (max-width:1200px) {
  .cv-mini { width: 150px; height: 96px; right: 12px; bottom: 12px; }
}
/* ============ 1.5 提醒条、可靠性设置、核实向导、画布查找 ============ */
.alert-bar { display: flex; flex-direction: column; gap: 8px; margin: 14px 0 0; }
.alert-item { display: flex; align-items: center; gap: 12px; padding: 10px 10px 10px 16px; border-radius: 18px; background: var(--glass-tint); background-image: var(--sheen); -webkit-backdrop-filter: var(--liquid-blur); backdrop-filter: var(--liquid-blur); border: 1px solid var(--rim); box-shadow: var(--glass-shadow); }
.alert-text { flex: 1; min-width: 0; font-size: calc(15px * var(--ts)); font-weight: 550; }
.alert-dot { width: 10px; height: 10px; border-radius: 50%; flex: none; background: #2f7cf6; box-shadow: 0 0 0 4px rgba(47,124,246,.18); }
.alert-item[data-level=warn] .alert-dot { background: #f29a12; box-shadow: 0 0 0 4px rgba(242,154,18,.2); }
.alert-item[data-level=error] .alert-dot { background: #e5243b; box-shadow: 0 0 0 4px rgba(229,36,59,.18); }
.ok-tag,.off-tag { flex: none; display: inline-flex; align-items: center; height: 28px; padding: 0 12px; border-radius: 999px; font-size: calc(14px * var(--ts)); font-weight: 650; }
.ok-tag { background: var(--green-soft); color: var(--green); }
.off-tag { background: var(--gray-soft); color: var(--ink-3); }
#reliability .actions { margin: 4px 0 10px; }
.actions.center { justify-content: center; margin-top: 16px; }
.review-progress { height: 6px; border-radius: 999px; background: rgba(60,60,90,.1); overflow: hidden; margin: 0 0 16px; }
.review-progress span { display: block; height: 100%; width: var(--p,0%); border-radius: inherit; background: linear-gradient(90deg,#2f95ff,#5ad97a); transition: width .3s; }
.review-card { display: flex; flex-direction: column; gap: 16px; }
.review-top { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.review-title { font-size: calc(24px * var(--ts)); line-height: 1.35; }
.review-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 16px; }
.review-grid h4,.review-source h4 { margin: 0 0 6px; color: var(--ink-3); font-size: calc(14px * var(--ts)); }
.review-source pre { margin-top: 8px; white-space: pre-wrap; word-break: break-word; padding: 12px 14px; font-size: calc(14px * var(--ts)); }
.review-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; padding-top: 6px; border-top: 1px solid var(--line-soft); }
.review-actions span { flex: 1; }
@media (max-width:860px) {
  .review-grid { grid-template-columns: minmax(0,1fr); }
  .review-actions span { display: none; }
}
.cv-find { position: absolute; top: 14px; left: 96px; z-index: 5; display: flex; gap: 8px; max-width: calc(100% - 120px); }
.cv-find input { width: 220px; min-height: 32px; height: 32px; border-radius: 999px; padding: 4px 14px; background-color: var(--frost-strong); }
.cv-find select { min-height: 32px; max-width: 220px; }
.cv-pos.cv-hit .cv-node { box-shadow: 0 0 0 3px #f5b400,0 10px 30px rgba(245,180,0,.3); }
.cv-pos.cv-dim { opacity: .35; }
@media (max-width:860px) {
  .cv-find { left: 14px; top: 56px; max-width: calc(100% - 28px); }
  .cv-find input { width: 150px; }
}
/* 提示条：深色玻璃、白字（之前文字颜色是透明的） */
.toast { background-color: rgba(28,30,42,.86); background-image: linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,0)); color: #fff; border-color: rgba(255,255,255,.18); }
.toast.error { background-color: rgba(214,28,52,.92); color: #fff; }
