/* ---------- 画布助手 ---------- */
/* 右侧浮层，和左边的素材库对称。面板开着的时候把右上角那排和小地图往左推，
   否则它们会被压在面板底下——那两处都是 position:absolute 贴右边缘的。 */
.nc-chat{display:none;position:absolute;z-index:20;right:16px;top:76px;bottom:82px;
  width:min(360px,calc(100% - 32px));flex-direction:column;border:1px solid var(--line);border-radius:18px;
  background:var(--surf);box-shadow:0 18px 48px #00000030;overflow:hidden;font-size:12.5px}
.node-canvas-mode.nc-chat-open .nc-chat{display:flex}
.node-canvas-mode.nc-chat-open .nc-top-right{right:calc(min(360px,100% - 32px) + 28px)}
.node-canvas-mode.nc-chat-open .nc-minimap{right:calc(min(360px,100% - 32px) + 28px)}

/* 标头：对话名 + 新对话 / 历史 / 设置 / 收起 */
.ncc-head{display:flex;align-items:center;gap:2px;height:50px;padding:0 8px 0 16px;flex:0 0 auto}
.ncc-head>.ui-icon{width:15px;height:15px;margin-right:6px;color:var(--acc)}
.ncc-head>b{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600}
.ncc-free{margin:0 4px;padding:0 6px;border:1px solid var(--line);border-radius:8px;font-size:11px;color:var(--dim);white-space:nowrap}
.ncc-head button{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;border:0;border-radius:9px;background:transparent;color:var(--dim);cursor:pointer}
.ncc-head button .ui-icon{width:16px;height:16px}
.ncc-head button:hover:not(:disabled),.ncc-head button[aria-expanded="true"]{background:var(--hole);color:var(--fg)}
.ncc-head button:disabled{opacity:.35;cursor:default}

.ncc-list{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:4px 14px 14px;display:flex;flex-direction:column;gap:12px;
  scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--fg) 25%,transparent) transparent}
.ncc-turn p{margin:0;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.ncc-turn.user{align-self:flex-end;max-width:86%;padding:9px 12px;border-radius:14px 14px 4px 14px;background:var(--hole)}
.ncc-turn.bot{align-self:stretch;display:flex;flex-direction:column;gap:8px}
.ncc-busy{display:flex;align-items:center;color:var(--dim)}
.ncc-failed{color:var(--bad)}
.ncc-note{margin:0;color:var(--dim);font-size:11px}
/* 用户这句用的不是「搭建」时，气泡上标一下：回头看得懂它那轮为什么没动画布 */
.ncc-tag{display:inline-flex;align-items:center;gap:4px;margin-bottom:4px;color:var(--dim);font-size:11px}
.ncc-tag .ui-icon{width:12px;height:12px}

/* 补丁清单。改动是要花人的注意力去核对的，所以一条一行、带图标，别挤成一段话。 */
.ncc-patch{border:1px solid var(--line);border-radius:12px;padding:10px;background:var(--hole)}
.ncc-patch ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.ncc-patch li{display:flex;align-items:flex-start;gap:7px;line-height:1.5}
.ncc-patch li .ui-icon{width:13px;height:13px;margin-top:3px;flex:0 0 13px;color:var(--dim)}
.ncc-patch li.danger .ui-icon{color:var(--bad)}
.ncc-patch .ncc-note{margin-top:8px}
.ncc-patch-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}
.ncc-patch-actions button{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 11px;border:1px solid var(--line);
  border-radius:14px;background:var(--surf);color:var(--fg);font:inherit;font-size:11px;cursor:pointer}
.ncc-patch-actions button:hover{border-color:var(--dim)}
.ncc-patch-actions .ui-icon{width:13px;height:13px}
.ncc-applied{display:inline-flex;align-items:center;gap:5px;color:var(--dim);font-size:11px}
.ncc-primary{background:var(--fg)!important;border-color:var(--fg)!important;color:var(--surf)!important}

/* 空对话：光球 + 一句话 + 四个入口 */
.ncc-empty{margin:auto 0;display:flex;flex-direction:column;align-items:center;gap:8px;padding:10px 0;text-align:center}
.ncc-empty h3{margin:14px 0 0;font-size:15px;font-weight:600;color:var(--fg)}
.ncc-empty>p{margin:0 0 12px;max-width:250px;color:var(--dim);line-height:1.7}
.ncc-starters{display:flex;flex-direction:column;gap:2px;width:100%}
.ncc-starters button{display:flex;align-items:center;gap:11px;height:40px;padding:0 10px;border:0;border-radius:10px;
  background:transparent;color:var(--fg);font:inherit;font-size:12.5px;text-align:left;cursor:pointer}
.ncc-starters button:hover,.ncc-starters button:focus-visible{background:var(--hole)}
.ncc-starters button>span{flex:1}
.ncc-starters .ui-icon{width:15px;height:15px;color:var(--dim)}
.ncc-starters button>.ui-icon:last-child{width:13px;height:13px;opacity:0;transition:opacity .15s,transform .15s}
.ncc-starters button:hover>.ui-icon:last-child,.ncc-starters button:focus-visible>.ui-icon:last-child{opacity:1;transform:translateX(2px)}
@media (hover:none){ .ncc-starters button>.ui-icon:last-child{opacity:.6} }

/* 光球：一层慢慢转的色环，一层不转的高光。颜色从站点的绿出发 */
.ncc-orb{position:relative;display:block;width:54px;height:54px;flex:0 0 auto;border-radius:50%;overflow:hidden;isolation:isolate;
  box-shadow:0 0 36px color-mix(in srgb,var(--acc) 40%,transparent)}
.ncc-orb::before,.ncc-orb::after{content:"";position:absolute;inset:0;border-radius:50%}
.ncc-orb::before{inset:-30%;border-radius:0;background:conic-gradient(from 90deg,#1f9d74,#8ee6c3,#efd27f,#3aa98f,#9fd9f0,#1f9d74);
  filter:blur(7px);animation:ncc-orb 12s linear infinite}
.ncc-orb::after{background:radial-gradient(circle at 34% 30%,#ffffffd9 0 7%,#ffffff40 22%,transparent 46%),
  radial-gradient(circle at 70% 80%,#00000030,transparent 58%)}
.ncc-orb.mini{display:inline-block;width:12px;height:12px;margin-right:8px;box-shadow:none}
.ncc-orb.mini::before{filter:blur(1.5px);animation-duration:1.4s}
@keyframes ncc-orb{to{transform:rotate(1turn)}}
@media (prefers-reduced-motion:reduce){ .ncc-orb::before{animation:none} }

/* 输入框：选中的节点、正文、底栏（+ / 方式 / 发送）收在一个圆角框里 */
.ncc-compose{flex:0 0 auto;display:flex;flex-direction:column;margin:0 12px 12px;border:1px solid var(--line);border-radius:14px;
  background:var(--bg);transition:border-color .15s}
.ncc-compose:focus-within{border-color:color-mix(in srgb,var(--fg) 32%,var(--line))}
.ncc-compose textarea{display:block;width:100%;min-height:50px;max-height:180px;resize:none;padding:10px 12px 4px;border:0;
  background:transparent;color:var(--fg);font:inherit;font-size:13px;line-height:1.55}
.ncc-compose textarea:focus,.ncc-compose textarea:focus-visible{outline:none}
.ncc-compose textarea::placeholder{color:var(--ph)}
.ncc-bar{display:flex;align-items:center;gap:2px;padding:2px 6px 6px}
.ncc-bar-gap{flex:1}
.ncc-tool{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;border:0;border-radius:9px;background:transparent;color:var(--dim);cursor:pointer}
.ncc-tool .ui-icon{width:16px;height:16px}
.ncc-tool:hover,.ncc-tool[aria-expanded="true"]{background:var(--hole);color:var(--fg)}
.ncc-mode{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 8px;border:0;border-radius:9px;background:transparent;
  color:var(--fg);font:inherit;font-size:12px;cursor:pointer}
.ncc-mode:hover,.ncc-mode[aria-expanded="true"]{background:var(--hole)}
.ncc-mode .ui-icon{width:14px;height:14px;color:var(--dim)}
.ncc-mode .ui-icon:last-child{width:12px;height:12px;transition:transform .15s}
.ncc-mode[aria-expanded="true"] .ui-icon:last-child{transform:rotate(180deg)}
.ncc-send{display:grid;place-items:center;width:32px;height:32px;flex:0 0 32px;border:0;border-radius:50%;background:var(--fg);color:var(--surf);
  cursor:pointer;transition:opacity .15s}
.ncc-send .ui-icon{width:16px;height:16px}
.ncc-send.stop .ui-icon{width:11px;height:11px;fill:currentColor}
/* 没字可发时发送键淡下去（还能点，点了什么也不发） */
.ncc-compose:has(textarea:placeholder-shown) .ncc-send:not(.stop){opacity:.35}

/* 画布上选中的节点，摆在输入框里、正文上面。点标签本身把画布挪过去，× 是在画布上取消选中 */
.ncc-context{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:5px;max-height:84px;overflow-y:auto;padding:9px 10px 0}
.ncc-context[hidden]{display:none}
.ncc-context-label{display:inline-flex;align-items:center;gap:4px;margin-right:1px;color:var(--dim);font-size:11px;white-space:nowrap;cursor:help}
.ncc-context-label .ui-icon{width:12px;height:12px}
.ncc-chip{display:inline-flex;align-items:center;min-width:0;max-width:100%;height:24px;border:1px solid var(--line);border-radius:8px;background:var(--surf);overflow:hidden}
.ncc-chip button{display:inline-flex;align-items:center;gap:4px;min-width:0;height:100%;padding:0 3px 0 6px;border:0;background:transparent;color:var(--fg);font:inherit;font-size:11px;cursor:pointer}
.ncc-chip button:hover{background:var(--hole)}
.ncc-chip-main>span:last-child,.ncc-ref>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:130px}
.ncc-chip .ncc-chip-x{padding:0 5px;color:var(--dim)}
.ncc-chip-x .ui-icon{width:11px;height:11px}
.ncc-chip.more{padding:0 7px;color:var(--dim);font-size:11px}
.ncc-chip .nc-kind-icon,.ncc-ref .nc-kind-icon,.ncc-pop .nc-kind-icon{width:14px;height:14px}
.ncc-chip .nc-kind-icon .ui-icon,.ncc-ref .nc-kind-icon .ui-icon,.ncc-pop .nc-kind-icon .ui-icon{width:12px;height:12px}
.ncc-context-clear{height:24px;padding:0 5px;border:0;border-radius:6px;background:transparent;color:var(--dim);font:inherit;font-size:11px;cursor:pointer}
.ncc-context-clear:hover{background:var(--hole);color:var(--fg)}
/* 发过的消息上挂着当时选中的节点 */
.ncc-refs{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}
.ncc-ref{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:100%;height:22px;padding:0 6px 0 4px;border:1px solid var(--line);border-radius:6px;background:var(--surf);color:var(--fg);font:inherit;font-size:11px;cursor:pointer}
.ncc-ref:hover{border-color:var(--dim)}
.ncc-ref.more{cursor:default;color:var(--dim)}
.ncc-ref.more:hover{border-color:var(--line)}
/* 从助手里点节点标签时，画布挪过去后让那个节点闪一下 */
.nc-node.nc-ping .nc-card{animation:nc-ping 1.2s ease-out}
@keyframes nc-ping{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--fg) 45%,transparent)}100%{box-shadow:0 0 0 16px transparent}}
@media (prefers-reduced-motion:reduce){ .nc-node.nc-ping .nc-card{animation:none;outline:2px solid var(--fg);outline-offset:3px} }

/* 浮层：历史、设置从标头往下开，铺满面板宽；方式、更多、@ 从输入框往上开 */
.ncc-pop{position:absolute;z-index:3;left:10px;right:10px;max-height:min(380px,calc(100% - 130px));overflow-y:auto;overscroll-behavior:contain;
  display:flex;flex-direction:column;gap:1px;padding:6px;border:1px solid var(--line);border-radius:14px;background:var(--surf);
  box-shadow:0 16px 40px #00000040;scrollbar-width:thin}
.ncc-pop.mode,.ncc-pop.more{right:auto;width:min(290px,calc(100% - 20px))}
.ncc-pop-head{padding:6px 8px 7px;color:var(--dim);font-size:11px}
.ncc-pop-empty{margin:0;padding:16px 12px 18px;text-align:center;color:var(--dim);line-height:1.7}
.ncc-pop button{display:flex;align-items:center;gap:10px;width:100%;min-height:36px;padding:6px 8px;border:0;border-radius:9px;
  background:transparent;color:var(--fg);font:inherit;font-size:12.5px;text-align:left;cursor:pointer}
.ncc-pop button:hover,.ncc-pop button:focus-visible,.ncc-pop button[aria-selected="true"]{background:var(--hole);outline:none}
.ncc-pop button>span:not(.nc-kind-icon){flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.ncc-pop b{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ncc-pop small{color:var(--dim);font-size:11px;line-height:1.5;white-space:normal}
.ncc-pop button>small{flex:0 0 auto}
.ncc-pop .ui-icon{width:15px;height:15px;color:var(--dim)}
.ncc-pop .nc-kind-icon .ui-icon{color:inherit}      /* 节点类型图标保留各自的颜色 */
.ncc-pop [aria-checked="true"] b{color:var(--acc)}
/* 历史：一行一段，删除键悬停才出现（触屏上常亮） */
.ncc-hist-row{display:flex;align-items:center;border-radius:9px}
.ncc-hist-row:hover,.ncc-hist-row.current{background:var(--hole)}
.ncc-hist-row .ncc-hist-open:hover,.ncc-hist-row .ncc-hist-open:focus-visible{background:transparent}
.ncc-pop .ncc-hist-del{flex:0 0 32px;width:32px;justify-content:center;padding:0;opacity:0}
.ncc-hist-row:hover .ncc-hist-del,.ncc-pop .ncc-hist-del:focus-visible{opacity:1}
.ncc-pop .ncc-hist-del:hover .ui-icon{color:var(--bad)}
@media (hover:none){ .ncc-pop .ncc-hist-del{opacity:1} }
/* 设置里的开关：真 checkbox 藏起来，后面的 <i> 画成拨杆 */
/* 全站的 label 是表单小标题（加粗、灰、上下有外边距），这里是一整行开关，全部压回来 */
.ncc-switch{position:relative;display:flex;align-items:flex-start;gap:14px;margin:0;padding:9px 8px;border-radius:9px;
  color:var(--fg);font-size:12.5px;font-weight:400;cursor:pointer}
.ncc-switch:hover{background:var(--hole)}
.ncc-switch>span{flex:1;display:flex;flex-direction:column;gap:3px}
.ncc-switch b{font-weight:500;white-space:normal}
.ncc-switch small{font-weight:400}
.ncc-switch input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.ncc-switch i{position:relative;flex:0 0 32px;width:32px;height:18px;margin-top:1px;border-radius:9px;background:var(--line);transition:background .15s}
.ncc-switch i::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0000004d;transition:transform .15s}
.ncc-switch input:checked+i{background:var(--acc)}
.ncc-switch input:checked+i::after{transform:translateX(14px)}
.ncc-switch input:focus-visible+i{outline:2px solid var(--acc);outline-offset:2px}
.ncc-pop-foot{margin:6px 8px 4px;padding-top:9px;border-top:1px solid var(--line);color:var(--dim);font-size:11px;line-height:1.65}

@media(max-width:640px){
  /* 窄屏上面板铺满，右上角那排就不用让位了——本来也没地方可让 */
  .nc-chat{left:12px;right:12px;top:108px;bottom:114px;width:auto}
  .node-canvas-mode.nc-chat-open .nc-top-right,.node-canvas-mode.nc-chat-open .nc-minimap{right:12px}
  .node-canvas-mode.nc-chat-open .nc-minimap{display:none}
}
