/* Страницы, заметки и «Хранилище» на порту страниц. Только токены Life OS (tokens.css). */
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:var(--t-body)/1.55 var(--font)}
.page{max-width:var(--page);margin:0 auto;padding:16px var(--gutter) 48px}
a{color:var(--accent)}
.wl{color:var(--accent);text-decoration:none;cursor:pointer;border-bottom:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}
.wl:hover{border-bottom-color:var(--accent)}
.lifeos-dash a{color:inherit;text-decoration:none}   /* ссылки карточек пульта — как в Obsidian, без подчёркивания */
.lifeos-dash a:hover{color:var(--accent)}
.ws-empty{color:var(--ink-3);font-size:var(--t-small)}

/* блоки представлений идут сеткой; дашборд и wide — на всю ширину */
.blocks{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr));gap:16px;margin:12px 0 20px;align-items:start}
.block .lifeos-dash{margin:0}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.card h3{margin:0 0 8px;font:500 var(--t-label)/1.4 var(--font-mono);text-transform:uppercase;letter-spacing:var(--track-label);color:var(--ink-2)}
.block-error{border-color:var(--neg);color:var(--ink-2)}
.block-error b{color:var(--neg)}
ul.notes{list-style:none;margin:0;padding:0}
ul.notes li{display:flex;gap:10px;justify-content:space-between;align-items:baseline;padding:7px 0;border-top:1px solid var(--line)}
ul.notes li:first-child{border-top:0}
ul.notes small{color:var(--ink-3);font:var(--t-label) var(--font-mono);flex:none}

.problems{background:var(--surface);border:1px solid var(--line-2);border-left:3px solid var(--neg);border-radius:var(--radius);padding:8px 14px;margin:0 0 12px;font-size:var(--t-small)}
.problems summary{cursor:pointer;color:var(--ink-2)}
.problems ul{margin:8px 0 0;padding-left:18px}
.problems.is-bad{color:var(--neg)}

/* Markdown */
.md h1{font-size:var(--t-title);line-height:1.2;margin:.2em 0 .5em;letter-spacing:-.02em}
.md h2{font-size:20px;margin:1.4em 0 .4em}
.md h3{font-size:17px;margin:1.2em 0 .3em}
.md p{margin:.5em 0}
.md ul{margin:.4em 0;padding-left:1.2em}
.md li.task{list-style:none;margin-left:-1.2em}
.md li .box{display:inline-flex;width:15px;height:15px;border:1px solid var(--line-2);border-radius:4px;margin-right:8px;align-items:center;justify-content:center;font-size:11px;vertical-align:-2px;color:var(--accent)}
.md li.is-done{color:var(--ink-3);text-decoration:line-through}
.md code,pre{font-family:var(--font-mono);font-size:.88em}
.md code{background:var(--surface);border-radius:4px;padding:0 3px}
pre{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:10px;overflow-x:auto}
pre code{background:none;padding:0}
blockquote{margin:.6em 0;padding:0 0 0 12px;border-left:3px solid var(--line-2);color:var(--ink-2)}
.callout{margin:.8em 0;padding:8px 14px;border-radius:var(--radius);background:var(--accent-soft);border:1px solid var(--line)}
.callout-title{font:500 var(--t-label)/1.6 var(--font-mono);text-transform:uppercase;letter-spacing:var(--track-label);color:var(--ink-2)}
.table{overflow-x:auto}
table{border-collapse:collapse;font-size:var(--t-small);margin:.6em 0}
th,td{border-bottom:1px solid var(--line);padding:5px 10px;text-align:left;vertical-align:top}
th{color:var(--ink-2);font-weight:600}
hr{border:0;border-top:1px solid var(--line);margin:1.2em 0}

/* заметка и «Хранилище» */
.path{color:var(--ink-3);font:var(--t-label) var(--font-mono);margin:0 0 8px;overflow-wrap:anywhere}
.path .edit{font:var(--t-label) var(--font);margin-left:8px;padding:2px 10px;border:1px solid var(--line-2);border-radius:var(--radius);background:var(--surface);color:var(--ink);cursor:pointer}
.path .edit:hover{border-color:var(--accent)}
.fm{display:grid;grid-template-columns:max-content 1fr;gap:2px 12px;font-size:var(--t-small);margin:0 0 14px;padding:10px 14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}
.fm dt{color:var(--ink-3);font-family:var(--font-mono)}
.fm dd{margin:0;overflow-wrap:anywhere}
.raw{max-width:100%;border-radius:var(--radius)}
embed.raw{width:100%;height:80vh}
.filter{width:100%;font:inherit;padding:8px 12px;border:1px solid var(--line-2);border-radius:var(--radius);background:var(--surface);color:var(--ink);margin:0 0 8px}
.page > h3{margin:16px 0 6px;font:500 var(--t-label)/1.4 var(--font-mono);text-transform:uppercase;letter-spacing:var(--track-label);color:var(--ink-3)}
.tree{list-style:none;margin:0;padding-left:0}
.tree ul{list-style:none;padding-left:16px;margin:0}
.tree li{padding:2px 0}
.tree summary{cursor:pointer}
.tree small{color:var(--ink-3);font:var(--t-label) var(--font-mono)}
.tree .file{border-bottom:0}

/* дело компании (представление model): плитки цифр, тревоги, доска сделок */
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(170px,100%),1fr));gap:10px;margin:4px 0 14px}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px}
.tile small{display:block;color:var(--ink-3);font:var(--t-label)/1.4 var(--font-mono)}
.tile b{font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}
.alerts{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr));gap:12px;align-items:start}
/* .blocks и .alerts без пустот, как в Pinterest: page.js ставит .packed и каждой карточке — столько строк по 1px,
   какой она высоты; отступ между карточками по вертикали — тот же gap, он прибавлен к высоте */
.packed{grid-auto-rows:1px;row-gap:0}
.alert.t-critical{border-left:3px solid var(--neg)}
.alert h3 small,.col h3 small{color:var(--ink-3)}
.alert ul.notes li{display:block}
.alert ul.notes small{display:block;margin-top:2px}
.is-late{color:var(--neg)}
.board{display:flex;gap:12px;overflow-x:auto;padding-bottom:6px}
.col{flex:0 0 240px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}
.col.is-closed{opacity:.7}
.col h3{margin:0 0 6px;font:500 var(--t-label)/1.4 var(--font-mono);text-transform:uppercase;letter-spacing:var(--track-label);color:var(--ink-2)}
.col ul{list-style:none;margin:0;padding:0}
.col li{padding:7px 0;border-top:1px solid var(--line);overflow-wrap:anywhere}
.col li:first-child{border-top:0}
.col li small{display:block;color:var(--ink-3);font-size:var(--t-label)}
.col li .marks{display:block;color:var(--neg);font-size:var(--t-label)}

/* полоска «данные от … · обновляю…» над страницей из копии (page.js, stale) */
.ws-stale{position:sticky;top:0;z-index:5;padding:6px 16px;background:var(--surface);border-bottom:1px solid var(--line);color:var(--ink-3);font-size:var(--t-small)}
.ws-stale button{font:inherit;color:var(--accent, var(--ink));background:none;border:0;padding:0;text-decoration:underline;cursor:pointer}
/* строка связи с пультом в карточке «Сервер» (page.js, workspace-link) */
.ws-link{display:flex;align-items:baseline;gap:8px;margin:2px 0 10px;color:var(--ink-3);font-size:var(--t-small)}
.ws-link .ws-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--ink-3);transform:translateY(-1px)}
.ws-link.is-ok .ws-dot{background:var(--pos, #3a9a5b)}
.ws-link.is-bad{color:var(--ink)}
.ws-link.is-bad .ws-dot{background:var(--neg, #c94a3a)}

