<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/kamen</id>
  <link href="https://www.pandoraburo.ru/kamen.xml" rel="self"/>
  <title>Камень</title>
  <subtitle type="html">
&lt;html lang="ru"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width,initial-scale=1"&gt;
&lt;title&gt;Камень — зеркало цифр · Сети Пандорры&lt;/title&gt;
&lt;style&gt;
 body{font-family:Georgia,serif;background:#f4f1e8;color:#3a3a2a;max-width:760px;margin:0 auto;padding:24px;line-height:1.5}
 h1{font-size:26px} h2{font-size:18px;margin-top:26px}
 .card{border:1px solid #7a7a5a;border-radius:8px;padding:12px 16px;margin:10px 0;background:#fbf9f2}
 .pos{font-weight:bold;color:#8a6a1a}
 button{background:#3a3a2a;color:#f4f1e8;border:0;padding:10px 20px;border-radius:6px;font-size:15px;cursor:pointer}
 .note{font-size:14px;color:#5a5a45}
 textarea{width:100%;height:180px;border:1px solid #7a7a5a;border-radius:8px;background:#fbf9f2;color:#3a3a2a;font-family:Georgia,serif;font-size:14px;padding:12px;box-sizing:border-box;margin:12px 0}
 input{border:1px solid #7a7a5a;border-radius:6px;background:#fbf9f2;color:#3a3a2a;padding:8px;width:90px;font-size:14px}
 label{font-size:14px;margin-right:12px}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Камень · зеркало цифр&lt;/h1&gt;
&lt;p class="note"&gt;Цифры не лгут. Но они молчат — пока им не зададут вопрос. Камень смотрит на ваши числа и возвращает то, что вы не замечаете: тренды, зависимости и сезонные ямы.&lt;/p&gt;

&lt;h2&gt;Что это такое&lt;/h2&gt;
&lt;p class="note"&gt;«Камень» — ассоциативный инструмент Сетей Пандорры для предпринимателей. Вы вставляете свои цифры — выручку и расходы по месяцам — и Камень строит график, находит паттерны и задаёт три вопроса. В конце — протокол вашими словами. Камень не аудит и не финучёт: он показывает тренды, а проверку и решения делает человек.&lt;/p&gt;

&lt;h2&gt;Формат данных&lt;/h2&gt;
&lt;p class="note"&gt;По одной строке на месяц: &lt;b&gt;месяц; выручка; расходы&lt;/b&gt;. Из Excel можно копировать как есть (столбцы встанут через табуляцию). Минимум 4 месяца, лучше 6–12. Пробелы в числах («1 200 000») программа понимает.&lt;/p&gt;

&lt;textarea id="txt" placeholder="Янв; 1200000; 900000
Фев; 1350000; 950000
Мар; 900000; 920000
…"&gt;&lt;/textarea&gt;
&lt;label&gt;Клиентов: &lt;input id="cl" type="number" /&gt;&lt;/label&gt;
&lt;label&gt;Доля топ-клиента, %: &lt;input id="top" type="number" /&gt;&lt;/label&gt;
&lt;label&gt;Человек в команде: &lt;input id="team" type="number" /&gt;&lt;/label&gt;
&lt;p&gt;&lt;button onclick="analyze()"&gt;Спросить Камень&lt;/button&gt; &lt;button onclick="resetAll()"&gt;Сбросить&lt;/button&gt;&lt;/p&gt;
&lt;div id="res"&gt;&lt;/div&gt;
&lt;p class="note"&gt;&lt;i&gt;Ваши цифры не покидают ваш браузер: хранение только локально. Камень — ассоциативный инструмент, не финансовая и не юридическая услуга.&lt;/i&gt;&lt;/p&gt;

&lt;script&gt;
let lastText="";
const fmt=n=&gt;Math.round(n).toLocaleString("ru-RU");
const clean=s=&gt;parseFloat(String(s).replace(/[^\d.-]/g,""));
function parseTable(txt){
 const rows=txt.trim().split(/\n+/).map(r=&gt;r.trim()).filter(Boolean);
 const data=[];
 rows.forEach((r,idx)=&gt;{
  let parts=r.split(/\t|;|\|/).map(s=&gt;s.trim());
  if(parts.length&lt;2)parts=r.split(/,/).map(s=&gt;s.trim());
  let label,nums;
  if(parts.length&gt;=3){label=parts[0];nums=parts.slice(1,3);}
  else{label="М"+(idx+1);nums=parts;}
  const rev=clean(nums[0]),exp=clean(nums[1]);
  if(!isNaN(rev)&amp;&amp;!isNaN(exp))data.push({label,rev,exp});
 });
 return data;
}
function chart(d){
 const W=700,H=240,P=34;
 const max=Math.max(...d.map(x=&gt;Math.max(x.rev,x.exp)))*1.1||1;
 const x=i=&gt;P+i*(W-2*P)/Math.max(d.length-1,1);
 const y=v=&gt;H-P-(v/max)*(H-2*P);
 const lr=d.map((q,i)=&gt;(i?"L":"M")+x(i).toFixed(1)+","+y(q.rev).toFixed(1)).join(" ");
 const le=d.map((q,i)=&gt;(i?"L":"M")+x(i).toFixed(1)+","+y(q.exp).toFixed(1)).join(" ");
 return '&lt;svg viewBox="0 0 700 240" style="width:100%;background:#fbf9f2;border:1px solid #7a7a5a;border-radius:8px"&gt;'
 +'&lt;path d="'+lr+'" fill="none" stroke="#3a3a2a" stroke-width="2"/&gt;'
 +'&lt;path d="'+le+'" fill="none" stroke="#8a6a1a" stroke-width="2"/&gt;'
 +'&lt;text x="'+P+'" y="'+(H-8)+'" font-size="12" fill="#5a5a45"&gt;'+d[0].label+'&lt;/text&gt;'
 +'&lt;text x="'+(W-P)+'" y="'+(H-8)+'" font-size="12" fill="#5a5a45" text-anchor="end"&gt;'+d[d.length-1].label+'&lt;/text&gt;'
 +'&lt;text x="'+P+'" y="18" font-size="12" fill="#3a3a2a"&gt;— выручка&lt;/text&gt;'
 +'&lt;text x="'+(P+110)+'" y="18" font-size="12" fill="#8a6a1a"&gt;— расходы&lt;/text&gt;&lt;/svg&gt;';
}
function analyze(){
 const d=parseTable(document.getElementById("txt").value);
 if(d.length&lt;4){document.getElementById("res").innerHTML='&lt;div class="card"&gt;Камню нужно минимум 4 месяца цифр. Вставьте строки в формате «месяц; выручка; расходы».&lt;/div&gt;';return;}
 const top=clean(document.getElementById("top").value);
 const n=d.length;
 const totRev=d.reduce((s,x)=&gt;s+x.rev,0),totExp=d.reduce((s,x)=&gt;s+x.exp,0);
 const avgM=totRev&gt;0?(totRev-totExp)/totRev*100:0;
 const f=[];
 if(n&gt;=6){
  const s=a=&gt;a.reduce((p,q)=&gt;p+q,0);
  const r1=s(d.slice(0,3).map(x=&gt;x.rev)),r2=s(d.slice(-3).map(x=&gt;x.rev));
  const e1=s(d.slice(0,3).map(x=&gt;x.exp)),e2=s(d.slice(-3).map(x=&gt;x.exp));
  const rg=r1?(r2-r1)/r1*100:0,eg=e1?(e2-e1)/e1*100:0;
  if(eg&gt;rg+5)f.push("Расходы растут быстрее выручки ("+Math.round(eg)+"% против "+Math.round(rg)+"% за период). Это ещё не кризис, но уже тренд.");
 }
 let dec=0,maxDec=0;
 for(let i=1;i&lt;n;i++){if(d[i].rev&lt;d[i-1].rev){dec++;maxDec=Math.max(maxDec,dec);}else dec=0;}
 if(maxDec&gt;=3)f.push("Выручка падает "+maxDec+" месяца подряд. Пора спросить: это тренд или ситуация?");
 if(avgM&lt;15)f.push("Средняя маржа "+Math.round(avgM)+"%. Ниже 15% вы работаете на оборот и на риск.");
 if(d[n-1].exp&gt;d[n-1].rev)f.push("Последний месяц вы жили в минус: расходы выше выручки.");
 if(n&gt;=8){
  const avg=totRev/n;
  const low=d.filter(x=&gt;x.rev&lt;avg*0.75).map(x=&gt;x.label);
  if(low.length&gt;=2)f.push("Месяцы "+low.join(", ")+" заметно ниже среднего. Похоже на сезонность: мост можно строить заранее.");
 }
 if(!isNaN(top)){
  if(top&gt;=50)f.push("На крупнейшего клиента — "+top+"%. Его «до свидания» — ваш кассовый разрыв. Это не клиент, это зависимость.");
  else if(top&gt;=30)f.push("На крупнейшего клиента — "+top+"%. Пока безопасно, но вторую опору стоит растить уже сейчас.");
 }
 let h='&lt;div class="card"&gt;&lt;div class="pos"&gt;Ваши цифры&lt;/div&gt;&lt;p&gt;Месяцев — '+n+' · выручка всего — '+fmt(totRev)+' · расходы всего — '+fmt(totExp)+' · средняя маржа — '+Math.round(avgM)+'%&lt;/p&gt;&lt;/div&gt;';
 h+='&lt;div class="card"&gt;'+chart(d)+'&lt;/div&gt;';
 h+='&lt;div class="card"&gt;&lt;div class="pos"&gt;Что видит Камень&lt;/div&gt;';
 if(f.length)f.forEach(o=&gt;{h+='&lt;p&gt;· '+o+'&lt;/p&gt;';});
 else h+='&lt;p&gt;· Резких паттернов не видно. Камень видит тренды, а не приговоры: если всё ровно — это тоже ответ. Проверьте, не ровность ли это застоя.&lt;/p&gt;';
 h+='&lt;/div&gt;';
 h+='&lt;div class="card"&gt;&lt;div class="pos"&gt;Три вопроса&lt;/div&gt;&lt;p&gt;За какую цифру вы вздрогнули — и почему именно она? Чьим голосом сказано «надо тратить больше / надо экономить»? Какого одного решения просят эти цифры?&lt;/p&gt;&lt;/div&gt;';
 h+='&lt;div class="card"&gt;&lt;b&gt;Протокол&lt;/b&gt;&lt;p&gt;Запишите своими словами: моё решение — … Оно моё, потому что — … Я пойму, что иду своим путём, когда — …&lt;/p&gt;&lt;p&gt;&lt;button onclick="copyRes(this)"&gt;Скопировать протокол&lt;/button&gt; &lt;button onclick="saveRes()"&gt;Скачать .txt&lt;/button&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Цифры — зеркало, а не приговор. Ответ — ваш.&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;';
 lastText="КАМЕНЬ · ЗЕРКАЛО ЦИФР — СЕТИ ПАНДОРРЫ\n"+new Date().toLocaleDateString("ru-RU")+"\n\nВАШИ ЦИФРЫ\nМесяцев — "+n+" · выручка всего — "+fmt(totRev)+" · расходы всего — "+fmt(totExp)+" · средняя маржа — "+Math.round(avgM)+"%\n\nЧТО ВИДИТ КАМЕНЬ\n";
 f.forEach(o=&gt;{lastText+="· "+o+"\n";});
 if(!f.length)lastText+="· Резких паттернов не видно.\n";
 lastText+="\nТРИ ВОПРОСА\nЗа какую цифру вы вздрогнули — и почему именно она? Чьим голосом сказано «надо тратить больше / надо экономить»? Какого одного решения просят эти цифры?\n\nПРОТОКОЛ\nМоё решение — …\nОно моё, потому что — …\nЯ пойму, что иду своим путём, когда — …\n\nЦифры — зеркало, а не приговор. Ответ — ваш.\n";
 document.getElementById("res").innerHTML=h;
 try{localStorage.setItem("pandorra-kamen",JSON.stringify({t:document.getElementById("txt").value,c:document.getElementById("cl").value,o:document.getElementById("top").value,m:document.getElementById("team").value}));}catch(e){}
}
function resetAll(){
 document.getElementById("txt").value="";document.getElementById("cl").value="";document.getElementById("top").value="";document.getElementById("team").value="";
 document.getElementById("res").innerHTML="";lastText="";
 try{localStorage.removeItem("pandorra-kamen");}catch(e){}
}
try{
 const s=JSON.parse(localStorage.getItem("pandorra-kamen")||"null");
 if(s){document.getElementById("txt").value=s.t||"";document.getElementById("cl").value=s.c||"";document.getElementById("top").value=s.o||"";document.getElementById("team").value=s.m||"";}
}catch(e){}
function copyRes(b){
 const ok=()=&gt;{b.textContent="Скопировано ✓";setTimeout(()=&gt;{b.textContent="Скопировать протокол";},2000);};
 if(navigator.clipboard&amp;&amp;navigator.clipboard.writeText){navigator.clipboard.writeText(lastText).then(ok);}
 else{const t=document.createElement("textarea");t.value=lastText;document.body.appendChild(t);t.select();document.execCommand("copy");document.body.removeChild(t);ok();}
}
function saveRes(){
 const blob=new Blob([lastText],{type:"text/plain;charset=utf-8"});
 const a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="kamen-pandorry.txt";a.click();URL.revokeObjectURL(a.href);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-08-13T05:18:20Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/69/be1662953111f1a508b532fbee6d5f/-/logo.png</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
