:root{--bg:#f6f3ee;--ink:#22201c;--muted:#6f6a61;--line:#e3ddd2;--card:#fffdf9;--accent:#5b4b8a;--accent-ink:#fff;--me:#e9e3f7;--warn:#a34d2a}
*{box-sizing:border-box}html,body{margin:0;height:100%}
body{font:17px/1.5 -apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;background:var(--bg);color:var(--ink);display:flex;flex-direction:column;height:100vh;overflow:hidden}
header{display:flex;align-items:center;gap:20px;padding:12px 20px;border-bottom:1px solid var(--line);background:var(--card);position:sticky;top:0;z-index:2}
.brand{font-weight:600;font-size:18px}.sigil{color:var(--accent)}
nav{display:flex;gap:6px;flex:1}
button{font:inherit;cursor:pointer;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;padding:8px 14px}
button.primary,button[type=submit]{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
button.ghost{border-color:transparent;color:var(--muted)}
.tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.tab-pane{display:none;flex:1;flex-direction:column;min-height:0;overflow:auto}.tab-pane.active{display:flex}
#tab-graph{overflow:hidden}
.hidden{display:none!important}
textarea{font:inherit;flex:1;resize:none;border:1px solid var(--line);border-radius:12px;padding:12px;background:#fff;min-height:48px;max-height:220px}
.memory-grid{display:grid;grid-template-columns:240px 1fr;gap:0;flex:1;min-height:0}
.memory-nav{border-right:1px solid var(--line);padding:16px;background:var(--card);overflow:auto}
.memory-nav h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:14px 0 8px}
.memory-nav button{display:block;width:100%;text-align:left;margin-bottom:6px;border-color:transparent}
.memory-nav button.active{background:var(--me)}
.memory-main{padding:20px;overflow:auto}
.pane{max-width:900px;margin:0 auto}
.pane-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.pane h2{margin:0;font-size:22px}
#mem-text{width:100%;min-height:60vh;font-family:ui-monospace,Menlo,monospace;font-size:15px}
.hint{color:var(--muted);font-size:14px}
.episode{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin-bottom:12px;white-space:pre-wrap}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.card-item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;cursor:pointer}
.card-item:hover{border-color:var(--accent)}
.card-item .t{font-weight:600}.card-item .p{color:var(--muted);font-size:14px;margin-top:4px}
.badge{display:inline-block;font-size:12px;padding:1px 8px;border-radius:999px;background:var(--me);color:var(--accent);margin-right:6px}
.card-view{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:20px;margin-top:16px;white-space:pre-wrap}
.card-view h3{margin-top:0}
.card-view .meta{color:var(--muted);font-size:14px;margin-bottom:12px}
.card-view a{color:var(--accent)}
#cards-q{font:inherit;padding:8px 12px;border:1px solid var(--line);border-radius:10px;min-width:240px}
#health-lamps{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:16px}
.lamp{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px}
.lamp b{display:block;font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.ok{color:#2c7a4b}.bad{color:var(--warn)}
body.login{align-items:center;justify-content:center}
.login .card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:32px;max-width:420px}
.login input{font:inherit;padding:10px 12px;border:1px solid var(--line);border-radius:10px;width:100%;margin-bottom:10px}
.error{color:var(--warn);min-height:1.2em}
@media(max-width:720px){.memory-grid{grid-template-columns:1fr}.memory-nav{border-right:none;border-bottom:1px solid var(--line)}.msg{max-width:95%}}

/* ── граф ── */
.graph-grid{display:grid;grid-template-columns:260px 1fr;flex:1;min-height:0}
.graph-side{min-height:0;border-right:1px solid var(--line);background:var(--card);padding:14px;overflow:auto;font-size:14px}
.graph-side h3{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:16px 0 6px;display:flex;align-items:center;gap:8px}
.graph-side h3:first-child{margin-top:0}
.graph-side input[type=text],.graph-side input:not([type]){font:inherit;width:100%;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#fff}
.side-note{color:var(--muted);font-size:12px;margin-top:4px;line-height:1.5}
.side-link{margin-left:auto;font-size:12px;text-transform:none;letter-spacing:0;color:var(--accent);text-decoration:none}
.slider{display:block;margin:6px 0}.slider span{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}
.slider b{color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums}
.slider input{width:100%;accent-color:var(--accent)}
.check{display:flex;align-items:center;gap:8px;margin:6px 0;cursor:pointer}
.type-row{display:flex;align-items:center;gap:8px;padding:3px 0;cursor:pointer}
.type-row .dot{font-size:16px;line-height:1}.type-row .n{margin-left:auto;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
.tag-list{max-height:220px;overflow:auto;margin-top:6px}
.tag-btn{display:flex;width:100%;text-align:left;border:none;background:transparent;padding:3px 6px;border-radius:6px;font-size:13px;color:var(--muted)}
.tag-btn:hover{background:var(--me)}.tag-btn.active{background:var(--me);color:var(--accent)}
.tag-btn .n{margin-left:auto;font-variant-numeric:tabular-nums}
.side-buttons{display:flex;flex-direction:column;gap:6px;margin-top:14px}
.graph-wrap{position:relative;background:#1f1d24;min-height:0}
#graph-canvas{position:absolute;inset:0}
/* ── карточка ── */
.card-page{flex:1;overflow:auto;padding:16px 24px}
.card-topbar{margin-bottom:8px}
.card-grid{display:grid;grid-template-columns:1fr 320px;gap:24px;max-width:1200px}
#card-article .head{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px;margin-bottom:6px}
#card-article .id{font-family:ui-monospace,Menlo,monospace}
#card-article h1{font-size:26px;margin:0 0 14px}
.md p{margin:0 0 10px}.md h1,.md h2,.md h3{margin:16px 0 8px}.md ul,.md ol{margin:0 0 10px;padding-left:22px}
.md code{background:var(--me);padding:1px 5px;border-radius:5px;font-size:.9em}.md a{color:var(--accent)}
.md blockquote{border-left:3px solid var(--line);margin:0 0 10px;padding:2px 12px;color:var(--muted)}
.section{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:12px}
.section h4{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 8px}
.fm-row{display:grid;grid-template-columns:90px 1fr;gap:8px;font-size:13px;margin-bottom:4px}.fm-row .k{color:var(--muted)}
.rel-group{margin-bottom:8px}.rel-group .rel{font-size:12px;color:var(--muted)}
.rel-group a{display:block;font-size:14px;color:var(--accent);text-decoration:none;padding:2px 0}
.rel-group a:hover{text-decoration:underline}
#local-graph{height:220px;background:#1f1d24;border-radius:8px;overflow:hidden}
.tbadge{display:inline-block;color:#fff;font-size:11px;text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border-radius:6px}
@media(max-width:900px){.graph-grid{grid-template-columns:1fr}.graph-side{max-height:40vh;border-right:none;border-bottom:1px solid var(--line)}.card-grid{grid-template-columns:1fr}}

/* ── чат (по образцу Уинтермьюта) ── */
.chat-grid{display:grid;grid-template-columns:240px 1fr;flex:1;min-height:0}
.chat-grid.with-preview{grid-template-columns:240px 1fr minmax(320px,44%)}
.chat-side{border-right:1px solid var(--line);background:var(--card);display:flex;flex-direction:column;min-height:0}
.chat-side-head{padding:12px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.chat-side-head select,.chat-side-head input,.chat-head select{font:inherit;font-size:14px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;background:#fff}
.chat-list{flex:1;overflow:auto;padding:6px}
.conv{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:14px}
.conv:hover{background:var(--me)}.conv.active{background:var(--me);font-weight:600}
.conv .dot{width:8px;flex:none}.conv .dot.busy{color:#d69e2e}.conv .dot.unread{color:#2c7a4b}
.conv .t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conv .x{opacity:0;border:none;background:none;color:var(--muted);padding:0 4px}.conv:hover .x{opacity:1}
.hit{padding:8px 10px;border-radius:8px;cursor:pointer;font-size:13px}.hit:hover{background:var(--me)}
.hit .h{font-weight:600}.hit .m{color:var(--muted);font-size:12px}.hit mark{background:transparent;color:var(--accent);font-weight:600}
.chat-center{display:flex;flex-direction:column;min-height:0;position:relative}
.chat-head{display:flex;align-items:center;gap:10px;padding:10px 20px;border-bottom:1px solid var(--line);background:var(--card);flex-wrap:wrap}
.chat-head h1{font-size:18px;margin:0;flex:0 1 auto;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text}
.chat-status{margin-left:auto;color:var(--muted);font-size:12px}
button.small{font-size:13px;padding:5px 10px}.check.small{font-size:13px;margin:0}
.kbd{font-size:11px;opacity:.7;margin-left:4px}
.chat-messages{flex:1;overflow:auto;padding:16px 20px;display:flex;flex-direction:column;gap:16px}
.m-user{white-space:pre-wrap;font-size:16px}.m-user .chev{font-family:ui-monospace,Menlo,monospace;color:var(--muted)}
.m-asst{display:flex;flex-direction:column;gap:6px}
.m-asst .body{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px}
.m-meta{font-size:11px;color:var(--muted);font-family:ui-monospace,Menlo,monospace;display:flex;gap:10px;align-items:center}
.m-meta button{border:none;background:none;padding:0 2px;font-size:13px;opacity:.7}.m-meta button:hover,.m-meta button.on{opacity:1}
.tools{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--muted)}
.tools .tail{border-left:2px solid var(--line);margin-left:4px;padding-left:10px}
.tools details summary{cursor:pointer;list-style:none}.tools details summary::-webkit-details-marker{display:none}
.tools .more{margin-bottom:4px}
.trow{display:flex;gap:6px;padding:1px 0}.trow .st{width:12px}.trow .st.run{color:#d69e2e}.trow .st.ok{color:#2c7a4b}.trow .st.err{color:var(--warn)}
.trow .nm{color:var(--accent)}.trow .er{color:var(--warn)}.tools .bad{color:var(--warn)}
.thinking{color:var(--muted);font-size:14px;font-style:italic}
.m-err{color:var(--warn);font-size:14px}.m-err button{margin-left:8px}
.empty{margin:auto;max-width:560px;text-align:center;color:var(--muted)}
.empty h2{color:var(--ink);font-size:22px;margin-bottom:6px}
.quick{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:16px}
.quick button{font-size:14px}
.gate{margin:0 20px 8px;background:#fff8e6;border:1px solid #e6c46a;border-radius:12px;padding:12px 16px;font-size:14px}
.gate pre{white-space:pre-wrap;margin:6px 0;font-size:13px}.gate .actions{display:flex;gap:8px}
.cardpick{margin:0 20px 8px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px}
.cardpick input{font:inherit;width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px}
.cardpick-list{max-height:200px;overflow:auto;margin-top:6px}
.cardpick-list .it{display:flex;gap:8px;align-items:center;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:14px}
.cardpick-list .it:hover,.cardpick-list .it.sel{background:var(--me)}.cardpick-list .id{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--muted);margin-left:auto}
.toast{margin:0 20px 8px;color:#2c7a4b;font-size:13px}
.chat-composer{margin:0 20px 16px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:10px}
.chat-composer textarea{width:100%;border:none;background:transparent;padding:6px;min-height:56px;font-size:16px}
.chat-composer textarea:focus{outline:none}
.composer-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:13px;background:var(--me);color:var(--accent);border-radius:8px;padding:3px 8px;cursor:pointer}
.chip.err{background:#fde8e0;color:var(--warn)}.chip .x{opacity:.6}.chip .x:hover{opacity:1}
.drop{position:absolute;inset:0;z-index:5;background:rgba(91,75,138,.35);border:3px dashed var(--accent);display:flex;align-items:center;justify-content:center;font-size:20px;color:#fff;border-radius:12px;pointer-events:none}
.chat-preview{border-left:1px solid var(--line);background:var(--card);display:flex;flex-direction:column;min-height:0}
.pv-head{display:flex;gap:8px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line);font-size:14px}
.pv-head .n{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pv-head a,.pv-head button{font-size:14px}
.pv-body{flex:1;overflow:auto;padding:12px}.pv-body img{max-width:100%;border-radius:8px}.pv-body iframe{width:100%;height:100%;border:none;min-height:60vh}
.pv-body pre{white-space:pre-wrap;font-size:13px}
.only-mobile{display:none}
.voice-rec{background:#fde8e0!important;color:var(--warn)!important}
@media(max-width:900px){.chat-grid,.chat-grid.with-preview{grid-template-columns:1fr}.chat-side{display:none}.chat-side.open{display:flex;position:absolute;inset:0;z-index:6}.only-mobile{display:inline-block}.chat-head h1{max-width:100%}.chat-preview{position:fixed;inset:0;z-index:30}}
.modal{position:fixed;inset:0;z-index:40;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;padding:16px}
.modal-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px;max-width:520px;width:100%;display:flex;flex-direction:column;gap:8px}
.modal-card h3{margin:0 0 4px}.modal-card button{text-align:left;padding:10px 12px}.modal-card button small{color:var(--muted)}.modal-card button:disabled{opacity:.5}

/* ── подключения ── */
.conn-pane{padding:20px}
.conn-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;margin-bottom:20px}
.conn{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px}
.conn .t{font-weight:600}.conn .s{font-size:13px;color:var(--muted);margin:4px 0}
.conn .st.ok{color:#2c7a4b}.conn .st.error{color:var(--warn)}.conn .st.new{color:var(--muted)}
.conn .actions{display:flex;gap:6px;margin-top:8px}
.conn-add{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;max-width:560px}
.conn-add h3{margin:0 0 10px}.conn-tabs{display:flex;gap:6px;margin-bottom:10px}
.conn-add label{display:block;font-size:14px;margin:8px 0}
.conn-add input,.conn-add select{display:block;width:100%;font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:8px;margin-top:4px;background:#fff}
.jobs{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.job{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;font-size:14px}
.job .l{color:var(--muted);font-size:12px;margin-top:4px}.job .actions{display:flex;gap:6px;align-items:center;margin-top:8px}
